使用ddrescue仅恢复一半故障USB硬盘,如何挽救剩余数据?
兄弟,我太懂你这种看着故障USB盘反复掉线、ddrescue卡在49%动不了的崩溃感了!针对你的两个核心问题,我给你一步步拆解解决方案:
一、让ddrescue跳过坏区/应对硬盘掉线,继续恢复数据
你现在遇到的是典型的USB硬盘硬件故障导致的频繁离线,结合ddrescue的特性,可以这么调整:
利用日志文件续传,不用从头再来:你已经生成了
recovery.log,每次重新插拔硬盘识别后,直接重新运行原来的命令就行:ddrescue -n -f -v /dev/sdb1 /dev/sdc2 recovery.log日志文件会精准记录已经恢复的区域,自动跳过,只处理未完成的部分,不用怕之前的进度白费。
减小读取块大小,降低硬盘压力:大尺寸的读取容易触发USB超时,你可以试试把单次读取的块调小,比如限制为1MB,命令改成:
ddrescue -n -f -v --max-read-size=1M /dev/sdb1 /dev/sdc2 recovery.log小批量读取能减少硬盘的负载,降低掉线概率。
针对性跳过顽固坏块:如果dmesg里已经定位到明确的坏块区域(比如你提到的逻辑块481912624),可以用
--skip-size参数直接跳过该区域附近的空间,比如跳过1GB的范围:ddrescue -n -f -v --skip-size=1G /dev/sdb1 /dev/sdc2 recovery.log这个操作要谨慎,最好先根据dmesg的信息估算坏块的大致范围,避免跳过太多有效数据。
尝试克隆整个磁盘而非分区:有时候分区表本身也有损坏,或者故障出在分区之外的区域,直接对整个磁盘
/dev/sdb克隆可能更稳定(注意目标盘/dev/sdc要和源盘大小一致或更大):ddrescue -n -f -v /dev/sdb /dev/sdc recovery_disk.log
二、安全挂载目标盘查看已恢复数据
完全不用担心只读挂载的安全性——只读模式下系统只会读取数据,不会对目标盘做任何修改,放心操作:
先确认目标分区没被挂载:
umount /dev/sdc2如果提示“not mounted”,直接跳过这一步就行。
创建一个挂载目录:
mkdir -p /mnt/recovered_data只读挂载目标分区:
mount -o ro /dev/sdc2 /mnt/recovered_data之后你就可以进入
/mnt/recovered_data查看已经恢复的文件了。
万一挂载提示文件系统错误怎么办?
如果挂载时提示文件系统损坏,别直接跑fsck(它会修改文件系统),先运行只读检查看看问题:
fsck -n /dev/sdc2
这个命令只会检测错误,不会修复。如果确实需要修复,建议先给目标分区做个镜像备份,再对备份文件操作,避免破坏现有恢复的数据:
dd if=/dev/sdc2 of=/path/to/safe/backup.img bs=1M
另外,如果文件系统损坏严重,也可以用photorec工具直接扫描目标盘,它能绕过文件系统,直接提取可识别的文件(比如照片、文档等),也是个不错的备选方案。
备注:内容来源于stack exchange,提问作者Volker




