如何限制 btrfs RAID-0 配置文件中的數據條帶數量,以便更好地利用總可用空間?
問題背景
btrfs 的一大優點是它能夠有效地使用不同大小的驅動器,但我剛剛了解到它的預設 RAID-0(條帶化)配置文件並非如此。
我想在三個驅動器上使用 RAID-0:8、4 和 4 TB,並希望總共得到 16 TB:8 TB 的前半部分可以用第一個 4 TB 驅動器進行條帶化,第二個一半可以使用第二個 4 TB 驅動器進行條帶化。
但是,根據(非常有用的)btrfs 磁碟使用量計算器,我只能得到 12 TB:每個塊將在所有三個驅動器上進行條帶化,而在我的 8 TB 驅動器上剩下 4 TB 未使用。對使用不同驅動器大小的 btrfs RAID0 導致可用空間不足的問題的回答中也提到了這一點。
插圖
這是我期望發生的:
……這就是實際發生的事情:
說明書是怎麼說的?
在仔細閱讀 mkfs.btrfs之後,我認為這是因為預設 RAID-0 配置文件將最小設備數設置為 2,但沒有上限。這意味著數據塊將在池中可以找到的盡可能多的設備上進行條帶化。這當然可以是一個合理的選擇,而且完全有道理。
在使用 btrfs 磁碟使用計算器時,我發現我可以通過將設備的最大數量設置為 2 來獲得我想要的結果。這仍然會將我的數據條帶化到兩個驅動器上以獲得額外的速度,但是將條帶化限制為兩個設備所以它可以使用更多的可用空間。對我來說,這是一個非常有益的權衡,我想我不是唯一一個這樣想的人。
問題
創建文件系統時,我沒有找到更改最大設備數的方法。
- 這甚至可能嗎?
- 如果是這樣,我該如何改變它?
- 如果我改變它,其他工具會理解佈局嗎?
您不能開箱即用,但有一些運氣和努力可能會實現。
問題是,目前(從 btrfs-progs 5.7 開始),沒有辦法在
mkfs.btrfs
. 線上空間計算器還在 Preset RAID 級別下包含對此效果的備註:請注意,這些是目前 btrfs 支持的唯一參數設置。
我嘗試
mkfs.btrfs
了兩個驅動器、btrfs device add
第三個驅動器和btrfs balance
(使用 8+4+4 GiB LV 作為“驅動器”)的各種組合。不幸的是,雖然我經常設法在 FS 上儲存超過 12 GiB 的數據,但我從未接近所需的 16 GiB。根據btrfs device usage
,我總是會在 2 和 3 個驅動器上混合一些塊。也就是說,可以
mkfs.btrfs
通過修改程式碼來使用自定義條帶計數。塊佈局btrfs_alloc_chunk()
在volume.c
btrfs-progs 中設置。該函式呼叫init_alloc_chunk_ctl()
將 RAID 預設轉換為條帶計數。min_stripes
對於 RAID0 設置為 2 並且num_stripes
(實際用於創建塊的條帶計數)設置為min(ctl->max_stripes, ctl->total_devs)
. 這裡,max_stripes
是在 中設置的與塊類型相關的限制btrfs_alloc_chunk()
。因此,您可以修改該常式以限製
num_stripes
到所需的值 (2),並使用這樣的修改mkfs.btrfs
來創建一個按照您想要的方式執行的文件系統。我沒有時間徹底檢驗該假設,因此您可能會遇到核心或 btrfs-progs 中的錯誤,但恕我直言,它有很大的工作機會。畢竟,當您使用未修改的工具和添加/刪除設備時(如我上面的測試),您所追求的磁碟佈局仍然經常出現,因此原則上應該支持它。device add
但是,如果後來/balance
再次弄亂了佈局,我不會太驚訝。