从zfs send -R -v pool/fs@snap
:
send from @ to pool/fs@snap estimated size is 6.50T
...但来自zpool list
:
NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT
pool 3.62T 2.36T 1.27T 65% 2.87x ONLINE -
一条zfs send
溪流真的能比它来源的水池大几倍吗?
使用 Linux 0.6.1 上的 ZFS 进行观察。
答案1
作为特格拜恩斯在评论中指出,zfs send
流不会从任何现有的存储级重复数据删除中受益。它们也不会从任何其他设置中受益;这就是为什么zfs send | zfs receive
可以使用它将数据迁移到新设置,否则这些设置只有在重写数据后才会生效——例如启用或禁用重复数据删除,或更改压缩算法。
这是 zfs 发送流变得比分配的存储空间大得多的主要原因。有可能在重复数据删除的具体情况下,除了最小意外原则(如果你需要的话)之外,原因在于重复数据删除(尤其在 ZFS 中)的成本非常高,因此决定 zfs 发送流应该可以在规格较低的系统上接收。
您的数据显示已分配约 2.36 TB,总体重复数据删除率为 2.87 倍。简单地将这两个数字相乘可得出 6.77 TB,这与估计的 6.50 TB 非常接近,是一个合理的大概数字。值得注意的是,6.50 TB 这个数字与文件系统中的快照有关,而 2.36 TB*2.87 这个数字与整个池有关。
如果您的 ZFS 实现支持该选项,您可能会遇到一些好运zfs send -D
(生成重复数据删除的 zfs 发送流)。
使用 Linux 0.6.1 上的 ZFS 进行观察。
与您的问题没有直接关系,但我建议升级。稳定佐利截至撰写本文时(2015 年 6 月),版本号为 0.6.4.1,自 2013 年 3 月 0.6.1 版本发布以来,已经进行了大量增强和修复。