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

s1l*_*v3r 3 freebsd zfs

因此,我在基于 zfs 的备份服务器上空间不足,并删除了一些旧备份,但文件系统上的空间随后并未释放。

第一个猜测?周围一定还残留着一些旧的快照。所以我跑了:

zfs list -t snapshot | grep "pool/backups@"
Run Code Online (Sandbox Code Playgroud)

确实有一些:

NAME                                USED    AVAIL   MOUNTPOINT
pool/backups@auto-20140118.1656-5y  4.81M   0       0
pool/backups@auto-20140120.0900-5y  270K    0       0
pool/backups@auto-20140121.0901-5y  270K    0       0
pool/backups@auto-20140122.0902-5y  270K    0       0
pool/backups@auto-20140123.0903-5y  270K    0       0
pool/backups@auto-20140124.0904-5y  270K    0       0
pool/backups@auto-20140125.0905-5y  270K    0       0
pool/backups@auto-20140126.0906-5y  270K    0       0
Run Code Online (Sandbox Code Playgroud)

但是,虽然我本希望看到USED我刚刚删除的大小约为 400G 的快照,但根本没有任何大小值得注意的快照。

我确实花了几个小时试图在其他地方找到问题,当我最终运行时:

zfs destroy -nv pool/backups@
Run Code Online (Sandbox Code Playgroud)

令人惊讶的输出是:

will destroy pool/backups@auto-20140118.1656-5y
will destroy pool/backups@auto-20140120.0900-5y
will destroy pool/backups@auto-20140121.0901-5y
will destroy pool/backups@auto-20140122.0902-5y
will destroy pool/backups@auto-20140123.0903-5y
will destroy pool/backups@auto-20140124.0904-5y
will destroy pool/backups@auto-20140125.0905-5y
will destroy pool/backups@auto-20140126.0906-5y
will reclaim 421G
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:为什么不zfs list显示快照的实际大小?我应该采取什么不同的措施才能首先获得快照消耗的实际空间?

Mal*_*ous 5

我遇到了同样的问题,我在r/zfs上得到了答案。问题是该USED列仅显示该快照特有的块。如果块在多个快照之间共享,则根本不会列出它们。这样,当您删除快照时,您将USED再次获得确切的空间,如果该快照中的块仍被其他快照使用,则该空间将接近于零。

当您一个接一个地删除快照时,最终您将只剩下一个引用这些块的快照,并且突然所有空间都将显示在列中USED

这并不理想,但我认为他们确实有道理 - 如果在您的情况下,一堆快照之间共享 400 GB,但删除其中任何一个快照都不会释放任何空间,您如何显示它?