ソフトウェアRAID-1アレイを使用しているUbuntu18サーバーがあり、smartctl
は/dev/sda
が失敗していることを示しています。 Throughput_Performance
とReallocated_Sector_Ct
の両方が「FAILING_NOW」としてリストされています。
ただし、/proc/mdstat
は両方のドライブに問題がないことを示しているため、これによってRAID障害が発生することはありません。
残念ながら、smartctlは私の/dev/sdb
が完全に正常であることを示していますが、/dev/sda
のエラーにより、ファイルシステムが読み取り専用になりました。ファイルを書き込んだり削除したりしようとすると、次のようなエラーが報告されます。
rm: cannot remove '<somefile>': Read-only file system
Linuxは、書き込みによるさらなる破損を防ぐために、ドライブ障害の可能性を検出したときにこれを行うことを理解しています。
それでも、RAID-1の全体的なポイントと、それを使用した理由は、2つのドライブ間ですべてのデータをミラーリングすることにより、単一のドライブ障害によるファイルシステムの破損を回避できるためだと思いました。ドライブに障害が発生するとミラーリングが停止しますが、それでもOSは残りのドライブへの完全な読み取り/書き込みアクセスを許可します。
故障したドライブを交換しますが、その間にファイルシステムを修正し、単一のドライブの故障がRAID-1アレイを壊さないようにするにはどうすればよいですか?
ドライブがデータを破損している場合、MDレイヤーはそれを認識せず、無効なデータを返したり保存したりする可能性があります。次に、ドライブは破損したデータを他のディスクに書き戻すために使用します。ファイルシステムの構造について間違った考えを持っていると、間違った決定を下します。
MDレイヤーは、複数のドライブからデータを読み取って比較したり、ドライブの障害についてあまり賢くはありません。誤動作しているドライブを使い続けようとし続けます。これが、カーネルログで「ataexception」のバリエーションを監視する理由です。これらは、ドライブが他の何よりもずっと前に障害が発生することを示しているためです。次に、ドライブをmdadm --manage /dev/mdX --remove /dev/xxx
し、mdadm --manage /dev/mdX --add /dev/xxx
を使用して別のドライブを追加します。
それまでの間、障害のあるドライブを削除し、/dev/mdX
デバイスの完全なdd
クローンをバックアップ(dd if=/dev/mdX of=/some/file/on/some/other/device bs=4M
)として取得する(またはstdoutに書き込み、sshをパイプする)ことをお勧めします。 )そして、sysrescue CD/USBスティックから、fsck -f -C /dev/mdX
、複数回を実行します(そうする必要があることが証明されています)。
(代わりに、ミラーではなくコンポーネントドライブをバックアップする方が賢明かもしれません)