「READ FPDMA QUEUED」キャプチャ

「READ FPDMA QUEUED」キャプチャ

最近カーネルメッセージが表示されました:

ata3.00: exception Emask 0x0 SAct 0x1 SErr 0x0 action 0x0
ata3.00: irq_stat 0x40000008
ata3.00: failed command: READ FPDMA QUEUED
ata3.00: cmd 60/08:00:98:b2:78/00:00:13:00:00/40 tag 0 ncq 4096 in
         res 41/40:08:9a:b2:78/00:00:13:00:00/00 Emask 0x409 (media error) <F>
ata3.00: status: { DRDY ERR }
ata3.00: error: { UNC }
ata3.00: SB600 AHCI: limiting to 255 sectors per cmd
ata3.00: SB600 AHCI: limiting to 255 sectors per cmd
ata3.00: configured for UDMA/133
sd 2:0:0:0: [sda] Unhandled sense code
sd 2:0:0:0: [sda]  Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
sd 2:0:0:0: [sda]  Sense Key : Medium Error [current] [descriptor]
Descriptor sense data with sense descriptors (in hex):
        72 03 11 04 00 00 00 0c 00 0a 80 00 00 00 00 00 
        13 78 b2 9a 
sd 2:0:0:0: [sda]  Add. Sense: Unrecovered read error - auto reallocate failed
sd 2:0:0:0: [sda] CDB: Read(10): 28 00 13 78 b2 98 00 00 08 00
end_request: I/O error, dev sda, sector 326677146
ata3: EH complete

私はエラーを修正し、ディスクを回復するために使用した複雑なプロセスを詳しく説明しました。それからそれを投稿するのを気にしませんでした(今週末に投稿すると思いました)。

今やりたいことは、プロセスを自動化するプログラムを作成することです。これを行うには、「カーネルエラーをキャッチする」必要があります。

トラップとは、次のことを意味します。 1) エラーが発生したシステムコールを終了します。私は、このようなエラーが原因でハードドライブがハングし、プロセスの実行が完了するまで、他のシステムコマンド呼び出しからの要求が無視されることが多いことを確認しました。他の呼び出しからエラーを返すことがよくあります。診断手順により、誤動作が原因として識別されます。

2)呼び出しプロセスに何らかのシグナルを送信し、それが犯人であることを知らせます。

提案?

答え1

これを「原因」にしたプログラム(実際には不良ハードウェアが原因で発生し、より適切には「被害者プログラム」)が存在しなくなる可能性があります。

たとえば、書き込みを送信してから終了します。書き込み操作は、カーネルが書き込み保存を実行するまでカーネルバッファに保持されます。このときI / Oエラーが発生する可能性があります。

プログラム実行時するそれでもエラーが通知されました。たとえば、にread設定します。 (このエラーは、、、またはで発生する可能性があります。)errnoEIOwritefsyncfdatasyncclose

永遠にかかる理由は、カーネルとは何の関係もなく、完全にドライバです。ドライブが破損したセクタを理解できるかどうかを確認するために、読み取りを再試行するのに時間がかかります。これを望まない場合(たとえば、RAIDで実行していてセクタをディスクミラーに再配置する場合)、smartctlを使用してSCTエラー回復制御設定を変更できます。企業向け以外の多くのディスクはこの機能をサポートしていません。

RAID(または同様のもの)の場合を除き、自動的に変更する方法はありません。データが失われました。カーネルはこの問題を解決できません。

LinuxソフトウェアRAID(mdraid)を実行している場合、新しいカーネルを使用してもmdraidはミラーから不良セクタを読み取り、読み取りエラーのある正しいセクタをドライブに書き換えることで問題を自動的に修正します。

であれば書く変える読むを押してドライブを交換します。

(BTW:READ FPDMA QUEUEDはエラーではありません。単に(S)ATAコマンドが失敗しただけです。「ミドルエラー」はエラーです。)

関連情報