![ZFS 估计的发送大小远大于总数据大小](https://linux22.com/image/659645/ZFS%20%E4%BC%B0%E8%AE%A1%E7%9A%84%E5%8F%91%E9%80%81%E5%A4%A7%E5%B0%8F%E8%BF%9C%E5%A4%A7%E4%BA%8E%E6%80%BB%E6%95%B0%E6%8D%AE%E5%A4%A7%E5%B0%8F.png)
从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 版本发布以来,已经进行了大量增强和修复。