Freebsd

為什麼 zfs list 不輸出快照的實際大小?

  • April 27, 2020

因此,我在基於 zfs 的備份伺服器上的空間不足,並刪除了一些舊備份,但之後文件系統上的空間並未釋放。

第一個猜測?一定有一些舊的快照揮之不去。所以我跑了:

zfs list -t snapshot | grep "pool/backups@"

真的有一些:

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

但是,雖然我本來希望看到USED我剛剛刪除的大小約為 400G 的快照,但根本沒有大小值得注意的快照。

當我最終執行時,我確實花了幾個小時試圖在其他地方找到問題:

zfs destroy -nv pool/backups@

令人驚訝的輸出是:

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

所以我的問題是:為什麼不zfs list顯示快照的實際大小,我應該做些什麼不同的事情來獲得快照首先消耗的實際空間?

在我看來,這是您的zfs命令版本中的錯誤。也許檢查 FreeBSD 錯誤報告。

幾乎可以肯定這只是一個輸出/顯示錯誤(我認為如果這是一個更深層次的儲存會計問題,你會注意到非常奇怪的行為)

我係統上的zfsonlinux 0.6.5.6 在USED 列中正確顯示了該快照使用的空間量:

# 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...輸入。試試吧。grep``zfs list -t snapshot | grep "pool/backups@"``zfs list -t snapshot -r pool/backups

我有同樣的問題,我在r/zfs上得到了答案。問題是該USED列僅顯示該快照獨有的塊。如果塊在多個快照之間共享,則根本不會列出它們。這樣一來,當您刪除快照時,您將完全USED重新獲得空間,如果該快照中的塊仍被其他快照使用,則該空間將接近於零。

當您逐個刪除快照時,最終您將只得到一個引用這些塊的快照,並且突然間所有空間都將顯示在USED列中。

這並不理想,但我想他們確實有道理 - 如果在你的情況下,一堆快照之間共享 400 GB,但刪除其中任何一個快照都不會釋放任何空間,你如何顯示呢?

引用自:https://unix.stackexchange.com/questions/286452