我需要在 zpool 上建立 ext4 fs。我想使用所有(或幾乎所有)可用空間,如下所示。
# zpool list
NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
nat2012 1,81T 124K 1,81T - - 0% 0% 1.00x ONLINE -
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
nat2012 105K 1,76T 24K none
# zfs create -V 1.75T nat2012/backup
bad volume size '1.75T': invalid numeric suffix '.75T'
# zfs get avail nat2012
NAME PROPERTY VALUE SOURCE
nat2012 available 1,76T -
# zfs get -H avail nat2012
nat2012 available 1,76T -
我的問題是“1.75T”不被接受作為卷大小。 (但顯示為大小。)其值四捨五入為0.01T,即10G。我嘗試的下一步是獲取可用大小(以位元組、Mbytes 或 GBytes 或區塊為單位),或者幾乎任何能告訴我確切大小的東西,並且可以與“zfs create -V”一起使用。當我看到沒有“zfs get”選項時,我感到很驚訝。根據文檔,“-H”選項應該“以更容易被腳本解析的形式顯示輸出”。它省略了標題並使用製表符來分隔字段,但格式很糟糕。大小仍以 TBytes 為單位顯示,並以 +/- 10G 精度舍入。問題較小,但它是使用當前區域設定進行格式化的(在我的例子中,小數點“.”被替換為“,”)。它將是一個以千位元組為單位的整數。
請注意,在這種特殊情況下不能使用“df”命令,因為沒有安裝任何東西。我可以這樣做來顯示空閒區塊(以千位元組為單位):
# mkdir -p /nat2012
# zfs set mountpoint=/nat2012 nat2012
# df -k | grep nat2012
nat2012 1885339520 128 1885339392 1% /nat2012
但這會給出錯誤的結果。如您所見,它現在已安裝為 zfs 檔案系統,並且資料集已使用 1% 的可用空間。這並沒有告訴我可用於建立新 ext4 磁碟區的確切大小。 (-V 選項是強制性的 - 如果您不指定它,那麼 ext4.mkfs 將無法對其進行格式化。)
當然,我總是可以進行試驗,如下所示:
# zfs create -V 1760G nat2012/backup
cannot create 'nat2012/backup': out of space
# zfs create -V 1755G nat2012/backup
cannot create 'nat2012/backup': out of space
# zfs create -V 1750G nat2012/backup
cannot create 'nat2012/backup': out of space
# zfs create -V 1740G nat2012/backup
# zfs destroy nat2012/backup
# zfs create -V 1745G nat2012/backup
cannot create 'nat2012/backup': out of space
# zfs create -V 1744G nat2012/backup
cannot create 'nat2012/backup': out of space
# zfs create -V 1743G nat2012/backup
此時,我可以確定最多還有1G空間未使用。這是非常笨拙。我可以忍受這一點,但將來我必須對許多驅動器做同樣的事情。
有沒有更好的方法「使用所有可用空間」來創建固定尺寸體積?