You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用ddrescue仅恢复一半故障USB硬盘,如何挽救剩余数据?

使用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
    

二、安全挂载目标盘查看已恢复数据

完全不用担心只读挂载的安全性——只读模式下系统只会读取数据,不会对目标盘做任何修改,放心操作:

  1. 先确认目标分区没被挂载:

    umount /dev/sdc2
    

    如果提示“not mounted”,直接跳过这一步就行。

  2. 创建一个挂载目录:

    mkdir -p /mnt/recovered_data
    
  3. 只读挂载目标分区:

    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

火山引擎 最新活动