Filesystems

獲取 ZFS 文件系統大小的更準確方法?

  • November 11, 2017

由於我的備份設備空間不足,我在備份 ZFS 文件系統時遇到了問題。

我第一次忘記啟用了壓縮。但是,對於第二次嘗試,我得到了文件系統的壓縮比,還得到了du返回的表觀大小。

它們就尺寸達成一致:

louis@watson:~$ sudo zpool list
NAME     SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
watson  3.62T  2.74T   904G    75%  1.00x  ONLINE  -

louis@watson:~$ sudo zfs list 
NAME            USED  AVAIL  REFER  MOUNTPOINT
watson         2.74T   846G    30K  none
watson/gelato  2.73T   846G  2.67T  /data/gelato

louis@watson:~$ sudo zfs get compressratio watson/gelato
NAME           PROPERTY       VALUE  SOURCE
watson/gelato  compressratio  1.64x  -

正如du重申的那樣,我預計 2.67 TB 壓縮後可節省 1.64 倍以適應 6 TB 驅動器:

louis@watson:~$ cd /data/gelato/
louis@watson:/data/gelato$ sudo du -hs --apparent-size
4.6T    .

但我在備份期間再次用完了空間,我不知道為什麼。當 6 TB 驅動器空間不足時,剩餘的複制空間可能不到 1 TB。這仍然超出了我認為可以解釋差異的任何事情。

快照:

louis@watson:~$ sudo zfs list -o space
NAME           AVAIL   USED  USEDSNAP  USEDDS  USEDREFRESERV  USEDCHILD
watson          846G  2.74T         0     30K              0      2.74T
watson/gelato   846G  2.73T     53.6G   2.67T              0          0
watson/home     846G  15.8G     57.3M   15.8G              0          0

有沒有更好的方法來獲取儲存在壓縮 ZFS 文件系統上的數據的實際大小?

我應該提到我使用 rsync -avh 來備份。在目標驅動器上,我看不到快照(…../.zfs/snapshot)。這是否意味著沒有複製快照?

需要考慮的一些事項:

  • 檢查源和目標的記錄大小(帶有zfs list -o recsize watson/gelato)。如果您有很多小數據但記錄很大,那麼空間就會被浪費。反過來,由於標題和元數據,空間也被浪費了,但通常效果並不明顯。如果您通過 SMB/CIFS 共享文件系統,您可以使用 Windows 資源管理器文件夾屬性視窗查看差異。
  • 檢查兩個驅動器上的扇區對齊(偏移)並與驅動器規格進行比較(可在驅動器型號的技術數據表中找到)。錯誤的對齊會對池的空間產生負面影響(在這個例子中他損失了大約 9%)。
  • 檢查該copies屬性是否曾經設置為 1 或更大的值(過去可能已設置和禁用,並且在此期間會為任何新寫入的數據創建副本)。
  • 使用屬性usedbychildrenusedbydatasetusedbyrefreservation和獲取有關如何使用空間的更多詳細資訊usedbysnapshots。他們總結為used,所以這不是什麼新鮮事,但可以幫助辨識舊快照等。
  • 要查看數據和元數據使用的空間量,就像禁用壓縮一樣,請檢查屬性logicalusedlogicalreferenced
  • 由於指定數據大小的差異(以 2 為基數與以 10 為基數),您的 6 TB 驅動器實際上只有大約 5.457 TiB(比假設的少 9%)。

引用自:https://serverfault.com/questions/882591