我在装有 xfs 的 Linux 机器上遇到了一个奇怪的错误,我不知道如何调试和修复它。
以下是 dmesg 的摘录:
Info fld=0x17
end_request: I/O error, dev sde, sector 34412208504
sd 7:0:0:0: SCSI error: return code = 0x08000002
sde: Current: sense key: Aborted Command
<<vendor>> ASC=0xc0 ASCQ=0x23ASC=0xc0 ASCQ=0x23
Info fld=0x17
end_request: I/O error, dev sde, sector 35840057200
sd 7:0:0:0: SCSI error: return code = 0x08000002
sde: Current: sense key: Aborted Command
<<vendor>> ASC=0xc0 ASCQ=0x23ASC=0xc0 ASCQ=0x23
Info fld=0x17
end_request: I/O error, dev sde, sector 35799212408
sd 7:0:0:0: SCSI error: return code = 0x08000002
sde: Current: sense key: Aborted Command
<<vendor>> ASC=0xc0 ASCQ=0x23ASC=0xc0 ASCQ=0x23
Info fld=0x17
end_request: I/O error, dev sde, sector 39444095352
sd 7:0:0:1: SCSI error: return code = 0x08000002
sdf: Current: sense key: Aborted Command
<<vendor>> ASC=0xc0 ASCQ=0x23ASC=0xc0 ASCQ=0x23
Info fld=0x17
end_request: I/O error, dev sdf, sector 32974487928
device-mapper: multipath: Failing path 8:80.
sd 7:0:0:1: SCSI error: return code = 0x08000002
sdf: Current: sense key: Aborted Command
<<vendor>> ASC=0xc0 ASCQ=0x23ASC=0xc0 ASCQ=0x23
Info fld=0x17
end_request: I/O error, dev sdf, sector 32973734264
sd 7:0:0:1: SCSI error: return code = 0x08000002
sdf: Current: sense key: Aborted Command
<<vendor>> ASC=0xc0 ASCQ=0x23ASC=0xc0 ASCQ=0x23
Info fld=0x17
end_request: I/O error, dev sdf, sector 22213009752
sd 7:0:0:1: SCSI error: return code = 0x08000002
sdf: Current: sense key: Aborted Command
<<vendor>> ASC=0xc0 ASCQ=0x23ASC=0xc0 ASCQ=0x23
Info fld=0x17
end_request: I/O error, dev sdf, sector 32940065144
sd 7:0:0:1: SCSI error: return code = 0x08000002
sdf: Current: sense key: Aborted Command
<<vendor>> ASC=0xc0 ASCQ=0x23ASC=0xc0 ASCQ=0x23
Info fld=0x17
end_request: I/O error, dev sdf, sector 32974552944
sd 7:0:0:1: SCSI error: return code = 0x08000002
sdf: Current: sense key: Aborted Command
<<vendor>> ASC=0xc0 ASCQ=0x23ASC=0xc0 ASCQ=0x23
Info fld=0x17
end_request: I/O error, dev sdf, sector 17956282744
Buffer I/O error on device dm-3, logical block 9666270717
lost page write due to I/O error on dm-3
I/O error in filesystem ("dm-3") meta-data dev dm-3 block 0xe7ffb01c2 ("xlog_iodone") error 5 buf count 12800
Buffer I/O error on device dm-3, logical block 4028959741
lost page write due to I/O error on dm-3
xfs_force_shutdown(dm-3,0x2) called from line 956 of file fs/xfs/xfs_log.c. Return address = 0xffffffff883bec58
Filesystem "dm-3": Log I/O Error Detected. Shutting down filesystem: dm-3
Please umount the filesystem, and rectify the problem(s)
我该如何调试它?
谢谢。
答案1
我知道这是一篇很老的帖子,但由于答案不正确,我认为发布正确的答案对未来的访问者会很有用......
OP 报告的错误消息与 XFS 本身无关,而是由于驱动器/电缆损坏造成的。检查错误条目:
end_request: I/O 错误,设备 sde,扇区 39444095352
系统无法检索位于sde
LBA 地址的数据39444095352
。这通常意味着磁盘上有坏块。
sd 7:0:0:1:SCSI 错误:返回代码 = 0x08000002
sdf:当前:感知键:中止命令
供应商 ASC=0xc0 ASCQ=0x23ASC=0xc0 ASCQ=0x23
SCSI 命令由于超时(由坏块引起)而被中止,并且磁盘返回特定的供应商代码,更详细地解释该错误。
发出smartctl --all
显示各种内部磁盘计数器。属性与ID 5 (Reallocated_Sector_Ct)、197 (Current_Pending_Sector) 和 198 (Offline_Uncorrectable)特别令人感兴趣,因为它们显示了磁盘块不可读/重新映射的情况。
在这种情况下你能做什么?最安全且强烈推荐方法是将整个可读内容备份到另一个安全的磁盘(也许使用一些能够抵御磁盘错误的工具,例如ddrescue
)
如果这种方法不可行,那么还剩下两种可能性:
- 使用实时发行版重新启动并发出
badblocks -n <dev>
(此处为手册页):它将启动非破坏性读/写测试,这将触发磁盘上的坏块重新映射程序 - 手动覆盖受影响的坏块,发出类似
dd if=/dev/zero of=/dev/sde bs=512 count=1 seek=39444095352
请注意,上述两种方法(尤其是第二种方法)将要导致数据丢失,因为受影响的、无法读取的扇区将被覆盖。
恢复/覆盖完成后,你应该运行完整的文件系统检查,在这种情况下发出xfs_repair /dev/sde
答案2
您可以使用文件系统命令来调试西弗斯文件系统。请使用以下语法:
xfs_db [device with XFS installed]