web-dev-qa-db-ja.com

dmesgのエントリが何を意味するのかを知るにはどうすればよいですか?

Dmesgのエントリを見るのは興味深いですが、それらがすべて何を意味するのかをどうやって知ることができますか?やった man dmesgですが、メッセージ自体のデコードについては何も見つかりません。

私は疑問に思います:ドリルダウンして各エントリの意味と起源を見つける方法はありますか?たとえば、それを書いたドライバー(ドライバーの場合)、およびメッセージの詳細な意味?


Dmesg出力の例:

[101466.656676] Read(10): 28 00 00 07 c4 25 00 00 01 00
[101466.656706] end_request: I/O error, dev sr0, sector 2035860
[101466.656722] Buffer I/O error on device sr0, logical block 508965
[101471.444586] sr 1:0:0:0: [sr0] Unhandled sense code
[101471.444607] sr 1:0:0:0: [sr0]  
[101471.444616] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
[101471.444627] sr 1:0:0:0: [sr0]  
[101471.444634] Sense Key : Medium Error [current] 
[101471.444649] sr 1:0:0:0: [sr0]  
[101471.444657] Add. Sense: No seek complete
[101471.444668] sr 1:0:0:0: [sr0] CDB: 
[101471.444675] Read(10): 28 00 00 07 c4 24 00 00 01 00
[101471.444705] end_request: I/O error, dev sr0, sector 2035856
[101471.444721] Buffer I/O error on device sr0, logical block 508964
3
PetaspeedBeaver

簡単な方法はありません。これらのメッセージは、通常のユーザーではなく、カーネル開発者および経験豊富なシステム管理者を対象としています。それらには一般的な構造はありません(カーネルが起動してからの秒数である括弧内の数字を除いて)。

カーネルソースコードでメッセージテキストを探すことができます。これにより、Cプログラミング言語がわからない場合でも、役立つ情報が得られます。少なくとも、メッセージがどのファイルにあるかを見つけることで、どのドライバーが責任を負っているのかがわかります。ローカルコピーを保持するか(ほとんどのディストリビューションにはカーネルのソースを含むパッケージがあります。たとえば、Debianおよび派生物の_apt-get install kernel-source-X.XX && cd /usr/src && Sudo tar xf linux-source-X.XX.tar.xz_)、または Free ElectronsのLXR または-などのオンラインブラウザを使用します。 linux.noのLXR (検索は改善されますが、多くの場合ダウンします)。

検索するときは、メッセージが文字通りソースコードに表示されないことに注意してください。多くの場合、テンプレートとパラメーターから構成されます。たとえば、2行目は _blk_update_request__block/blk-core.c_関数から来ています。

_     printk_ratelimited(KERN_ERR "end_request: %s error, dev %s, sector %llu\n",
                        error_type, req->rq_disk ?
                        req->rq_disk->disk_name : "?",
                        (unsigned long long)blk_rq_pos(req));
_

テンプレートの最初の_%s_は_error_type_の値に置き換えられ、2番目の_%s_は_req->rq_disk->disk_name_(またはこれが設定されていない場合は_?_に置き換えられます)、および_%llu_は、blk_rq_pos(req)によって返される整数に置き換えられます。メッセージが含まれているファイルを考えると、それはブロックデバイスに関係しています。ディスク名は、どのデバイスを示しています:_sr0_。 ---(標準デバイス名 を見ると、これが「最初のSCSI CD-ROM」(実際には、ほとんどのIDE/SATAおよびUSBドライブを含むSCSIのようなプロトコルを話す最初の光学ドライブ)です。

メッセージの調査を続けることはできますが、ここには明らかなパターンがあります。それらはすべてsrに関連しています。これらはすべて同じ問題が原因です。セクター2035860付近でDVDの読み取りエラーが発生します(つまり、約1 GBインチ-セクターは512バイトです)。コンピューターは突然、ディスクが存在しない(または読み取り不可能なディスク)と通知され、別のセクターに移動して、そのセクターも失敗したことを読み取ろうとしました。

これは、ほこりの斑点、またはドライブの傷や損傷の可能性があります。ドライブの損傷やケーブルの不良など、その他の問題によって読み取りエラーが発生する可能性がありますが、特定のディスクの特定の領域だけでなく、常に読み取りに影響します。

表示されるログは、デバイスの読み取りにI/Oエラーがあることを示していますsr0これはディスクデバイスであり、おそらくCDまたはDVDです。

系統的なアプローチを使用して、他のディスクを使用しているときに発生するかどうか、およびディスクが別のマシンで動作するかどうかを確認することにより、原因を明確にします。

CDの傷から、マザーボードの欠陥まで、さまざまな原因が考えられます。

dmesgエントリが正確に何を参照しているかを知る簡単な方法はありませんが、実際のエラーメッセージ(および周囲の行)を読むと、問題が何であるかを非常によく知ることができます。

1
Julie Pelletier