ext4ファイルシステムとデフォルトのraid5配列を安全な方法で縮小できますか?
ext4ファイルシステムを含む15TB / 6ドライブRAIDアレイを縮小したいです。
実際のシステムでこれを行う前に、テスト環境で試してみることにしました。私はraid +ファイルシステム(アセンブリ、mkfs、resize2fs、縮小など)のライフサイクルをシミュレートするスクリプトを書いていますが、場合によってはファイルシステムが破損しています。スクリプトは2つの異なるディストリビューション(そのうちの1つはCentos-8)で実行されます。
これらの失敗を理解しようとしていますが、私が欠けているものがなければ、mdadmはraid縮小プロセス(mdadm --grow)中にext4ファイルシステムについて何も知らず、ツールが正しく機能するのを助けることはできません。
私のシナリオでプロセスをシミュレートするスクリプトは次のとおりです。
- 任意の数字を選択してください機器の数量選択(5〜10) - テストアレイのデバイス数を決定します。
- 任意の数字を選択してくださいデバイスサイズ(300〜350) - 単一デバイスのサイズ(MiB)
- 作成と組み立て/dev/md0- RAID 5アレイ(私の場合はメタデータ0.90) - アレイのサイズはarray_size=($num_devices-1)*$device_size
- ext4ファイルシステムの作成/dev/md0そしてそれをインストール/mnt
- 参照ファイルをコピーします(私の場合は/ bootのカーネルイメージの1つです)。$num_devices到着/mnt(ファイルシステムの整合性を確認できるデータがあります。) - ファイルシステムの空き容量は約80%です。
ファイルシステムがアンマウントされ、fscked(
e2fsck -f
)され、縮小(resize2fs -M
最小サイズまたはreisze2fs /dev/md0 {calculated_size}
)され、再びfsckedされます。スクリプトは、mdadm再構築プロセスが完了するのを待ちます(/ proc / mdstatチェック)。
- 新しい配列サイズを計算します。new_array_size=($num_devices-2)*$device_size
- ハードドライブのエラーをシミュレートした
mdadm --manage /dev/md0 --fail /dev/loop3
後mdadm --manage /dev/md0 --remove /dev/loop3
- 形状変更プロセスが完了するまで待ちます。
再構成プロセスが完了すると、/ dev / loop3は削除済みとしてマークされ、他のループデバイス(/ dev / loop2など)はスペアとして表示されます。
- プロシージャはスペアを決定し、それをアレイに追加します(
mdadm --manage /dev/md0 --remove /dev/loop2
後ろにmdadm --manage /dev/md0 --add /dev/loop2
- スクリプトは、RAIDの再構築が完了するのを待ちます(/ proc / mdstatビュー)。
この時点で損傷が発生します。
- ファイルシステムは/ mntに再マウントされます。
- 参照ファイルと縮小ファイルシステムのコピー間のmd5チェックサム比較は、1〜2個のファイルに対して成功または失敗します。
- ファイルシステムがマウント解除され、fscked(
e2fsck -f
)され、最大サイズに増加(resize2fs)され、再びfsckedされます。 - 腐敗は依然として存在する
私が何か間違っているのでしょうか、それともraid5の縮小プロセスが実際にはサポートされていませんか?それとも0.90メタデータの理由ですか?