raid5ソフトウェアアレイを縮小するのは安全ですか?

raid5ソフトウェアアレイを縮小するのは安全ですか?

ext4ファイルシステムとデフォルトのraid5配列を安全な方法で縮小できますか?

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

実際のシステムでこれを行う前に、テスト環境で試してみることにしました。私はraid +ファイルシステム(アセンブリ、mkfs、resize2fs、縮小など)のライフサイクルをシミュレートするスクリプトを書いていますが、場合によってはファイルシステムが破損しています。スクリプトは2つの異なるディストリビューション(そのうちの1つは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のカーネルイメージの1つです)。$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/loop3mdadm --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メタデータの理由ですか?

関連情報