
2つの状況があります。
- 読み取りコマンドはカーネルレベルでタイムアウトします(デフォルトでは30秒)。
- ドライブがそのセクタを読み取れないことを報告します。今後カーネルは忍耐を失います(私が興味を持っている場合です)。
カーネルタイムアウト
ドライブへのアクセスは通常 Linux SCSI レイヤを介して行われるため、タイムアウトの状況は完全にそのレイヤで処理されると仮定します。 ~によるとこの文書、ドライブ、バス、ホストなどをリセットした後、コマンドを数回試みます。これらのいずれも機能しない場合、SCSI層はデバイスをオフラインにします。この時点で、私はmdレイヤーがドライブが消えたことを「発見」し、欠落(失敗)としてマークすると思います。そうですか?
ドライブがエラーを報告しました
一部のドライブは、特定のタイムアウトに達した後に読み取りエラーを報告して、内部回復試行を中断するように構成できます。これは…欧州研究協議会(またはTLER、CCTL)。ディスクタイムアウトは通常トリガーされるように設定されます。今後オペレーティングシステムがタイムアウト(またはハードウェアRAIDコントローラ)され、単に「待ってから中断」するのではなく、実際に何が起こっているのかがわかります。
私の質問は次のとおりですLinux(およびmd)はドライブで報告された読み取りエラーをどのように処理しますか?
再試行しますか、スマートな操作を実行しますか、または上記の「カーネルタイムアウト」に記載されているすべての試みを経ずにドライブをオフラインにしますか? MDはこのようなことがいつ起こるのか知っていますか?
何人かの人々提案ERCはドライブに回復を試みるのに十分な時間を提供しないため、Linuxでは危険です。彼らはまた、読み取りエラーが発生した場合、RAID冗長性のために失われた読み取り不能セクタデータを計算するため、ZFS-raidが良いと言います。書くドライブに戻ります。その後、後者は問題のあるセクターを読み取るのをやめ、自動的にそのセクターを不良(廃止)とマークし、正常で正常なセクターに再マップする必要があります。
MDにもこのような機能はありますか?
答え1
md
(4)これに関する詳細はマニュアルページのセクションに記載されていますRECOVERY
。
[...]読み取りエラーのため、mdは不良ブロックを上書きして回復を試みます。つまり、他の場所で正しいデータを見つけて、失敗したブロックに書き込んでから再読み込みしようとします。書き込みまたは再読み込みが失敗すると、md は書き込みエラーと同じ方法でエラーを処理し、デバイス全体で失敗します。
タイムアウトの場合、ドライブがスタンバイモードで追い出されるという報告がありましたが、実際にそのようなことが発生したことはありません。私は7つのHDDを持っていますが、通常停止します(メインシステムはSSDで実行され、長期間HDDアクセスなしで実行できるため)、うまく動作します(すべてのドライブを起動するのではなくmd
ドライブを1つずつ起動することを除いて)。一度)。
私はそれが他のレイヤーが報告するものに依存していると思いますmd
。
答え2
TLERが危険かどうかはそうではないと思います。実際、この機能が必要だったという事実はまだ信じていません。どのドライブも再試行するのにそれほど時間がかかりません。遅い5400rpmドライブが数百回再試行するのに7秒で十分です。何度も(何百回も苦労して)試してもできないと決してできません。