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 或挂载写操作,否则可能把可读区域也破坏掉。
镜像完成后先在副本上只读检查再提取文件;坏区位置的数据如果业务上不关键,可以接受缺失,重要的是把可读部分完整保住。