在Linux系统中,磁盘I/O错误通常会在dmesg(driver message或者driver message buffer)日志中体现。当系统检测到磁盘I/O错误时,会在内核环缓冲区中记录相关信息,这些信息可以通过dmesg命令查看。
磁盘I/O错误在dmesg中的输出可能包括以下几种形式:
blk_update_request: I/O error:这种错误信息表明在尝试更新磁盘块时发生了I/O错误。例如:
[10268473.205487] blk_update_request: I/O error, dev vdn, sector 2403211760
[10268473.206534] blk_update_request: I/O error, dev vdn, sector 2403211768
[10268473.207573] blk_update_request: I/O error, dev vdn, sector 2403211776
[10268473.208633] blk_update_request: I/O error, dev vdn, sector 2403211784
[10268473.209696] blk_update_request: I/O error, dev vdn, sector 2403211792
[10268473.210754] blk_update_request: I/O error, dev vdn, sector 2403211800
这里的vdn是设备的虚拟设备名称,sector是指发生错误的扇区号。
ata1: end_device - 0 : 0 : dev error handlers:这种错误信息表明在处理设备错误时发生了I/O错误。例如:
[Firmware Warn]: GHES: Poll interval is 0 for generic hardware error source: 1 , disabled.
sas: ata1: end_device - 0 : 0 : dev error handlers
sas: sas_eh_handle_sas_errors: task 0xffff880377ee3840 is aborted
sas: sas_eh_handle_sas_errors: task 0xffff880377ee35c0 is aborted
这种错误通常与硬件相关,可能是由于固件问题或硬件故障引起的。
JBD2: I/O error detected:这种错误信息表明在更新文件系统的 journal superblock 时发生了I/O错误。例如:
JBD2: I/O error detected when updating journal superblock for sda1
EXT4 -fs error (device sda1) in add_dirent_to_buf: Journal has aborted
EXT4 -fs error (device sda1) in ext4_rename: Journal has aborted
这种错误通常与文件系统相关,可能是由于文件系统损坏或磁盘故障引起的。
要查看磁盘I/O错误,可以使用以下命令:
dmesg输出中包含“error”的行,帮助你快速定位I/O错误信息。badblocks命令扫描硬盘,检查是否存在坏道。fsck命令进行修复。通过以上方法,你可以有效地查看和分析Linux系统中的磁盘I/O错误,并采取相应的措施进行故障排查和解决。