机械硬盘备份 I/O error 报错排查实战:从坏道到容错恢复

做机械硬盘(HDD)备份这事儿,老实讲,很多人觉得”拷过去就行”,真碰到 I/O error 中断的时候才开始头疼。最近帮朋友处理了一次典型案例,写下来给各位参考。

一、案例背景:一次失败的备份任务

朋友用的是一块从华强北淘来的 4TB 希捷拆机盘,挂在 USB 3.0 硬盘盒里做日常备份。备份脚本每天凌晨三点跑一次 rsync 增量同步,跑了大概两年多一直相安无事。直到上个月某天早上,他发现备份日志里连续三天出现 Input/output error,某些子目录根本没拷过去,目标盘里躺着不少残留的 .tmp 文件,源盘在 Windows 下访问某些文件夹还会卡死十几秒。

初步判断:典型的”老盘寿终正寝”症状。但究竟还能不能抢救?哪些数据能救?抢救顺序怎么排?这才是真正考验人的地方。下面把这套完整的排查与恢复流程拆开来讲。

二、现象:备份任务跑到一半突然中断

具体表现:

  • rsync/robocopy 进程异常退出,日志里反复出现 Input/output error
  • 备份脚本中断后,目标盘剩余空间看起来充足
  • 源盘(机械硬盘)在拷贝某些大文件时,Windows 弹出”无法读取文件”提示
  • 部分文件拷贝完成、部分残缺,目标盘出现 .tmp 残留
  • 硬盘偶尔发出”咔咔”的异响,这是磁头反复回弹的声音,往往伴随寻道失败
  • 系统日志(Windows Event Viewer / Linux dmesg)出现 ata1.00: exception Emask 或 end_request: I/O error 记录

这类问题在 4TB 以上容量、累计通电时间超过两万小时的老盘上特别常见。NAS 仓盘、二手拆机盘、出矿盘都属于高危群体。从华强北电子市场流入的拆机盘尤其需要警惕——商家通常只做短时间通电测试,根本无法暴露潜在的坏道问题。

三、I/O error 背后的底层原理

要真正理解这类报错,得先搞清楚机械硬盘读数据的流程:

  1. 寻道(Seek):磁头臂移动到目标磁道,机械动作耗时 3-15ms
  2. 旋转等待(Rotational Latency):盘片旋转到正确扇区,平均 4.17ms(5400RPM)/ 2.83ms(7200RPM)
  3. 数据读取:磁头感应磁场变化,转化为电信号
  4. 校验与返回:主控芯片做 ECC 校验,错误则触发重试

所谓 I/O error,本质就是上面四步中任意一步反复失败、超过重试阈值后的最终结果。坏道产生的物理原因主要有:

  • 磁介质退化:磁粉涂层老化、脱落,导致信号无法正确读取
  • 磁头污染:轻微震动导致磁头接触盘片(正常情况下磁头靠气流悬浮)
  • 扇区标记损坏:伺服区(Servo)信息出错,硬盘找不到数据位置
  • 写入异常:意外断电导致写入扇区的数据不完整

四、可能原因定位

按排查优先级排列:

  1. 坏道(Bad Sector):磁介质物理损伤,读到特定扇区直接报 I/O error。这是最常见的原因,绝大多数这类故障都跟它相关。
  2. SMART 警告:Reallocated Sector Count(05)、Current Pending Sector(C5)、Offline Uncorrectable(C6)三项异常,往往是坏道的前兆。
  3. SATA 接口松动或供电不足:3.5 寸硬盘外接时,供电不足会导致读写过程中触发断电保护。
  4. 文件系统损坏:NTFS/ext4 元数据出错,备份工具无法完整读取目录树。
  5. 目标盘写缓存策略冲突:USB 桥接芯片与机械盘缓存策略不匹配,偶尔也会报写入错误。
  6. 线材质量问题:尤其是 SATA 转 USB 线,长度超过 50cm 或劣质芯片容易导致信号衰减。
  7. 主板供电波动:多盘位机箱中,老旧电源的 12V 输出不稳,会直接表现为硬盘异常掉盘。

五、解决步骤

第一步:确认源盘健康度

Windows 用 CrystalDiskInfo,Linux 用 smartctl:

sudo smartctl -a /dev/sdX

重点看以下几个 SMART 关键参数:

ID 属性名 含义 警戒值
05 Reallocated Sector Count 已替换坏扇区数 >0 即告警
C5 Current Pending Sector 待映射扇区数 >0 即告警
C6 Offline Uncorrectable 不可校正扇区 >0 即告警
BB Reported Uncorrectable 系统报告的不可校正错误 >0 即告警
197 Current Pending Sector 同 C5(厂商差异) >0 即告警
199 UDMA CRC Error Count 数据传输校验错误 持续增长需检查线材
如果任意一项 Threshold 值低于 Critical,或者 RAW_VALUE 大于 0 且持续上涨,基本可以判定有物理坏道。

第二步:评估是否还能继续备份

