是否可以安全地縮小raid5軟體陣列?

是否可以安全地縮小raid5軟體陣列?

是否可以以安全的方式縮小 ext4 檔案系統和底層 raid5 陣列?

我想縮小包含 ext4 檔案系統的 15 TB / 6 磁碟機 raid 陣列。

在實際系統上執行此操作之前,我決定在測試環境中嘗試。我編寫了一個模擬 raid+檔案系統生命週期的腳本(assemble、mkfs、resize2fs、shrink 等),但在某些情況下它會損壞檔案系統。該腳本在兩個不同的發行版上運行(其中之一是 Centos-8)。

我試圖理解這些失敗,除非我遺漏了一些東西,否則 mdadm 在 raid 收縮過程(mdadm --grow)期間對 ext4 檔案系統一無所知,並且似乎不可能幫助該工具正常運行。

在我的場景中,一個模擬流程的腳本:

  1. 選擇一個隨機數設備數量選擇(5 到 10 之間) - 這決定了我們測試陣列中的設備數量
  2. 選擇隨機數設備大小(300 到 350 之間)- 單一裝置的大小(以 MiB 為單位)
  3. 創建和組裝/dev/md0- RAID 5 陣列(在我的例子中是 0.90 元資料) - 陣列的大小是array_size=($num_devices-1)*$device_size
  4. 建立 ext4 檔案系統/dev/md0並將其安裝到/mnt
  5. 複製參考檔案(在我的例子中,它是 /boot 中的核心映像之一)$num_devices次到/mnt(有一些資料來驗證檔案系統的完整性) - 檔案系統有大約 80% 的可用空間
  6. 檔案系統被卸載,fscked ( e2fsck -f) 然後縮小(resize2fs -M最小大小或reisze2fs /dev/md0 {calculated_size}),然後再次 fscked

  7. 該腳本等待 mdadm 重建過程完成(透過查看 /proc/mdstat)

  8. 計算新數組大小:new_array_size=($num_devices-2)*$device_size
  9. 模擬硬碟故障,mdadm --manage /dev/md0 --fail /dev/loop3然後是 mdadm --manage /dev/md0 --remove /dev/loop3
  10. 等待重塑過程完成

一旦重塑過程完成,/dev/loop3 被標記為已刪除,另一個循環裝置(例如/dev/loop2)被標記為備用。

  1. 該過程確定備用,並將其重新添加到數組中(mdadm --manage /dev/md0 --remove /dev/loop2後跟mdadm --manage /dev/md0 --add /dev/loop2
  2. 腳本等待 raid 重建完成(觀看 /proc/mdstat)

此時腐敗發生:

  1. 檔案系統再次掛載在 /mnt
  2. 參考檔案與收縮檔案系統上的副本之間的 md5 校驗和比較對於 1-2 個檔案要么成功,要么失敗
  3. 檔案系統被卸載、fscked ( e2fsck -f)、成長到最大值 (resize2fs) 並再次 fscked
  4. 腐敗現象依然存在

我做錯了什麼或是raid5收縮過程真的不受支持嗎?或者是 0.90 元資料的原因?

相關內容