获取 ZFS 文件系统大小的更准确方法?

获取 ZFS 文件系统大小的更准确方法?

由于我的备份设备空间不足,我在备份 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通过属性、usedbydatasetusedbyrefreservation和了解有关如何使用空间的更多详细信息usedbysnapshots。它们总计为used,因此这不是什么新东西,但可以帮助识别旧快照等。
  • 要查看数据和元数据使用的空间量(如果已停用压缩),请检查属性logicalusedlogicalreferenced
  • 由于指定数据大小的差异(以 2 为基数与以 10 为基数),您的 6 TB 驱动器实际上只有大约 5.457 TiB(比假设的少 9%)。

答案2

我建议zpool list

我还会检查快照使用情况。您的环境中有任何快照吗?

相关内容