这是关键决策点:

  • Pending Sector < 100 且 Reallocated Sector 不增长:可以尝试容错备份,但数据完整性无法 100% 保证
  • Pending Sector > 100 或 Reallocated 持续上涨:建议先做 ddrescue 镜像抢救,再考虑换盘
  • Reallocated 已达数千甚至上万:硬盘进入晚期故障阶段,抢救过程中随时可能彻底挂掉,建议优先抢救最重要的数据
  • 伴随异响或掉盘:立即停止通电,过度通电会加速磁头与盘片的物理损伤

第三步:用 ddrescue 做容错备份(推荐)

ddrescue 是这类场景的最佳工具,它能跳过读不出的扇区并记录坏块位置,便于后续重试。

基础命令:

sudo ddrescue -n -r3 /dev/sdX /path/to/backup.img /path/to/rescue.log
机械硬盘

参数说明:

  • -n:跳过坏道不重试
  • -r3:遇到错误最多重试 3 次
  • 第二个日志文件 rescue.log 必须保留,断点续拷全靠它

如果坏道密集,建议分两阶段执行:

# 第一阶段:快速跳过坏道
sudo ddrescue -n /dev/sdX backup.img rescue.log
# 第二阶段:对坏道区域重试
sudo ddrescue -d -r3 /dev/sdX backup.img rescue.log

-d 参数会让 ddrescue 直接访问设备、绕过内核缓存,常能读出一些原本读不到的数据。

进阶技巧:

# 反向读取模式:对某些坏道密集盘效果更好
sudo ddrescue -n -R /dev/sdX backup.img rescue.log

# 限制速率,避免老盘过热
sudo ddrescue -n --max-read-rate=50M /dev/sdX backup.img rescue.log

# 跳过已恢复区域,只抢救未完成部分
sudo ddrescue --no-scrape /dev/sdX backup.img rescue.log

第四步:镜像挂载与文件提取

拿到镜像后,NTFS 文件系统:

sudo mount -o loop,ro backup.img /mnt/backup

如果 NTFS 元数据损坏导致挂载失败,先用 ntfsfix 处理:

sudo ntfsfix /dev/loop0

ext4 文件系统用 e2fsck:

sudo e2fsck -p backup.img   # 自动修复
sudo e2fsck -y backup.img   # 遇到问题全部 yes(谨慎使用)

镜像提取后,可用 photorec 进一步扫描残留文件:

sudo photorec /d /path/to/output /cmd backup.img partition_i_choosed_to_recover,fileopt,everything,enable,search

第五步:替换损坏文件

挂载成功后,对照 ddrescue 日志找出那些读取失败的源文件。能用 ddrescue 把绝大多数数据救回来就算成功,剩下的犄角旮旯可以试 photorec 或 testdisk,但成功率不保证。

判断哪些文件损坏:

# 从 ddrescue 日志统计坏块数量
grep -c "non-trimmed" rescue.log
grep -c "failed" rescue.log

六、预防策略:让备份不再”踩雷”

亡羊补牢不如未雨绸缪,建议把以下几点纳入日常运维:

  1. 周期性 SMART 巡检:每周跑一次 smartctl -H /dev/sdX,结合 cron 邮件告警
  2. 遵循 3-2-1 备份原则:3 份副本、2 种介质、1 份异地(云盘/异地硬盘均可)
  3. 避开高危盘源:华强北拆机盘、矿盘、NAS 退役仓盘尽量别用来做主力备份盘
  4. 监控硬盘温度:机械硬盘工作温度长期超过 45°C 会显著缩短寿命,建议加装风扇或风道散热
  5. 避免震动:机械硬盘运行时最怕震动,硬盘盒一定要放在稳定位置
  6. 定期全盘校验:每季度跑一次 badblocks 或 fsck 全面体检
  7. 及时退役:累计通电超过 30000 小时或 SMART 出现多项黄色告警的盘,应主动替换

七、小结

机械硬盘备份碰到 I/O error,说白了就是源盘寿命到点的信号。第一优先级永远是数据抢救,而不是任务完成。ddrescue + SMART 监测这套组合,配合周期性的健康检查,基本能覆盖大多数家用和 NAS 备份场景。

说真的,备份这事儿最怕的就是”平时不查、出事才慌”。建议把 SMART 监控加进 cron 或任务计划里,Reallocated Sector 增长超过个位数就触发告警,别等到备份当天才发现盘挂了。

对于重要数据,最稳妥的做法还是”双盘冷备 + 云端异地备份”三保险。机械硬盘哪怕再可靠,也终有寿终正寝的一天。真正靠谱的备份策略,是让任何一块盘坏了都不影响数据完整性,而不是指望某一块盘永远不会坏。

—

你最近一次遇到机械硬盘 I/O 报错是哪次?是用 ddrescue 救回来的还是直接换了盘?欢迎评论区聊聊你的踩坑经历。

如需选购适合的笔记本电脑,可参考 Thinkpad深圳报价。

相关阅读:深圳笔记本报价

yh6788
Author: yh6788

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注