Filesystems
獲取 ZFS 文件系統大小的更準確方法?
由於我的備份設備空間不足,我在備份 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 或更大的值(過去可能已設置和禁用,並且在此期間會為任何新寫入的數據創建副本)。- 使用屬性
usedbychildren
、usedbydataset
、usedbyrefreservation
和獲取有關如何使用空間的更多詳細資訊usedbysnapshots
。他們總結為used
,所以這不是什麼新鮮事,但可以幫助辨識舊快照等。- 要查看數據和元數據使用的空間量,就像禁用壓縮一樣,請檢查屬性
logicalused
和logicalreferenced
- 由於指定數據大小的差異(以 2 為基數與以 10 為基數),您的 6 TB 驅動器實際上只有大約 5.457 TiB(比假設的少 9%)。