为什么 zfs list 不输出快照的实际大小?

为什么 zfs list 不输出快照的实际大小?

因此,我在基于 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 Propertiesreferenced/或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...传输。尝试一下。grepzfs list -t snapshot | grep "pool/backups@"zfs list -t snapshot -r pool/backups

相关内容