Kernel

我怎樣才能找出 dmesg 中的條目是什麼意思?

  • December 14, 2016

查看 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

沒有簡單的方法。這些消息是針對核心開發人員和經驗豐富的系統管理員的,而不是針對普通使用者的。它們沒有通用結構(除了括號中的數字,即自核心啟動以來的秒數)。

您可以在核心原始碼中查找消息文本。即使您不了解 C 程式語言,這也可以提供有用的資訊——至少找到消息在哪個文件中可以告訴您哪個驅動程序負責。要麼保留一個本地副本(大多數發行版都有一個包含核心源的軟體包,例如在 Debian 和衍生產品上),或者使用線上瀏覽器,例如Free Electrons的 LXR或linux.no 的 LXR(更好的搜尋,但經常被關閉)。apt-get install kernel-source-*X.XX* && cd /usr/src && sudo tar xf linux-source-*X.XX*.tar.xz

搜尋時,請記住消息不會按字面意思出現在原始碼中。它們通常由模板和參數組成。例如,第二行來自blk_update_request函式 inblock/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,第二個%s被替換為req->rq_disk->disk_name?如果未設置,則為 a),並且%llu被替換為返回的整數blk_rq_pos(req)。給定消息所在的文件,它涉及塊設備。磁碟名稱告訴您哪個設備:sr0. 如果您查看標准設備名稱,那就是“第一個 SCSI CD-ROM”(實際上,第一個使用類似 SCSI 協議的光碟機,包括大多數 IDE/SATA 和 USB 驅動器)。

您可以繼續探索這些消息,但這裡有一個明顯的模式:它們都與sr. 所有這些都是由同一個問題引起的:讀取 DVD 時出現錯誤,在扇區 2035860 附近(即大約 1 GB — 一個扇區是 512 字節)。電腦突然被告知不存在磁碟(或無法讀取的磁碟),並嘗試移動到另一個扇區並讀取該扇區也失敗了。

這可能是一粒灰塵、划痕或其他損壞的驅動器。其他問題可能會導致讀取錯誤,例如驅動器損壞或電纜損壞,但這些問題會一直影響讀取,而不僅僅是特定磁碟的特定區域。

引用自:https://unix.stackexchange.com/questions/330200