我有 4x2TB 磁碟,我想創建一個效能良好的 RAID5 陣列(伺服器是具有 8GB RAM 的 HP N40L 微型伺服器,從 64GB SSHD 啟動)。作業系統是 Centos 6.3,x86_64。
我使用以下命令創建了 raid 陣列:
mdadm --create --verbose /dev/md0 --level=5 --raid-devices=4 /dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1
當我這樣做時:
mdadm --examine /dev/sda1
……我被告知我的「塊大小」是 512K(顯然這是 mdadm 的新預設值)。
現在我想用 XFS 格式化陣列。有人告訴我(在http://www.mythtv.org/wiki/Optimizing_Performance#Optimizing_XFS_on_RAID_Arrays)「sunit」等於我的區塊大小,表示為 512 位元組區塊的數量 - 因此,在我的例子中,512KB = 1024 512 位元組區塊。同樣,「swidth」是我的陣列中有效磁碟的數量乘以sunit。就我而言,我在 raid 5 中有 4 個磁碟,因此有 3 個有效磁碟,並且 3x1024=3072。因此,我使用以下命令格式化新數組:
mkfs.xfs -b size=4096 -d sunit=1024,swidth=3072 /dev/md0
我現在有兩個問題。上面的命令給了我這個錯誤:
mkfs.xfs -b size=4096 -d sunit=1024,swidth=3072 /dev/md0
log stripe unit (524288 bytes) is too large (maximum is 256KiB)
log stripe unit adjusted to 32KiB [...]
……我想知道這是否意味著我做錯了什麼,或者我是否會以某種方式得到一個次優的文件系統,或者我是否可以出於某種原因忽略該錯誤。
第二個問題是我是否正確計算了 XFS 參數,或者我是否完全錯誤地搜尋了樹(如果有幫助,該陣列將在很大程度上儲存大型音樂和視訊檔案)。例如,我是否理解“塊大小”和“條帶大小”?我的 mkfs 指令中的區塊大小 4096 是最佳的嗎?等等。
我將不勝感激任何對此的建議。
答案1
XFS 不支援大於 256k 的條帶單元,因此只需使用 256k 條帶重新製作 RAID 陣列即可。這是--chunk
的參數mdadm
。
4k 塊大小對於您的預期用途來說可能太小。如果您要儲存大量小文件,那麼 4k 可能會更理想。 XFS 最多可容納 64k 塊。讀取和寫入連續區塊的速度更快,但由於較大區塊大小的開銷,您會損失一些空間。
您只能按區塊分配,因此請根據您期望處理的檔案的大小選擇區塊大小。如果區塊大小為 4k,則大小為 1kb 的檔案佔用 4kb 空間(1 個區塊),大小為 65kb 的檔案佔用 68kb 空間(17 個區塊)。如果區塊大小為 64kb,則大小為 1kb 的檔案佔用 64kb(1 個區塊),大小為 65kb 的檔案佔用 128kb(2 個區塊)。
如果您處理的是小文件,那麼您將浪費大塊大小的大量空間。如果您正在處理數百 GB 的視訊文件,那麼您可能不會關心這裡或那裡的 64kb,並且較大區塊大小的效能優勢會產生更大的差異。
另一件需要理解的事情是分配組。每個AG都有一個單獨的IO線程。 XFS 分配器嘗試將每個目錄放入不同的 AG 中。基本理論是每個物理設備一個 AG。
閱讀 XFS 文件並了解文件系統是如何建構的:
做出一些有根據的猜測並確定哪些因素對您最重要。取得一些代表您的生產資料(或實際生產資料的副本)的文件,並針對對您重要的內容執行一些基準測試。選擇一個指標,例如您的視訊或音訊軟體根據不同的區塊大小讀取和寫入檔案的速度有多快?多個音訊/視訊工程師同時存取檔案對不同 AG 的吞吐量有何影響?
XFS 專為數百 TB 的大型檔案系統而設計,運行在比房子還值錢的 SAN 上,儲存專業電影工作室所需的大量未壓縮媒體檔案。如果您使用它在便宜的 Linux 盒子上儲存盜版音樂和電視節目,那麼只需使用 ext4,如果您遇到問題,排除故障和修復會容易得多。