首页/数据/备份与容灾速查/ddrescue 坏盘镜像

ddrescue 坏盘镜像

面向故障磁盘的镜像工具:先快速复制并跳过坏区,再回头反复尝试,支持映射文件断点续做,避免普通 dd 在坏道上长时间卡死。

备份与容灾速查数据更新于 2026-10-13

ddrescue 是什么

ddrescue 是面向故障磁盘的数据救援工具:它先快速把能读的区域复制出来,遇到坏扇区就跳过,再回头对坏区反复重试。整个过程用映射文件(mapfile)记录进度,中断或断电后可以接着做。相比普通 dd 在坏道上长时间卡死、一次失败就前功尽弃,它的策略明显更适合已经出问题的介质。

基本信息

适用平台Linux(GNU ddrescue,包名通常为 gddrescue);也有 dd_rescue 等同类工具
两阶段策略先 -n 快速复制跳过坏区,再对坏区反复重试
映射文件记录已复制区域与坏区,支持断点续做与多次救援
关键纪律全程只读操作原盘,绝不在原盘上挂载可写或执行修复命令

典型使用场景

  • 机械盘出现坏道:先尽量把好数据抢出来,再慢慢啃坏区
  • 固态盘异常:读取时出现超时或掉盘,需要控制读取压力
  • 介质即将失效:磁盘异响或 SMART 告警时优先整盘镜像
  • 分区表损坏但数据仍在:先整盘镜像,再在副本上尝试修复分区
  • 取证与保全:在不动原盘的前提下得到可分析副本

两阶段镜像

两阶段镜像
# 第一阶段:快速复制,遇到坏区先跳过(-n 不切割坏区)
ddrescue -n /dev/sdb /backup/disk.img /backup/disk.map
# 查看进度与坏区统计
ddrescuelog -t /backup/disk.map
# 第二阶段:对坏区反复重试
ddrescue -r3 /dev/sdb /backup/disk.img /backup/disk.map
# 救援完成后在副本上操作,原盘保持只读或断电保存
e2fsck -n /backup/disk.img   # 只读检查副本,不改原盘

常用参数读法

参数作用注意点
-n不切割坏区,快速扫一遍好数据速度快但坏区会先留空,需要第二阶段补
-r3对坏区重试 3 次次数越多读盘越久,也可能加重介质负担
-d / --idirect直接访问设备,跳过内核缓存部分场景能提高坏区读取成功率
映射文件记录进度与坏区分布务必放在另一块盘上,中断后可续做
-t / ddrescuelog查看进度与坏区统计用于判断是否还有必要继续抢救
故障盘上每一次写入都增加风险:救援过程保持只读,不在原盘上执行 fsck 或挂载写操作,否则可能把可读区域也破坏掉。
镜像完成后先在副本上只读检查再提取文件;坏区位置的数据如果业务上不关键,可以接受缺失,重要的是把可读部分完整保住。

易错点

  • 对故障盘直接执行 fsck 或可写挂载:可能加速损坏,把本来可读的数据变成不可读
  • 把映射文件写在故障盘上:写入压力加重介质负担,且进度文件本身也可能丢失
  • 救援完成后继续操作原始盘:应切到副本上做恢复与提取,原盘保持只读或断电保存
  • 用 dd 处理坏盘:坏道处长时间卡死,缺少断点记录,中途失败只能从头再来

数据来源与参考

  • GNU ddrescue 手册
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