ソフトウェアRAIDのデータを復旧し、再構築する方法 - パート8
このRAIDシリーズの前回の記事では、ゼロからRAIDヒーローへと進化しました。私たちはいくつかのソフトウェアRAID構成をレビューし、それぞれの基本的な要素と、特定のシナリオに応じてどちらを選ぶべきかの理由を説明しました。
このガイドでは、ディスクの故障が発生した場合にデータを失うことなくソフトウェアRAIDアレイを再構築する方法について説明します。簡潔にするために、RAID 1のセットアップのみを考慮しますが、概念とコマンドはすべてのケースに適用されます。
RAIDテストシナリオ
さらに進む前に、シリーズのパート3で提供された手順に従ってRAID 1アレイを設定していることを確認してください:LinuxでRAID 1(ミラー)を設定する方法。
私たちの現在のケースでの唯一の変動は次のとおりです:
1) この記事で使用されているバージョン(v6.5)とは異なるCentOSのバージョン(v7)、
2) /dev/sdbと/dev/sdcの異なるディスクサイズ(それぞれ8 GB)。
さらに、SELinuxが強制モードで有効になっている場合、RAIDデバイスをマウントするディレクトリに対応するラベルを追加する必要があります。さもなければ、それをマウントしようとすると次の警告メッセージが表示されます:
これを修正するには、次のコマンドを実行してください:
restorecon -R /mnt/raid1
RAIDモニタリングの設定
ストレージデバイスが故障する理由はさまざまですが(SSDはこの問題が発生する可能性を大幅に減少させていますが)、原因に関係なく、いつでも問題が発生する可能性があることは確かです。故障した部分を交換する準備をし、データの可用性と整合性を確保しておく必要があります。
まず最初にアドバイスがあります。RAIDの状態をチェックするために/proc/mdstatを検査できる場合でも、事前に定義された受信者にメールでアラートを送信するmdadmのモニター+スキャンモードを実行するという、より良く時間を節約できる方法があります。
/etc/mdadm.confに次の行を追加してこれを設定します:
MAILADDR user@<domain or localhost>
私の場合:
MAILADDR gacanepa@localhost
mdadmをモニター + スキャンモードで実行するには、次のcrontabエントリをrootとして追加します:
@reboot /sbin/mdadm --monitor --scan --oneshot
デフォルトでは、mdadmはRAIDアレイを60秒ごとにチェックし、問題が見つかると警告を送信します。この動作は、上記のcrontabエントリに--delayオプションを追加して、秒数を指定することで変更できます(例えば、--delay 1800は30分を意味します)。
最後に、muttやmailxなどのメールユーザーエージェント(MUA)がインストールされていることを確認してください。さもなければ、通知を受け取ることはできません。
すぐに、mdadm が送信するアラートがどのように見えるかを確認しましょう。
障害が発生したRAIDストレージデバイスのシミュレーションと交換
RAIDアレイのストレージデバイスの1つで問題をシミュレートするために、次のように--manageと--set-faultyオプションを使用します:
mdadm --manage --set-faulty /dev/md0 /dev/sdc1
これにより、/dev/sdc1 が故障としてマークされ、/proc/mdstat において確認できます。
もっと重要なのは、同じ警告のメールアラートが届いているかどうかを確認しましょう:
この場合、ソフトウェアRAIDアレイからデバイスを削除する必要があります:
mdadm /dev/md0 --remove /dev/sdc1
その後、機械から物理的に取り外し、予備パーツ(/dev/sdd、ここでタイプfdのパーティションが事前に作成されている)と置き換えることができます。
mdadm --manage /dev/md0 --add /dev/sdd1
私たちにとって幸運なことに、システムは自動的に追加したパーツで配列を再構築し始めます。これをテストするために、/dev/sdb1 を障害としてマークし、配列から削除し、/mnt/raid1 でファイルtecmint.txt が依然としてアクセス可能であることを確認します。:
mdadm --detail /dev/md0
mount | grep raid1
ls -l /mnt/raid1 | grep tecmint
cat /mnt/raid1/tecmint.txt
上の画像は、/dev/sdc1 の代わりに /dev/sdd1 を配列に追加した後、データの再構築が我々の介入なしにシステムによって自動的に行われたことを明確に示しています。
厳密には必要ではありませんが、故障したデバイスを良いドライブに迅速に交換するために、予備のデバイスを用意しておくことは素晴らしいアイデアです。そのために、/dev/sdb1と/dev/sdc1を再度追加しましょう:
mdadm --manage /dev/md0 --add /dev/sdb1
mdadm --manage /dev/md0 --add /dev/sdc1
リダンダンシーの喪失からの回復
前述のように、mdadmは、1つのディスクが故障した場合に自動的にデータを再構築します。しかし、配列内の2つのディスクが故障した場合はどうなりますか?/dev/sdb1と/dev/sdd1を故障としてマークすることで、そのシナリオをシミュレートしてみましょう。
umount /mnt/raid1
mdadm --manage --set-faulty /dev/md0 /dev/sdb1
mdadm --stop /dev/md0
mdadm --manage --set-faulty /dev/md0 /dev/sdd1
この時点で生成された方法で配列を再作成しようとする試み(または --assume-cleanオプションを使用すること)は、データの損失を引き起こす可能性があるため、最後の手段として残しておくべきです。
例えば、/dev/sdb1 からデータを回復して、類似のディスクパーティション (/dev/sde1 - 続行する前に、/dev/sde にタイプ fd のパーティションを作成する必要があります) に ddrescue を使用して:
ddrescue -r 2 /dev/sdb1 /dev/sde1
これまでのところ、RAIDアレイの一部だったパーティションである/dev/sdbまたは/dev/sddには触れていないことに注意してください。
では、/dev/sde1 と /dev/sdf1 を使用して配列を再構築しましょう:
mdadm --create /dev/md0 --level=mirror --raid-devices=2 /dev/sd[e-f]1
実際の状況では、通常、元の配列と同じデバイス名を使用することに注意してください。つまり、障害の発生したディスクが新しいものに置き換えられた後は、/dev/sdb1および/dev/sdc1となります。
この記事では、元の故障したドライブとの混乱を避けるために、新しいディスクを使用して配列を再作成するために、追加のデバイスを使用することにしました。
配列の作成を続けるかどうか尋ねられた場合は、Y を入力して Enter キーを押してください。配列が開始され、その進行状況を次の方法で確認できるはずです:
watch -n 1 cat /proc/mdstat
プロセスが完了すると、RAIDの内容にアクセスできるようになります:
要約
この記事では、RAIDの障害や冗長性の損失から回復する方法をレビューしました。しかし、この技術はストレージソリューションであり、バックアップの代替にはなりません。
このガイドで説明されている原則は、すべてのRAIDセットアップに適用されます。また、このシリーズの次および最後のガイド(RAID管理)で扱う概念にも当てはまります。
この記事についてご質問がある場合は、下のコメントフォームを使用してお気軽にご連絡ください。お知らせをお待ちしております!








