由于我的备份设备空间不足,我在备份 ZFS 文件系统时遇到了麻烦。
第一次我忘记启用了压缩。然而,第二次尝试时,我得到了文件系统的压缩率,也得到了返回的表观大小杜。
它们在尺寸上达成了一致:
louis@watson:~$ sudo zpool list
NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT
watson 3.62T 2.74T 904G 75% 1.00x ONLINE -
louis@watson:~$ sudo zfs list
NAME USED AVAIL REFER MOUNTPOINT
watson 2.74T 846G 30K none
watson/gelato 2.73T 846G 2.67T /data/gelato
louis@watson:~$ sudo zfs get compressratio watson/gelato
NAME PROPERTY VALUE SOURCE
watson/gelato compressratio 1.64x -
我预计压缩后 2.67 TB 可节省 1.64 倍,适合 6 TB 的硬盘,正如杜:
louis@watson:~$ cd /data/gelato/
louis@watson:/data/gelato$ sudo du -hs --apparent-size
4.6T .
但我在备份过程中再次用完了空间,我不知道为什么。当 6 TB 驱动器空间耗尽时,可能只剩下不到 1 TB 可供复制。不过,这远远超过了我能想到的任何可以解释差异的原因。
快照:
louis@watson:~$ sudo zfs list -o space
NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD
watson 846G 2.74T 0 30K 0 2.74T
watson/gelato 846G 2.73T 53.6G 2.67T 0 0
watson/home 846G 15.8G 57.3M 15.8G 0 0
有没有更好的方法来获取压缩 ZFS 文件系统上存储的数据的实际大小?
我应该提到我使用 rsync -avh 进行备份。在目标驱动器上我看不到快照(...../.zfs/snapshot)。这是否意味着快照未被复制?
答案1
需要考虑的一些事项:
- 检查源和目标的记录大小(使用
zfs list -o recsize watson/gelato
)。如果您有大量小数据但记录大小很大,则空间被浪费了。反过来,由于标头和元数据,空间也会被浪费,但通常影响并不明显。如果您通过 SMB/CIFS 共享文件系统,则可以使用 Windows 资源管理器文件夹属性窗口查看差异。 - 检查两个驱动器上的扇区对齐 (ashift),并与驱动器规格进行比较(可在驱动器型号的技术数据表中找到)。错误的对齐可能导致对泳池空间产生负面影响(在这个例子中他损失了大约 9%)。
- 检查该
copies
属性是否曾被设置为 1 或更大的值(这可能在过去被设置并禁用,并且在此期间为任何新写入的数据创建副本)。 usedbychildren
通过属性、usedbydataset
、usedbyrefreservation
和了解有关如何使用空间的更多详细信息usedbysnapshots
。它们总计为used
,因此这不是什么新东西,但可以帮助识别旧快照等。- 要查看数据和元数据使用的空间量(如果已停用压缩),请检查属性
logicalused
和logicalreferenced
- 由于指定数据大小的差异(以 2 为基数与以 10 为基数),您的 6 TB 驱动器实际上只有大约 5.457 TiB(比假设的少 9%)。
答案2
我建议zpool list
。
我还会检查快照使用情况。您的环境中有任何快照吗?