web-dev-qa-db-ja.com

RAID-1の読み取り専用ファイルシステムを修正しますか?

ソフトウェアRAID-1アレイを使用しているUbuntu18サーバーがあり、smartctl/dev/sdaが失敗していることを示しています。 Throughput_PerformanceReallocated_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アレイを壊さないようにするにはどうすればよいですか?

1
Cerin

ドライブがデータを破損している場合、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複数回を実行します(そうする必要があることが証明されています)。

(代わりに、ミラーではなくコンポーネントドライブをバックアップする方が賢明かもしれません)

2
Halfgaar