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 参数告诉内核:别加载日志,别尝试修复,就读原始数据。

💡 小技巧: 如果你用的是 Windows,可以用 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% 里。

📌 关键点: 日志文件(rescue.log)一定要保留。如果镜像制作到一半中断了,只要日志在,下次可以从断点继续,不用从头开始。

镜像制作的核心逻辑

为了让你更直观地理解这个过程,我画了一张流程图:

ddrescue 镜像制作核心流程 源盘 /dev/sdb 第一次扫描:快速模式 (-n) 有坏道? 是 第二次扫描:重试 (-r 3) 否 镜像完成 📋 日志文件 (rescue.log) 贯穿全程 记录已读/未读/坏道位置 → 支持断点续传 → 可随时中断恢复

镜像制作完成后做什么?

镜像文件拿到手,第一件事:校验完整性。

# 计算源盘和镜像的哈希值(只读读取)
sudo sha256sum /dev/sdb
sha256sum /mnt/recovery/disk.img

如果哈希值一致,说明镜像完美。如果不一致,说明有数据没读出来——这时候可以再跑一轮 ddrescue,或者考虑用专业设备做深度恢复。

然后呢?把原盘收好,贴上标签,写上日期和状态。以后所有操作都在镜像上进行。

⚠️ 避坑指南: 我曾经遇到一个情况——镜像做完了,哈希也对上了,但挂载镜像后发现文件系统还是坏的。后来一查,原来是源盘本身就有文件系统损坏,不是分区表的问题。所以记住:镜像只保证「位对位」复制,不保证文件系统逻辑正确。后续还需要用 fsck 或专业工具做文件系统层面的修复。

什么时候可以跳过镜像制作?

说实话,只有一种情况:盘已经完全读不出来了,必须开盘做硬件级恢复。那种情况,镜像制作是在洁净室里完成的,不在咱们这个课程的讨论范围内。

其他所有情况——分区表坏了、误删了、格式化错了、RAW 了——都先做镜像。这是成本最低、风险最小的做法。

嗯,这一节的内容就到这里。记住:只读挂载是态度,镜像制作是行动。两者缺一不可。