ZFS快照对文件修改,移动和重命名的行为处理

柯林斯

由于ZFS被描述为更像是数据库而不是文件系统,因此可以预期ZFS的行为也更像是版本管理系统,可以智能地管理文件的修改,移动和重命名。这些问题专门询问有关快照的信息,但是快照与克隆和

  1. 在快照后在ZFS中修改文件时,快照的大小将是一样的,只是不同之处还是整个文件?
  2. 在快照后在ZFS中移动文件时,快照是否基本上保持零大小?
  3. 在快照后在ZFS中重命名文件时,快照是否基本上保持零大小?
  4. 当文件在快照后具有自身的硬链接副本时,快照将基本上保持空白吗?

  5. 有人建议BTRFS被设计成与ZFS基本上具有相同的功能,那么在这些情况下是否会期望它们具有相同的行为?

  6. 当Windows计算机通过SAMBA远程访问ZFS共享时,上述相同行为是否成立,还是SAMBA是标准驱动器指令的子集,即移动变为复制+删除?

  7. 是否可以一般性地回答上述问题,或者答案是否都是针对特定实现的?

根据评论者的要求,以下是对所述操作进行的测试:

系统信息:

  • CentOS 7内核3.10.0
  • ZFS v0.6.5.9-1

                  `zpool list`           `zfs list`
      POOL        SIZE  ALLOC   FREE    USED   AVAIL  REFER

创建池: zpool create -m /test/mnt FILE-TEST /test/1.img /test/2.img

      FILE-TEST   224M  80.5K    224M    73K    192M    19K

快照: zfs snapshot FILE-TEST@1

      FILE-TEST   224M   122K    224M    73K    192M    19K
      FILE-TEST@1                          0       -    19K

创建文件: echo ‘test’ > /test/mnt/test.txt

      FILE-TEST   224M   132K    224M    95K    192M    21K
      FILE-TEST@1                        17K       -    19K

