web-dev-qa-db-ja.com

RAID1アレイをチェック/修復する方法は?

私は現在、HDDとSSDの上に構築されたLinux上のソフトウェアRAID-1アレイを使用しています。 SSDが故障していると強く感じています。

SSDの動作がどれほど悪いかを確認したいと思います。 echo check > /sys/block/md1/md/sync_actionを使用して配列のチェックを実行し、終了したら、/sys/block/md1/md/mismatch_cntの内容を確認しました。 3回続けて実行したところ、256、128、384の3つの異なる結果が得られました。私が困惑しているのは、2回目の実行で最初の実行よりも低い結果が得られたことです。不一致は修正されましたか?

検出された不一致についてより詳細に知る方法はありますか?不一致のブロックが変化するかどうか、または常に同じであるかどうかを確認するのは興味深いかもしれません。また、不一致のブロックの内容を調べて、どれが正しいかを確認できるかどうかを確認したいと思います。 (たとえば、SSDが一部のブロックをゼロにした場合、再読み取りできませんでした。)

さらに、MD配列をrepairするオプションがあるようです。しかし、私は少し疑わしいです。カーネルは、不一致のブロックのどれが正しいかをどのように推測できますか?

1
user2233709

ええと…Linux4.9.88のprocess_checksファイルにあるdrivers/md/raid1.c関数のソースコードを正しく読んだら、次のようになります。

  1. 不一致が見つかった場所について、チェックまたは修復操作を詳細にする方法はありません。
  2. チェックまたは修復操作中に読み取りエラーが発生した場合、失敗したブロックが書き換えられます。
  3. 修復操作中に不一致が発生した場合は、ブロックを「プライマリ」(最初の障害のない)ブロックから他のブロックにコピーすることで修正されます。

したがって、どの不一致ブロックが正しいかは推測できません。最初のものが正しいと見なされます。 (読んでいると、3つのコンポーネントがあり、2番目と3番目が同じ内容であっても。)

1
user2233709