データを回復し、失敗したソフトウェアRAIDを再構築する方法-パート8


このRAIDシリーズの以前の記事では、ゼロからRAIDヒーローに移行しました。いくつかのソフトウェアRAID構成を確認し、それぞれの基本事項と、特定のシナリオに応じてどちらかに傾く理由を説明しました。

このガイドでは、ディスク障害が発生した場合にデータを失うことなくソフトウェアRAIDアレイを再構築する方法について説明します。簡潔にするために、RAID 1のセットアップのみを検討しますが、概念とコマンドはすべての場合に同様に適用されます。

先に進む前に、このシリーズのパート3「LinuxでRAID 1(ミラー)をセットアップする方法」に記載されている手順に従ってRAID1アレイをセットアップしたことを確認してください。

この場合の唯一のバリエーションは次のとおりです。

2)/ dev/sdbと/ dev/sdcの異なるディスクサイズ(それぞれ8 GB)。

さらに、SELinuxが強制モードで有効になっている場合は、RAIDデバイスをマウントするディレクトリに対応するラベルを追加する必要があります。そうしないと、マウントしようとしたときに次の警告メッセージが表示されます。

これを修正するには、次のコマンドを実行します。

# restorecon -R /mnt/raid1

RAIDモニタリングの設定

ストレージデバイスに障害が発生する理由はさまざまですが(SSDによってこれが発生する可能性は大幅に減少しました)、原因に関係なく、いつでも問題が発生する可能性があるため、障害が発生した場合は交換する準備をする必要があります。一部、データの可用性と整合性を確保するため。

最初に一言アドバイス。 RAIDのステータスを確認するために/ proc/mdstatを検査できる場合でも、mdadmをモニター+スキャンモードで実行することで構成される、より優れた時間節約の方法があります。これにより、事前定義された受信者に電子メールでアラートが送信されます。

これを設定するには、/ etc /mdadm.confに次の行を追加します。

MAILADDR [email protected]<domain or localhost>

私の場合:

MAILADDR [email protected]

mdadmをモニター+スキャンモードで実行するには、rootとして次のcrontabエントリを追加します。

@reboot /sbin/mdadm --monitor --scan --oneshot

デフォルトでは、mdadmは60秒ごとにRAIDアレイをチェックし、問題が見つかった場合はアラートを送信します。この動作を変更するには、上記のcrontabエントリに -delay オプションを秒数とともに追加します(たとえば、 -delay 1800は30分を意味します)。

最後に、muttやmailxなどのメールユーザーエージェント(MUA)がインストールされていることを確認します。それ以外の場合、アラートは受信されません。

すぐに、mdadmによって送信されたアラートがどのようになるかがわかります。

故障したRAIDストレージデバイスのシミュレーションと交換

RAIDアレイ内のストレージデバイスの1つに関する問題をシミュレートするために、次のように -manage および -set-faulty オプションを使用します。

# mdadm --manage --set-faulty /dev/md0 /dev/sdc1  

これにより、/ proc/mdstatに示されているように、/ dev/sdc1が障害としてマークされます。

さらに重要なのは、同じ警告が記載された電子メールアラートを受信したかどうかを確認しましょう。

この場合、ソフトウェアRAIDアレイからデバイスを削除する必要があります。

# mdadm /dev/md0 --remove /dev/sdc1

次に、それをマシンから物理的に取り外して、スペアパーツ(/ dev/sdd、タイプfdのパーティションが以前に作成されている場合)と交換できます。

# mdadm --manage /dev/md0 --add /dev/sdd1

幸いなことに、システムは、追加したばかりのパーツを使用してアレイの再構築を自動的に開始します。これをテストするには、/ dev/sdb1を障害としてマークし、配列から削除して、ファイルtecmint.txtが/ mnt/raid1で引き続きアクセス可能であることを確認します。

# 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 オプションを使用して)アレイを再作成しようとすると、データが失われる可能性があるため、最後の手段として残しておく必要があります。

たとえば、ddrescueを使用して/ dev/sdb1から同様のディスクパーティション(/ dev/sde1 –続行する前に/ dev/sdeにタイプfdのパーティションを作成する必要があることに注意してください)にデータを復元してみましょう。

# 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管理)で説明する概念も同様です。

この記事についてご不明な点がございましたら、下のコメントフォームを使用してお気軽にご連絡ください。返信お待ちしています!