第3章:数据备份原则——修复前必须做的镜像备份

说实话,我见过太多人栽在这个环节上。

有一次,一个朋友拿了一块硬盘来找我,说分区表坏了,让我帮忙修。我问他备份了吗?他说没有。我说那我不敢动。他急了,说数据很重要。我理解他的心情,但说实话,没有备份就动手修复分区表,就像在悬崖边上走钢丝——一个不小心,数据就彻底没了。

所以这一章,我要跟你聊聊修复前必须做的镜像备份。这不是建议,是铁律。

为什么必须做镜像备份?

你想想看,分区表修复本质上是在修改磁盘的底层结构。一旦操作失误,轻则分区表更乱,重则数据永久丢失。我个人的习惯是:任何写操作之前,先做全盘镜像。

镜像备份的好处有三点:

  • 安全第一:原始磁盘不动,所有操作在镜像上进行
  • 可回退:搞砸了?删掉镜像,重新来一次
  • 可重复:同一个镜像可以反复练习,直到找到正确方案
⚠️ 重要警告: 千万不要直接在原始磁盘上做分区表修复操作。我曾经见过有人直接在坏盘上写分区表,结果写错了位置,整个分区表被覆盖,数据再也找不回来。那个客户哭得很伤心,我也很无奈。

使用 dd 命令创建磁盘镜像

在 Linux 环境下,dd 命令是最常用的磁盘镜像工具。它简单、直接、可靠。我几乎每天都在用。

基本语法如下:

dd if=/dev/sdX of=/path/to/image.img bs=4M status=progress

参数说明:

参数 含义 说明
if 输入文件 源磁盘设备,如 /dev/sda
of 输出文件 镜像文件路径,建议放在另一块硬盘上
bs 块大小 我一般用 4M,速度较快
status=progress 显示进度 实时看到拷贝了多少数据

举个例子,假设你的故障磁盘是 /dev/sdb,你想把镜像存到 /data/backup/sdb.img:

dd if=/dev/sdb of=/data/backup/sdb.img bs=4M status=progress

嗯,这里要注意:目标磁盘的空间必须大于等于源磁盘。如果源磁盘是 1TB,你的目标盘至少要有 1TB 的可用空间。

💡 小技巧: 如果磁盘有坏道,dd 可能会卡住。这时候可以加一个 conv=noerror,sync 参数,跳过坏道继续拷贝。不过这样会丢失坏道处的数据,但总比卡死强。

校验镜像完整性

镜像做完了,你以为就完事了?不,还得校验。

我遇到过这种情况:镜像拷贝过程中,磁盘突然断电,或者 USB 线松了,结果镜像文件不完整。如果你直接拿这个不完整的镜像去修复,那等于白忙活。

校验方法很简单,用 md5sum 或 sha256sum 计算哈希值:

# 计算源磁盘的哈希值
sudo dd if=/dev/sdb bs=4M count=100 | md5sum

# 计算镜像文件的哈希值
md5sum /data/backup/sdb.img

两个哈希值一致,说明镜像完整。不一致?重新做。

不过说实话,全盘计算哈希值很慢。我个人的习惯是:只校验前 100MB 和后 100MB。因为分区表通常位于磁盘开头,而文件系统元数据可能在磁盘末尾。校验这两部分,基本能保证关键数据完整。

🔑 核心要点:
  • 修复前必须做镜像备份,这是底线
  • 使用 dd 命令创建全盘镜像,块大小推荐 4M
  • 校验镜像完整性,确保数据无误
  • 镜像文件存放在另一块健康的磁盘上

知识体系图

下面这张图展示了本章的核心逻辑:

数据备份原则流程图 原始磁盘 /dev/sdb dd 命令 bs=4M status=progress 镜像文件 sdb.img 校验完整性 md5sum / sha256sum ✅ 一致 → 开始修复 ❌ 不一致 → 重新做

这张图很直观:原始磁盘 → dd 命令 → 镜像文件 → 校验完整性 → 根据结果决定下一步。说白了,就是一条流水线,每一步都不能跳过。

避坑指南

最后,分享几个我踩过的坑:

  • 镜像文件不要放在源磁盘上:这还用说吗?但真有人这么干。镜像写到一半,源磁盘坏了,镜像也没了。
  • 注意磁盘顺序:dd 命令的 if 和 of 参数写反了,后果很严重。我曾经有一次差点把空文件写回源盘,还好及时 Ctrl+C 了。
  • 大磁盘要耐心:2TB 的磁盘,用 4M 块大小,大概需要 3-4 小时。别急,让它跑着,你去喝杯咖啡。
  • 校验不能省:我见过有人做完镜像直接开修,结果镜像不完整,修了半天发现数据全是乱的。白费功夫。

好了,这一章就到这里。记住:没有镜像,不动手。这是数据恢复的第一条铁律。

可可精品资料库