為什麼 zfs list 不輸出快照的實際大小?
因此,我在基於 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 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
我有同樣的問題,我在r/zfs上得到了答案。問題是該
USED
列僅顯示該快照獨有的塊。如果塊在多個快照之間共享,則根本不會列出它們。這樣一來,當您刪除快照時,您將完全USED
重新獲得空間,如果該快照中的塊仍被其他快照使用,則該空間將接近於零。當您逐個刪除快照時,最終您將只得到一個引用這些塊的快照,並且突然間所有空間都將顯示在
USED
列中。這並不理想,但我想他們確實有道理 - 如果在你的情況下,一堆快照之間共享 400 GB,但刪除其中任何一個快照都不會釋放任何空間,你如何顯示呢?