我正在将一些文件复制到外部硬盘驱动器,在此期间dmesg
输出以下内容:
[76668.241387] sd 12:0:0:0: [sde] tag#0 FAILED Result: hostbyte=DID_ERROR driverbyte=DRIVER_OK
[76668.241392] sd 12:0:0:0: [sde] tag#0 CDB: Write(16) 8a 00 00 00 00 00 ff ff ff 80 00 00 00 80 00 00
[76668.241394] blk_update_request: I/O error, dev sde, sector 4294967168
[76668.241443] EXT4-fs warning (device dm-6): ext4_end_bio:329: I/O error -5 writing to inode 133955588 (offset 2692743168 size 8388608 starting block 536869888)
[76668.241445] Buffer I/O error on device dm-6, logical block 536869888
[76668.241448] Buffer I/O error on device dm-6, logical block 536869889
[76668.241450] Buffer I/O error on device dm-6, logical block 536869890
[76668.241451] Buffer I/O error on device dm-6, logical block 536869891
[76668.241452] Buffer I/O error on device dm-6, logical block 536869892
[76668.241453] Buffer I/O error on device dm-6, logical block 536869893
[76668.241454] Buffer I/O error on device dm-6, logical block 536869894
[76668.241456] Buffer I/O error on device dm-6, logical block 536869895
[76668.241457] Buffer I/O error on device dm-6, logical block 536869896
[76668.241458] Buffer I/O error on device dm-6, logical block 536869897
文件管理器(Caja)没有停止复制,实际上它在没有任何警告的情况下完成了操作,然而在那之后我尝试读取发生该错误的文件(通过计算 CRC - 但并未完成)并得到更多信息:
[78572.174482] sd 12:0:0:0: [sde] tag#0 FAILED Result: hostbyte=DID_ERROR driverbyte=DRIVER_OK
[78572.174487] sd 12:0:0:0: [sde] tag#0 CDB: Read(16) 88 00 00 00 00 00 ff ff ff f0 00 00 00 10 00 00
[78572.174490] blk_update_request: I/O error, dev sde, sector 4294967280
[78572.223194] sd 12:0:0:0: [sde] tag#0 FAILED Result: hostbyte=DID_ERROR driverbyte=DRIVER_OK
[78572.223200] sd 12:0:0:0: [sde] tag#0 CDB: Read(16) 88 00 00 00 00 00 ff ff ff f8 00 00 00 08 00 00
[78572.223202] blk_update_request: I/O error, dev sde, sector 4294967288
之后,我能够将该文件复制到另一个位置,但校验和与原始文件不匹配,因此我认为它可能是一个坏扇区,但是...我检查了 SMART,没有关于任何重新分配的信息!
这一切意味着什么?我的驱动器坏了还是系统随机错误?我应该担心吗?
答案1
sd 12:0:0:0:[sde] 标签#0 CDB:写入(16) 8a 00 00 00 00 00
初始错误表明 SCSI 命令 0x8a(写入)失败,您会收到 errno 5,即 EIO 输入/输出错误。在对介质进行物理写入时出现此类故障表明介质存在物理错误(或者可能性较小,也许您应该仔细检查驱动程序和控制器之间的互连电缆(例如 SATA 电缆))。
后续的 SCSI 命令错误 0x88 是读取失败。听起来您需要监控 SMART 数据;也许介质需要更换。
答案2
DID_ERROR 部分通常是由与驱动器通信时发生的早期错误引起的,然后内核尝试重置驱动器,如果重置失败,驱动器将脱机。从逻辑上讲,驱动器被拔出,因此所有后续请求都因 DID_ERROR 而失败。
进一步查看日志以查找原始错误。
答案3
我弄清楚了这些错误对我而言意味着什么......发生这种情况是因为我使用了 SATA-to-USB3 适配器(Unitek Y-1034),它不支持我的驱动器型号(HGST NAS)或尺寸(也许 4TB 对于该适配器来说太大了)。
驱动器过去和现在都是 100% 良好的(SMART 没有任何问题),自从我切换到使用热插拔 SATA 托架后再也没有发生过这种情况。
答案4
我在 ZFS 上运行虚拟机 (Ext4),并收到此错误。经过一番调查,我发现 ZFS 磁盘空间不足(由于快照):
zfs list
(显示 0B 可用)。修复方法是删除一些旧快照。请先检查所有快照:
/sbin/zfs list -H -o name -t snapshot |grep tank
然后使用以下一行代码删除多余的部分:
/sbin/zfs list -H -o name -t snapshot |grep tank |grep 2023 |xargs -n1 /sbin/zfs destroy