4. 数据备份原则:修复前的全盘镜像制作(dd命令与WinHex)
分区表修复,说白了就是给硬盘做手术。既然是手术,那术前必须得有个“备份”——全盘镜像。我见过太多人上来就改分区表,改完发现不对,想回退却回不去了。嗯,那种绝望的眼神,我至今记得。
所以这一章,咱们就聊聊怎么在动手之前,把硬盘的“命根子”完整地保留下来。我会介绍两种最常用的工具:Linux下的dd命令,和Windows下的WinHex。
4.1 为什么必须做全盘镜像?
你想想看,分区表只有64个字节(MBR)或1700多个字节(GPT头)。但为什么我不建议只备份那几十个字节?
因为分区表修复往往不是孤立的问题。很多时候,分区表损坏伴随着引导扇区损坏、文件系统元数据错乱。你只备份了分区表,结果发现修复时还需要引导扇区的数据,那就尴尬了。
我在项目中遇到过一位运维同事,他自信满满地只备份了MBR的前446字节。结果修复时发现DBR(DOS引导记录)也坏了,而他没有备份。最后只能靠数据恢复软件全盘扫描,花了整整两天。
全盘镜像的好处很明显:
- 完整保留现场:包括分区表、引导扇区、文件系统元数据、甚至已删除文件的空间。
- 可反复实验:在镜像上随便折腾,坏了就重新拷贝一份,原盘纹丝不动。
- 应对突发情况:修复过程中如果断电、死机,原盘数据还在。
4.2 使用dd命令制作镜像(Linux环境)
dd命令是Linux下最底层的拷贝工具。它不关心文件系统,只按块读取和写入。说白了,它就是硬盘的“复印机”。
4.2.1 基本语法
dd if=/dev/sda of=/mnt/backup/sda.img bs=512 count=1
参数说明:
| 参数 | 含义 | 示例 |
|---|---|---|
if |
输入文件(源设备) | /dev/sda |
of |
输出文件(镜像文件) | /mnt/backup/sda.img |
bs |
块大小(字节) | 512、4K |
count |
拷贝的块数 | 1(只拷贝1块) |
4.2.2 全盘镜像实战
要制作整个硬盘的镜像,我们需要拷贝从0扇区到最后一个扇区的所有数据。命令如下:
# 先查看硬盘总扇区数
fdisk -l /dev/sda
# 假设总扇区数为 1953525168,块大小设为 4M 以提高速度
dd if=/dev/sda of=/mnt/backup/sda_full.img bs=4M status=progress
这里有个小技巧:status=progress参数会显示拷贝进度,让你心里有数。否则大硬盘拷贝时,你会怀疑电脑是不是死机了。
md5sum计算镜像文件的哈希值,并记录下来。这样以后验证镜像完整性时,直接比对哈希值就行。命令:md5sum /mnt/backup/sda_full.img > /mnt/backup/sda_full.md5
4.2.3 只备份关键区域
有时候硬盘太大(比如4TB),全盘镜像太耗时。我们可以只备份关键区域:
# 备份MBR(前512字节,包含分区表和引导代码)
dd if=/dev/sda of=/mnt/backup/sda_mbr.bin bs=512 count=1
# 备份GPT头(前34个扇区,共17408字节)
dd if=/dev/sda of=/mnt/backup/sda_gpt_header.bin bs=512 count=34
# 备份整个引导区域(前2048个扇区,1MB)
dd if=/dev/sda of=/mnt/backup/sda_boot_area.bin bs=512 count=2048
但说实话,我建议还是做全盘镜像。因为“关键区域”这个概念是相对的——你永远不知道修复时还需要什么数据。
4.3 使用WinHex制作镜像(Windows环境)
如果你用的是Windows系统,或者客户的环境只有Windows,那WinHex就是首选。它是一款十六进制编辑器,但它的磁盘克隆功能非常强大。
4.3.1 准备工作
- 下载并安装WinHex(建议使用18.0以上版本)。
- 准备一个足够大的存储设备来存放镜像文件。
- 以管理员身份运行WinHex。
4.3.2 制作镜像步骤
步骤其实很简单:
- 点击菜单栏 Tools → Disk Tools → Clone Disk。
- 在源设备中选择你要备份的硬盘(注意别选错了!)。
- 在目标设备中选择“File”并指定镜像文件的保存路径。
- 选择克隆方式:建议选“Copy entire disk”(拷贝整个磁盘)。
- 点击“OK”开始克隆。
🔑 关键设置:在克隆对话框中,有一个“Copy sectors”选项。默认是“All sectors”,但如果你只想备份分区表区域,可以选“Sector range”并输入起始和结束扇区号。不过,我建议新手直接选“All sectors”,省心。
4.3.3 WinHex的优势
相比dd命令,WinHex有几个独特的好处:
- 图形界面:操作直观,不容易出错。
- 跳过坏道:如果硬盘有坏道,WinHex可以自动跳过并记录,而
dd默认会卡住。 - 实时预览:克隆过程中可以随时查看当前扇区的十六进制内容。
我记得有一次,客户的硬盘有大量坏道,用dd命令拷贝到一半就卡死了。换成WinHex,设置“跳过坏道”后,虽然花了很长时间,但最终还是成功制作了镜像。
4.4 镜像验证与存储
镜像做完了,不代表就万事大吉了。你还需要验证镜像是否完整可用。
4.4.1 验证方法
| 方法 | 命令/操作 | 说明 |
|---|---|---|
| 哈希校验 | md5sum 镜像文件 |
对比原始硬盘和镜像文件的哈希值 |
| 挂载测试 | losetup + mount |
将镜像文件挂载为回环设备,检查分区是否可读 |
| 扇区对比 | cmp /dev/sda 镜像文件 |
逐字节对比(耗时较长) |
4.4.2 存储建议
- 不要放在源硬盘上:这还用说吗?万一源硬盘彻底挂了,镜像也跟着完蛋。
- 使用压缩存储:如果镜像文件太大,可以用
gzip或7z压缩。但注意,压缩后无法直接挂载,需要先解压。 - 保留两份副本:一份放在本地,一份放在外置硬盘或NAS上。我个人的习惯是,重要的镜像还会刻录到蓝光光盘上保存。
4.5 核心逻辑:镜像制作流程
下面这张图展示了从原始硬盘到镜像文件的完整流程,以及后续的验证和存储环节:
这张图把整个流程串起来了。你可以看到,无论选择dd还是WinHex,最终都要落到“验证”和“存储”这两个环节上。很多人做完镜像就扔一边了,结果要用的时候才发现文件损坏了——嗯,那才是最让人崩溃的。
4.6 本章小结
全盘镜像是分区表修复的“安全网”。没有它,你就是在裸奔。我个人习惯在每次修复前都做镜像,哪怕只是改一个字节。因为“万一”这个词,在数据恢复领域从来不是玩笑。
记住:镜像不是备份,镜像是你最后的退路。花几个小时做镜像,总比花几天做数据恢复要划算得多。