获得ZFS文件系统大小的更精确的方法?

由于备份设备的空间不足,我一直无法备份ZFS文件系统

我第一次忘记压缩已启用。 但是,第二次尝试,我得到了文件系统的压缩率,并得到了du返回的表观大小。

这些在尺寸上一致:

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倍,以适应6TB驱动器,这得到du的重申:

 louis@watson:~$ cd /data/gelato/ louis@watson:/data/gelato$ sudo du -hs --apparent-size 4.6T . 

但是在备份过程中我又一次跑出了空间,我不知道为什么。 当6TB驱动器空间不足时,可能还有不到1TB的拷贝。 尽pipe如此,我认为这可能会导致这种差异。

花絮:

 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)。 这是否意味着快照不被复制?

有些事情要考虑:

  • 检查源和目标的logging大小(使用zfs list -o recsize watson/gelato )。 如果你有很多小数据但logging大,空间就会浪费。 另一方面,由于标题和元数据,空间也被浪费了,但是通常效果并不明显。 如果通过SMB / CIFS共享文件系统,则可以使用Windows资源pipe理器文件夹属性窗口查看不同之处。
  • 检查两个驱动器上的扇区alignment(灰分),并与驱动器规格进行比较(可在驱动器型号的技术数据表中find)。 错误的alignment会对游泳池的空间造成负面影响 (在这个例子中,他损失了大约9%)。
  • 检查copies属性是否被设置为1或更大值(过去可能已被设置和禁用,并且在之间的时间段内为新写入的数据创build拷贝)。
  • 获取有关空间如何与usedbychildren使用的属性, usedbydatasetusedbyrefreservationusedbysnapshots更多详细信息。 他们总结used ,所以这不是什么新东西,但可以帮助识别旧的快照等。
  • 要查看数据和元数据使用的空间量,就好像压缩已停用一样,请检查logicalusedlogicalreferenced属性
  • 由于指定数据大小的不同(基数2与基数10不同),6TB驱动器实际上只有大约5.457TB(比假定的less9%)。

我会build议zpool list

我也会检查快照的使用情况。 你的环境中是否有快照?