RAID5 ソフトウェア アレイを安全に縮小することは可能ですか?

RAID5 ソフトウェア アレイを安全に縮小することは可能ですか?

ext4 ファイルシステムとその基礎となる RAID5 アレイを安全な方法で縮小することは可能ですか?

ext4 ファイルシステムを含む 15 TB / 6 ドライブ RAID アレイを縮小したいと思います。

実稼働システムでそれを実行する前に、テスト環境で試してみることにしました。RAID+ファイルシステムのライフサイクルをシミュレートするスクリプト (assemble、mkfs、resize2fs、shrink など) を作成しましたが、場合によってはファイルシステムが破損します。スクリプトは 2 つの異なるディストリビューションで実行されました (そのうちの 1 つは Centos-8)。

私は失敗の原因を理解しようとしましたが、何かを見落としていない限り、RAID 縮小プロセス (mdadm --grow) 中の mdadm は ext4 ファイルシステムについて何も認識せず、このツールが適切に動作するようにすることはできないようです。

私のシナリオでは、プロセスをシミュレートするスクリプトは次のようになります。

  1. ランダムな数字を選択するデバイス数(5から10の間)が選択され、テストアレイ内のデバイスの数を決定します
  2. ランダムな数字を選択するデバイスサイズ(300~350) - 単一デバイスのサイズ (MiB 単位)
  3. 作成して組み立てる/dev/md0- RAID 5アレイ(私の場合は0.90メタデータでした) - アレイのサイズは配列サイズ=($num_devices-1)*$device_size
  4. ext4ファイルシステムを作成します/dev/md0そしてそれをマウントする/分
  5. 参照ファイルをコピーします(私の場合は、/boot のカーネル イメージの 1 つでした)$num_devices倍に/分(ファイルシステムの整合性を検証するためのデータを取得するため) - ファイルシステムには利用可能な空き領域が約80%あります
  6. ファイルシステムはアンマウントされ、fscked ( e2fsck -f) され、その後縮小され (resize2fs -M最小サイズまたはreisze2fs /dev/md0 {calculated_size})、再度fscked される。

  7. スクリプトは、mdadm 再構築プロセスが完了するまで待機します (/proc/mdstat を参照)

  8. 新しい配列のサイズが計算されます:新しい配列サイズ=($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. ファイルシステムはアンマウントされ、fsckされ(e2fsck -f)、最大サイズまで拡大され(resize2fs)、再度fsckされる
  4. 腐敗は依然として存在する

私が何か間違っているのでしょうか、それとも RAID5 の縮小プロセスは本当にサポートされていないのでしょうか? あるいは 0.90 のメタデータが原因でしょうか?

関連情報