4、数据恢复第一原则:只读挂载与镜像制作(使用ddrescue工具)
好,咱们正式开始实操之前,我得先跟你聊一条铁律。这条规矩你要是破了,后面学再多技巧也白搭。
数据恢复的第一原则是什么?绝对不要往坏盘上写任何东西。
听起来简单吧?但我见过太多人栽在这上面。有一次,一个同事拿块硬盘过来,说分区表坏了,想用 DiskGenius 直接重建。我赶紧拦住他——你这一重建,系统就会往盘上写数据,原本能找回的文件可能就被覆盖了。嗯,这就是典型的「好心办坏事」。
为什么不能直接操作原盘?
你想想看,分区表损坏的时候,文件系统处于一个「半残」状态。这时候你对它做任何写入操作——哪怕是挂载成读写模式——都可能触发文件系统日志更新、临时文件创建,甚至自动修复机制。
这些操作会改变磁盘上原本的数据布局。原本只是分区表坏了,数据还在;你一写,数据可能就真没了。
只读挂载:第一步防护
拿到一块坏盘,我个人的习惯是:先判断能不能被系统识别。如果能,第一件事就是用只读方式挂载。
在 Linux 下,命令很简单:
# 查看磁盘设备
sudo fdisk -l
# 只读挂载(假设设备是 /dev/sdb)
sudo mount -o ro /dev/sdb1 /mnt/recovery
-o ro 就是只读参数。但这里有个坑——即使你用了只读挂载,某些文件系统驱动在检测到错误时,仍然会尝试写入日志。所以更稳妥的做法是:
# 强制以只读方式挂载,禁止任何写入
sudo mount -o ro,noload /dev/sdb1 /mnt/recovery
noload 参数告诉内核:别加载日志,别尝试修复,就读原始数据。
mountvol 命令或者第三方工具(比如 R-Studio)的只读模式。但说实话,Windows 对坏盘的容错不如 Linux 好,我建议你准备一个 Ubuntu Live USB 作为数据恢复的专用环境。
镜像制作:真正的保险
只读挂载只是临时措施。真正的保险是——制作一个完整的磁盘镜像。
为什么?因为坏盘随时可能彻底报废。电机卡死、磁头老化、盘片划伤……你多读一次,风险就多一分。镜像做完了,原盘就可以收起来当「物证」,所有操作都在镜像文件上进行。
这里我要重点推荐一个工具:ddrescue。
注意,不是 dd,是 ddrescue。这两个名字很像,但差别巨大。dd 遇到坏道就直接报错退出了,而 ddrescue 是专门为数据恢复设计的——它会跳过坏道,记录错误位置,然后回头再试。
| 特性 | dd | ddrescue |
|---|---|---|
| 遇到坏道 | 直接退出 | 跳过并记录 |
| 重试机制 | 无 | 多轮重试,逐步缩小范围 |
| 日志文件 | 不支持 | 支持(可断点续传) |
| 适用场景 | 健康盘 | 坏道盘、不稳定盘 |
ddrescue 实操:三步走
好,咱们直接上手。假设你的坏盘是 /dev/sdb,目标镜像文件是 /mnt/recovery/disk.img。
第一步:安装 ddrescue
# Ubuntu/Debian
sudo apt-get install gddrescue
# CentOS/RHEL
sudo yum install ddrescue
装好之后,命令是 ddrescue,不是 gddrescue。
第二步:第一次扫描(快速模式)
sudo ddrescue -d -f -n /dev/sdb /mnt/recovery/disk.img /mnt/recovery/rescue.log
参数解释:
-d:直接读取,绕过系统缓存。对坏盘来说,缓存反而碍事。-f:强制覆盖输出文件。-n:快速模式,只做一次读取,遇到坏道直接跳过。/dev/sdb:源设备。/mnt/recovery/disk.img:目标镜像文件。/mnt/recovery/rescue.log:日志文件。这个文件极其重要,它记录了哪些扇区读成功了,哪些失败了。下次可以接着跑。
第一次扫描的目标是:在最短时间内把能读的数据都读出来。坏道先不管。
第三步:第二次扫描(重试模式)
sudo ddrescue -d -r 3 /dev/sdb /mnt/recovery/disk.img /mnt/recovery/rescue.log
-r 3 表示对之前失败的扇区重试 3 次。ddrescue 会从坏道边缘开始,逐步向内逼近,尽量多抢救一些数据。
我曾经用这个方法,从一个有 5000 多个坏道的 2TB 硬盘里,救出了 98% 的数据。剩下的 2% 实在读不出来,但客户最重要的文件都在那 98% 里。
镜像制作的核心逻辑
为了让你更直观地理解这个过程,我画了一张流程图:
镜像制作完成后做什么?
镜像文件拿到手,第一件事:校验完整性。
# 计算源盘和镜像的哈希值(只读读取)
sudo sha256sum /dev/sdb
sha256sum /mnt/recovery/disk.img
如果哈希值一致,说明镜像完美。如果不一致,说明有数据没读出来——这时候可以再跑一轮 ddrescue,或者考虑用专业设备做深度恢复。
然后呢?把原盘收好,贴上标签,写上日期和状态。以后所有操作都在镜像上进行。
什么时候可以跳过镜像制作?
说实话,只有一种情况:盘已经完全读不出来了,必须开盘做硬件级恢复。那种情况,镜像制作是在洁净室里完成的,不在咱们这个课程的讨论范围内。
其他所有情况——分区表坏了、误删了、格式化错了、RAW 了——都先做镜像。这是成本最低、风险最小的做法。
嗯,这一节的内容就到这里。记住:只读挂载是态度,镜像制作是行动。两者缺一不可。