增加文件大小:`head -c 128K /test/mnt/test.txt

      FILE-TEST   224M   678K   223M    490K    192M    148K
      FILE-TEST@1                        17K       -    19K

快照: zfs snapshot FILE-TEST@2

      FILE-TEST   224M   267K   224M    239K    192M    148K
      FILE-TEST@1                        17K       -     19K
      FILE-TEST@2                          0       -     48K

编辑文件,更改最后4个字节。

      FILE-TEST   224M  1.07M   223M    386K    192M    148K
      FILE-TEST@1                        17K       -     19K
      FILE-TEST@2                       138K       -    148K

快照: zfs snapshot FILE-TEST@3

      FILE-TEST   224M   548K   223M    388K    192M    148K
      FILE-TEST@1                        17K       -     19K
      FILE-TEST@2                       138K       -    148K
      FILE-TEST@3                          0       -    148K

重新命名文件 mv test.txt test2.txt

      FILE-TEST   224M   552K   223M    404K    192M    150K
      FILE-TEST@1                        17K       -     19K
      FILE-TEST@2                       138K       -    148K
      FILE-TEST@3                        10K       -    148K

快照: zfs snapshot FILE-TEST@4

      FILE-TEST   224M  1.06M   223M    645K    191M    150K
      FILE-TEST@1                        17K       -     19K
      FILE-TEST@2                       138K       -    148K
      FILE-TEST@3                        10K       -    148K
      FILE-TEST@4                          0       -    150K

新建文件夹: mkdir /test/mnt/subdir

      FILE-TEST   224M   716K   223M    420K    192M    151K
      FILE-TEST@1                        17K       -     19K
      FILE-TEST@2                       138K       -    148K
      FILE-TEST@3                        10K       -    148K
      FILE-TEST@4                         9K       -    150K

快照: zfs snapshot FILE-TEST@5

      FILE-TEST   224M   790K   223M    424K    192M    151K
      FILE-TEST@1                        17K       -     19K
      FILE-TEST@2                       138K       -    148K
      FILE-TEST@3                        10K       -    148K
      FILE-TEST@4                         9K       -    150K
      FILE-TEST@5                          0       -    151K

移动文件: mv /test/mnt/test2.txt /test/mnt/subdir/

      FILE-TEST   224M   584K   223M    444K    192M    151K
      FILE-TEST@1                        17K       -     19K
      FILE-TEST@2                       138K       -    148K
      FILE-TEST@3                        10K       -    148K
      FILE-TEST@4                         9K       -    150K
      FILE-TEST@5                        10K       -    151K

快照: zfs snapshot FILE-TEST@6

      FILE-TEST   224M   602K   223M    447K    192M    151K
      FILE-TEST@1                        17K       -     19K
      FILE-TEST@2                       138K       -    148K
      FILE-TEST@3                        10K       -    148K
      FILE-TEST@4                         9K       -    150K
      FILE-TEST@5                        10K       -    151K
      FILE-TEST@6                          0       -    151K

创建硬链接文件: cp -l /test/mnt/subdir/test2.txt /test/mnt/subdir/test3.txt

      FILE-TEST   224M   603K   223M    466K    192M    152K
      FILE-TEST@1                        17K       -     19K
      FILE-TEST@2                       138K       -    148K
      FILE-TEST@3                        10K       -    148K
      FILE-TEST@4                         9K       -    150K
      FILE-TEST@5                        10K       -    151K
      FILE-TEST@6                        12K       -    151K

从上面的观察:

  • SIZE和FREE是非常恒定的,并且与文件的已用空间一致
  • ALLOC是随机的
  • 快照上的REFER似乎等于池中的当前REFER
  • 在大多数操作中,快照中的USED大约为10KB,但文件更改除外,其中USED略大于整个更改的文件大小。
  • 池中使用的不等跃点增长
  • 每个操作的REFER逐渐增长到大约1K
  • 非当前快照的大小保持不变
用户名
  1. 在快照后在ZFS中修改文件时,快照的大小将是一样的,只是不同之处还是整个文件?

不同的块会增加大小。

这意味着,如果一个文件包含100个块,并且您修改了一个字节(假设一个字节小于一个块),那么最后将添加一个新块(总共101个),您的旧文件将引用第1到100个块(可以从快照中以只读方式访问),并且您的新文件/当前文件将引用块1到37和39到101(或任何其他组合,具体取决于您的实际修改操作)。

销毁快照后,块38将被标记为空闲并且可以被覆盖(只要没有其他快照引用该块)。

  1. 在快照后在ZFS中移动文件时,快照是否基本上保持零大小?

在同一个文件系统中,是,除了元数据(例如,引用必须重新排列)。

在文件系统之间,即使文件系统位于相同的池或彼此的后代中,它也是完整的复制+删除操作。

  1. 在快照后在ZFS中重命名文件时,快照是否基本上保持零大小?

是的,除了元数据(例如,您的新名称必须记录在某处)。

  1. 当文件在快照后具有自身的硬链接副本时,快照将基本上保持空白吗?

您能在这里更具体吗?

  1. 有人建议BTRFS被设计成与ZFS基本上具有相同的功能,那么在这些情况下是否会期望它们具有相同的行为?

我不认为它所做的一切都一样。

  1. 当Windows计算机通过SAMBA远程访问ZFS共享时,上述相同行为是否成立,还是SAMBA是标准驱动器指令的子集,即移动变为复制+删除?

您有两种可能的Windows文件共享实现方式-由Sun为Solaris开发并通过OpenSolaris / illumos开源的CIFS服务器,或几乎在所有GNU / Linux发行版和BSD系统中使用的Samba SMB实现:

  • Solaris版本更适合ZFS功能(例如直接在文件系统上设置共享属性,将ZFS快照实现为Windows早期版本)。
  • 另一方面,Samba版本更具跨平台性,并具有一些更高级的功能,例如(部分)SMB3支持,IIRC。

我假设在第二种情况下,尽管我没有测试,但与其他系统几乎相同。

  1. 是否可以一般性地回答上述问题,或者答案是否都是针对特定实现的?

如果您想阅读C代码,则可以根据illumos / OpenZFS存储库(Github存储库)上的代码专门回答,也可以根据手册页和文档进行一般回答。例如,在此详细说明了REFER,USED等属性。最有趣的联机帮助页是man zpool(硬件,磁盘布局,池属性),man zfs(文件系统属性,快照,克隆),man chmod(仅Solaris / illumos,文件和共享ACL)和man zdb(调试和分析)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用FtpWebRequest移动/重命名文件

来自分类Dev

根据文件所在的文件夹移动和重命名文件

来自分类Dev

批处理程序以重命名和删除文件

来自分类Dev

骆驼处理后如何重命名和移动FTP上的文件?

来自分类Dev

Bash脚本来查找,处理和重命名文件?

来自分类Dev

创建批处理文件以删除,重命名和移动多个文件的多个子文件夹

来自分类Dev

使用Bash重命名和移动通配符文件

来自分类Dev

批处理文件名和重命名

来自分类Dev

Powershell脚本来移动和重命名文件

来自分类Dev

查找和重命名文件

来自分类Dev

VBScript问题重命名和移动日志文件

来自分类Dev

骆驼处理后,如何重命名和移动FTP上的文件?

来自分类Dev

根据父目录移动和重命名文件

来自分类Dev

在Red Hat中同时移动和重命名文件

来自分类Dev

Bash脚本来查找,处理和重命名文件?

来自分类Dev

批处理文件重命名和目录自动计数

来自分类Dev

创建批处理文件以删除,重命名和移动多个文件的多个子文件夹

来自分类Dev

外壳移动文件并重命名它们

来自分类Dev

具有修改时间限制的批处理重命名文件

来自分类Dev

批处理文件以复制和重命名文件

来自分类Dev

循环两个文件(重命名和移动)

来自分类Dev

批量文件重命名和移动

来自分类Dev

批处理脚本以递归方式移动.txt文件并重命名它们以替换特定字符

来自分类Dev

在文件被移动或重命名后要保留对文件的引用的策略?

来自分类Dev

使用Babel WebStorm Filewatcher重命名和移动文件

来自分类Dev

重命名文件和目录

来自分类Dev

复制和重命名文件

来自分类Dev

复制和重命名文件

来自分类Dev

编写脚本来重命名和移动文件

Related 相关文章

热门标签

归档