因此,我在基于 zfs 的备份服务器上空间不足,并删除了一些旧备份,但文件系统上的空间随后并未释放。
第一个猜测?周围一定还残留着一些旧的快照。所以我跑了:
zfs list -t snapshot | grep "pool/backups@"
确实有一些:
NAME USED AVAIL MOUNTPOINT
pool/[email protected] 4.81M 0 0
pool/[email protected] 270K 0 0
pool/[email protected] 270K 0 0
pool/[email protected] 270K 0 0
pool/[email protected] 270K 0 0
pool/[email protected] 270K 0 0
pool/[email protected] 270K 0 0
pool/[email protected] 270K 0 0
但是,虽然我本希望看到USED
我刚刚删除的大小约为 400G 的快照,但根本没有任何大小值得注意的快照。
我确实花了几个小时试图在其他地方找到问题,当我最终运行时:
zfs destroy -nv pool/backups@
令人惊讶的输出是:
will destroy pool/[email protected]
will destroy pool/[email protected]
will destroy pool/[email protected]
will destroy pool/[email protected]
will destroy pool/[email protected]
will destroy pool/[email protected]
will destroy pool/[email protected]
will destroy pool/[email protected]
will reclaim 421G
所以我的问题是:为什么不zfs list
显示快照的实际大小?我应该采取什么不同的措施才能首先获得快照消耗的实际空间?
答案1
我遇到了同样的问题,我得到了答案r/zfs。问题是该USED
列仅显示该快照特有的块。如果块在多个快照之间共享,则根本不会列出它们。这样,当您删除快照时,您将USED
再次获得准确的空间,如果该快照中的块仍被其他快照使用,则该空间将接近于零。
当您一个接一个地删除快照时,最终您将只剩下一个引用这些块的快照,并且突然所有空间都将显示在列中USED
。
这并不理想,但我认为他们确实有道理 - 如果在您的情况下,一堆快照之间共享 400 GB,但删除其中任何一个快照都不会释放任何空间,您如何显示它?
答案2
在我看来,这是您的命令版本中的一个错误zfs
。也许查看 FreeBSD 错误报告。
几乎可以肯定,这只是一个输出/显示错误(我认为如果这是存储核算的更深层次问题,您会注意到非常奇怪的行为)
zfsonlinux0.6.5.6 在我的系统上正确显示空间量该快照使用的在“已使用”列中:
# zfs list -t snapshot -r backup/hosts/kali
NAME USED AVAIL REFER MOUNTPOINT
[...deleted...]
backup/hosts/kali@2016-05-24 526M - 44.1G -
backup/hosts/kali@2016-05-25 162M - 44.1G -
backup/hosts/kali@2016-05-26 137M - 44.1G -
backup/hosts/kali@2016-05-27 116M - 44.1G -
backup/hosts/kali@2016-05-28 195M - 44.0G -
backup/hosts/kali@2016-05-29 528M - 44.4G -
backup/hosts/kali@2016-05-30 0 - 44.5G -
文件backup/hosts/kali
系统本身如下所示:
# zfs list backup/hosts/kali
NAME USED AVAIL REFER MOUNTPOINT
backup/hosts/kali 48.5G 4.06T 44.5G /backup/hosts/kali
请参阅man zfs
、搜索Native Properties
和referenced
/或used
了解有关这些字段对于文件系统和快照的确切含义的更多信息。
另请参见-o
的选项zfs list
。您也许可以使用它来绕过错误并准确地获得您想要的输出。
例如
# zfs list -o space backup/hosts/kali
NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD
backup/hosts/kali 4.06T 48.5G 4.03G 44.5G 0 0
顺便说一句,不需要按照您的命令进行管道zfs list...
传输。尝试一下。grep
zfs list -t snapshot | grep "pool/backups@"
zfs list -t snapshot -r pool/backups