补充说明
ddrescue 属于 GNU ddrescue,用于把故障磁盘尽可能完整地复制到镜像文件或另一块磁盘。它先快速读取正常区域,再反复重试坏区,并把进度记录在 mapfile 中,中断后可从断点继续。
与 dd 不同,ddrescue 遇到读错误不会直接放弃,而是记录位置、跳过并继续;-r 控制重试次数,-b 设置扇区大小,-n 只做第一轮快速拷贝。恢复后可用 ddrescuelog 分析 mapfile。
典型流程:先 -n 快速抓取正常区域,再用默认参数多次重试坏区,最后用 ddrescuelog -t 查看成功率。注意:对物理损坏磁盘,读操作本身有风险,应先评估并尽量只读操作;镜像目标空间要足够,输出设备会被覆盖。
mapfile 是纯文本,建议与镜像放在不同磁盘,并定期备份。若源盘正在恶化,优先抢救关键分区,而不是追求一次性完整镜像。
语法
ddrescue [选项] 输入 输出 [mapfile]
选项
-n/--no-scrape:只做第一轮快速拷贝,不刮擦重试;-r 次数:坏区重试次数;-b 字节:设置扇区大小;-c 字节:设置每次读取的簇大小;-i 位置:从输入文件的指定偏移开始;-o 位置:写入输出文件的指定偏移;-s 字节:限制复制的数据量;-f:强制覆盖已存在的输出;-d:对输入使用直接磁盘访问;-m 文件:指定域 mapfile。
实例
# 先快速复制正常区域
sudo ddrescue -n /dev/sdb disk.img disk.map
# 对坏区重试 3 轮
sudo ddrescue -r3 /dev/sdb disk.img disk.map
# 直接克隆到新盘(输出已存在时需要 -f)
sudo ddrescue -f /dev/sdb /dev/sdc rescue.map
# 查看恢复统计
ddrescuelog -t disk.map