由于 ZFS 被描述为更像数据库而不是文件系统,因此我们有理由期望它的行为也更像版本管理系统,智能地管理文件修改、移动和重命名。这些问题专门询问有关快照的问题,但是快照与克隆有很多共同点
\n\n当文件在快照后具有其自身的硬链接副本时,快照是否基本上保持为空?
有人建议 BTRFS 的设计目的与 ZFS 大致相同,那么在这些条件下它是否会具有相同的行为?
当 Windows 计算机通过 SAMBA 远程访问 ZFS 共享时,上述相同行为是否成立,或者 SAMBA 是否是标准驱动器指令的子集(即移动变为复制+删除)?
是否可以笼统地回答上述问题,或者答案都是特定于实现的?
根据评论者的要求,以下是对所描述的操作执行的测试:
\n\n系统信息:
\n\n。
\n\n `zpool list` `zfs list`\n POOL SIZE ALLOC FREE USED AVAIL REFER\nRun Code Online (Sandbox Code Playgroud)\n\n创建池:zpool create -m /test/mnt FILE-TEST /test/1.img /test/2.img
FILE-TEST 224M 80.5K 224M 73K 192M 19K\nRun Code Online (Sandbox Code Playgroud)\n\n快照:zfs snapshot FILE-TEST@1
FILE-TEST 224M 122K 224M 73K 192M 19K\n FILE-TEST@1 0 - 19K\nRun Code Online (Sandbox Code Playgroud)\n\n创建文件:echo \xe2\x80\x98test\xe2\x80\x99 > /test/mnt/test.txt
FILE-TEST 224M 132K 224M 95K 192M 21K\n FILE-TEST@1 17K - 19K\nRun Code Online (Sandbox Code Playgroud)\n\n增加文件大小:`head -c 128K /test/mnt/test.txt
\n\n FILE-TEST 224M 678K 223M 490K 192M 148K\n FILE-TEST@1 17K - 19K\nRun Code Online (Sandbox Code Playgroud)\n\n快照:zfs snapshot FILE-TEST@2
FILE-TEST 224M 267K 224M 239K 192M 148K\n FILE-TEST@1 17K - 19K\n FILE-TEST@2 0 - 48K\nRun Code Online (Sandbox Code Playgroud)\n\n编辑文件,更改最后 4 个字节。
\n\n FILE-TEST 224M 1.07M 223M 386K 192M 148K\n FILE-TEST@1 17K - 19K\n FILE-TEST@2 138K - 148K\nRun Code Online (Sandbox Code Playgroud)\n\n快照:zfs snapshot FILE-TEST@3
FILE-TEST 224M 548K 223M 388K 192M 148K\n FILE-TEST@1 17K - 19K\n FILE-TEST@2 138K - 148K\n FILE-TEST@3 0 - 148K\nRun Code Online (Sandbox Code Playgroud)\n\n重新命名文件mv test.txt test2.txt
FILE-TEST 224M 552K 223M 404K 192M 150K\n FILE-TEST@1 17K - 19K\n FILE-TEST@2 138K - 148K\n FILE-TEST@3 10K - 148K\nRun Code Online (Sandbox Code Playgroud)\n\n快照:zfs snapshot FILE-TEST@4
FILE-TEST 224M 1.06M 223M 645K 191M 150K\n FILE-TEST@1 17K - 19K\n FILE-TEST@2 138K - 148K\n FILE-TEST@3 10K - 148K\n FILE-TEST@4 0 - 150K\nRun Code Online (Sandbox Code Playgroud)\n\n新建文件夹:mkdir /test/mnt/subdir
FILE-TEST 224M 716K 223M 420K 192M 151K\n FILE-TEST@1 17K - 19K\n FILE-TEST@2 138K - 148K\n FILE-TEST@3 10K - 148K\n FILE-TEST@4 9K - 150K\nRun Code Online (Sandbox Code Playgroud)\n\n快照:zfs snapshot FILE-TEST@5
FILE-TEST 224M 790K 223M 424K 192M 151K\n FILE-TEST@1 17K - 19K\n FILE-TEST@2 138K - 148K\n FILE-TEST@3 10K - 148K\n FILE-TEST@4 9K - 150K\n FILE-TEST@5 0 - 151K\nRun Code Online (Sandbox Code Playgroud)\n\n移动文件:mv /test/mnt/test2.txt /test/mnt/subdir/
FILE-TEST 224M 584K 223M 444K 192M 151K\n FILE-TEST@1 17K - 19K\n FILE-TEST@2 138K - 148K\n FILE-TEST@3 10K - 148K\n FILE-TEST@4 9K - 150K\n FILE-TEST@5 10K - 151K\nRun Code Online (Sandbox Code Playgroud)\n\n快照:zfs snapshot FILE-TEST@6
FILE-TEST 224M 602K 223M 447K 192M 151K\n FILE-TEST@1 17K - 19K\n FILE-TEST@2 138K - 148K\n FILE-TEST@3 10K - 148K\n FILE-TEST@4 9K - 150K\n FILE-TEST@5 10K - 151K\n FILE-TEST@6 0 - 151K\nRun Code Online (Sandbox Code Playgroud)\n\n创建硬链接文件:cp -l /test/mnt/subdir/test2.txt /test/mnt/subdir/test3.txt
FILE-TEST 224M 603K 223M 466K 192M 152K\n FILE-TEST@1 17K - 19K\n FILE-TEST@2 138K - 148K\n FILE-TEST@3 10K - 148K\n FILE-TEST@4 9K - 150K\n FILE-TEST@5 10K - 151K\n FILE-TEST@6 12K - 151K\nRun Code Online (Sandbox Code Playgroud)\n\n从上述观察:
\n\n
- 当快照后在 ZFS 中修改文件时,快照的大小是相同且仅存在差异,还是整个文件?
不同的块会增加大小。
这意味着如果一个文件由 100 个块组成,并且您修改单个字节(假设一个字节小于一个块),则最后将添加一个新块(总共 101 个),您的旧文件将引用块 1 到 100(可以从快照中进行只读访问),并且您的新/当前文件将引用块 1 到 37 和 39 到 101(或任何其他组合,具体取决于您的实际修改操作)。
一旦您销毁快照,块 38 将被标记为空闲并且可以被覆盖(只要没有其他快照引用它)。
- 当文件在快照后移动到 ZFS 中时,快照的大小是否基本上保持为零?
在同一文件系统内是的,除了元数据(例如,引用必须重新排列)。
在文件系统之间,这是完整的复制+删除操作,即使文件系统位于同一池或彼此的后代上也是如此。
- 当快照后在 ZFS 中重命名文件时,快照的大小是否基本上保持为零?
是的,除了元数据(例如您的新名字必须记录在某处)。
- 当文件在快照后具有其自身的硬链接副本时,快照是否基本上保持为空?
您能在这里说得更具体一些吗?
- 有人建议 BTRFS 的设计目的与 ZFS 大致相同,那么在这些条件下它是否会具有相同的行为?
我不会假设它所做的一切都是一样的。
- 当 Windows 计算机通过 SAMBA 远程访问 ZFS 共享时,上述相同行为是否成立,或者 SAMBA 是否是标准驱动器指令的子集(即移动变为复制+删除)?
Windows 文件共享有两种可能的实现 - 要么是 Sun 为 Solaris 开发并通过 OpenSolaris/illumos 开源的 CIFS 服务器,要么是几乎所有 GNU/Linux 发行版和 BSD 系统中使用的 Samba SMB 实现:
我认为在第二种情况下,您的情况与其他系统上的情况几乎相同,尽管我没有测试它。
- 是否可以笼统地回答上述问题,或者答案都是特定于实现的?
如果您喜欢阅读 C 代码,您可以根据 illumos/OpenZFS repo(Github 存储库)上的代码具体回答,也可以根据手册页和文档进行一般性回答。例如,其中详细解释了 REFER、USED 等属性。最有趣的联机帮助页是man zpool(硬件、磁盘布局、池属性)、man zfs(文件系统属性、快照、克隆)、man chmod(仅限 Solaris/illumos、文件和共享 ACL)和man zdb(调试和分析)。
| 归档时间: |
|
| 查看次数: |
1295 次 |
| 最近记录: |