做机械硬盘(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 背后的底层原理
要真正理解这类报错,得先搞清楚机械硬盘读数据的流程:
- 寻道(Seek):磁头臂移动到目标磁道,机械动作耗时 3-15ms
- 旋转等待(Rotational Latency):盘片旋转到正确扇区,平均 4.17ms(5400RPM)/ 2.83ms(7200RPM)
- 数据读取:磁头感应磁场变化,转化为电信号
- 校验与返回:主控芯片做 ECC 校验,错误则触发重试
所谓 I/O error,本质就是上面四步中任意一步反复失败、超过重试阈值后的最终结果。坏道产生的物理原因主要有:
- 磁介质退化:磁粉涂层老化、脱落,导致信号无法正确读取
- 磁头污染:轻微震动导致磁头接触盘片(正常情况下磁头靠气流悬浮)
- 扇区标记损坏:伺服区(Servo)信息出错,硬盘找不到数据位置
- 写入异常:意外断电导致写入扇区的数据不完整
四、可能原因定位
按排查优先级排列:
- 坏道(Bad Sector):磁介质物理损伤,读到特定扇区直接报 I/O error。这是最常见的原因,绝大多数这类故障都跟它相关。
- SMART 警告:Reallocated Sector Count(05)、Current Pending Sector(C5)、Offline Uncorrectable(C6)三项异常,往往是坏道的前兆。
- SATA 接口松动或供电不足:3.5 寸硬盘外接时,供电不足会导致读写过程中触发断电保护。
- 文件系统损坏:NTFS/ext4 元数据出错,备份工具无法完整读取目录树。
- 目标盘写缓存策略冲突:USB 桥接芯片与机械盘缓存策略不匹配,偶尔也会报写入错误。
- 线材质量问题:尤其是 SATA 转 USB 线,长度超过 50cm 或劣质芯片容易导致信号衰减。
- 主板供电波动:多盘位机箱中,老旧电源的 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 | 数据传输校验错误 | 持续增长需检查线材 |
第二步:评估是否还能继续备份
这是关键决策点:
- 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
六、预防策略:让备份不再”踩雷”
亡羊补牢不如未雨绸缪,建议把以下几点纳入日常运维:
- 周期性 SMART 巡检:每周跑一次
smartctl -H /dev/sdX,结合 cron 邮件告警 - 遵循 3-2-1 备份原则:3 份副本、2 种介质、1 份异地(云盘/异地硬盘均可)
- 避开高危盘源:华强北拆机盘、矿盘、NAS 退役仓盘尽量别用来做主力备份盘
- 监控硬盘温度:机械硬盘工作温度长期超过 45°C 会显著缩短寿命,建议加装风扇或风道散热
- 避免震动:机械硬盘运行时最怕震动,硬盘盒一定要放在稳定位置
- 定期全盘校验:每季度跑一次
badblocks或fsck全面体检 - 及时退役:累计通电超过 30000 小时或 SMART 出现多项黄色告警的盘,应主动替换
七、小结
机械硬盘备份碰到 I/O error,说白了就是源盘寿命到点的信号。第一优先级永远是数据抢救,而不是任务完成。ddrescue + SMART 监测这套组合,配合周期性的健康检查,基本能覆盖大多数家用和 NAS 备份场景。
说真的,备份这事儿最怕的就是”平时不查、出事才慌”。建议把 SMART 监控加进 cron 或任务计划里,Reallocated Sector 增长超过个位数就触发告警,别等到备份当天才发现盘挂了。
—
你最近一次遇到机械硬盘 I/O 报错是哪次?是用 ddrescue 救回来的还是直接换了盘?欢迎评论区聊聊你的踩坑经历。
如需选购适合的笔记本电脑,可参考 Thinkpad深圳报价。
相关阅读:深圳笔记本报价

