[root@localhost ~]# zfs list -t all -r tank/test-dedup
NAME USED AVAIL REFER MOUNTPOINT
tank 32.3M 9.61G 24K /tank
tank/test-dedup 32.1M 9.61G 16.0M /tank/test-dedup
tank/test-dedup@1 16.0M - 16.0M -
[root@localhost ~]# zpool list tank
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
tank 9.94G 16.3M 9.92G - 0% 0% 2.00x ONLINE -
是的,如果从文件集中获取快照,ZFS 将为同一文件分配额外空间。
首先让我们创建一个空文件集并准备一个要从中复制的文件。为简单起见,关闭了压缩,并在没有任何raidz或mirror的单个磁盘上创建了池。
可以使用 来查看磁盘上使用的空间
zpool list
。现在将文件复制到 ZFS 文件集,创建快照并查看使用的空间。
好的,再次将相同的文件复制到 ZFS 文件集中的相同位置,并再次查看使用的空间。
池中使用的磁盘空间也增长到 32MB。
如您所见,
tank/test
文件集现在总共占 32MB,分为文件集中的 16MBtank/test
和tank/test@1
快照中的 16MB。的输出还zpool list
显示了磁盘上的 32MB 分配。如果您重复复制并拍摄快照,则
tank/test
USED 总量会进一步增长。更新
感谢@Andrew Henle 的提问。必须更新我上面的答案,并将继续下面的重复数据删除内容。
让我们使用启用了重复数据删除的文件集再次执行此操作。
我将跳过这里的单个步骤,只添加已用空间概述的输出。
启用重复数据删除后,仍报告快照使用额外大小,但正如您所见,
zpool list
重复数据删除节省了磁盘空间,并提供了 2 的重复数据删除率。IIRC 通常不建议使用重复数据删除,因为内存使用量很大并且会影响性能。我认为正在改进 ZFS 中的重复数据删除功能。