web-dev-qa-db-ja.com

LinuxソフトウェアRAID6:3台のドライブをオフライン-強制的にオンラインにする方法は?

これは 台のドライブがRaid6 mdadmから落ちました-再構築しますか? に似ていますが、ケーブルの障害が原因ではない点が異なります。代わりに、別のドライブの再構築中に3番目のドライブがオフラインになりました。

ドライブが次の原因で失敗しました:

kernel: end_request: I/O error, dev sdc, sector 293732432
kernel: md/raid:md0: read error not correctable (sector 293734224 on sdc).

これらのセクターとその周辺のセクターの両方を再起動した後は問題ありません。これにより、エラーが断続的に発生するため、デバイスがセクターをエラー修正して再マップするのに時間がかかりすぎたと思われます。

RAIDに障害が発生した後、RAIDにデータが書き込まれなかったと思います。したがって、最後に障害が発生したデバイスをオンラインでキックできれば、RAIDは正常であり、xfs_filesystemは問題なく、最近のファイルがいくつか欠落している可能性があります。

RAID内のディスクのバックアップを取るのに24時間かかるので、このソリューションが最初に機能することをお勧めします。

したがって、テストシナリオを設定しました。

export PRE=3

parallel dd if=/dev/zero  of=/tmp/raid${PRE}{} bs=1k count=1000k ::: 1  2  3  4  5
parallel mknod /dev/loop${PRE}{} b 7 ${PRE}{} \; losetup /dev/loop${PRE}{} /tmp/raid${PRE}{} ::: 1  2  3  4  5
mdadm --create /dev/md$PRE -c 4096 --level=6 --raid-devices=5  /dev/loop${PRE}[12345]
cat /proc/mdstat
mkfs.xfs -f /dev/md$PRE
mkdir -p /mnt/disk2
umount -l /mnt/disk2
mount /dev/md$PRE /mnt/disk2
seq 1000 | parallel -j1 mkdir -p /mnt/disk2/{}\;cp /bin/* /mnt/disk2/{}\;sleep 0.5 &
mdadm --fail /dev/md$PRE /dev/loop${PRE}3 /dev/loop${PRE}4
cat /proc/mdstat

# Assume reboot so no process is using the dir
kill %1; sync &
kill %1; sync &

# Force fail one too many
mdadm --fail /dev/md$PRE /dev/loop${PRE}1
parallel --tag -k mdadm -E ::: /dev/loop${PRE}? | grep Upda
# loop 2,5 are newest. loop1 almost newest => force add loop1

次のステップはloop1を追加することです-そしてこれは私が立ち往生しているところです。

その後、xfs-consistencyチェックを実行します。

それが機能する場合は、ソリューションが実際のデバイス(4つのUSBスティックなど)でも機能することを確認してください。

1
Ole Tange

魔法はmdadm -A --forceのようで、正常であることがわかっているデバイスと最後に障害が発生したデバイスのみを提供します。次のようなテストシナリオの場合:

mdadm -A --force /dev/md$PRE /dev/loop${PRE}[125]

これにより、RAIDデバイスが起動します。 xfs_checkは、ログを再生するためにディスクをマウントするように指示します。

mount /dev/md$PRE /mnt/disk2

この時点で、do notディレクトリを使用します。テストシナリオでは、少なくとも1回はxfsに文句を言ってクラッシュしました。代わりに:

umount /mnt/disk2

その後:

xfs_check /dev/md$PRE

これは、50 TBファイルシステムで20分かかりました。奇妙なことに、ほとんどの時間はCPU時間であり、ディスクI/Oを待機していませんでした。100GBのRAMのオーダーで使用されました。

これで、ファイルシステムが再び使用可能になります。

mount /dev/md$PRE /mnt/disk2

最後のsyncまではすべてOKです。最後の同期の後に書かれたものだけが不安定です。

スペアをいくつか追加して、再構築します。

明日、既存のディスクのコピーが終了したら、上記をテストします。それがうまくいくなら、上記は答えです。それ以外の場合は、元のセットの新しいコピーが開始され、新しいアイデアを歓迎します(ただし、テストシナリオでテストしてください)。

==

スペアが追加され、再構築が開始されました。 1000番目ごとのファイルがファイルシステムのディレクトリにコピーされましたが、これによってログに問題が発生することはありませんでした。したがって、ファイルシステムは問題ないようです。ユーザーがいくつかのファイルを見逃したかどうかはまだわかりません。

==

これまでのところ、不足しているファイルを報告しているユーザーはいないため、機能しているようです。

1
Ole Tange