☰
用TestDisk修复MBR/GPT分区表:从RAW分区到数据恢复的完整指南
2026/10/13 10:33:40 网站建设 项目流程

简介:TestDisk是一款开源数据恢复工具,主要用于修复受损的分区表、找回丢失分区并让无法启动的磁盘重新可用。其支持FAT、NTFS、ext2/ext3/ext4、LVM等常见文件系统,适用于因误删除、病毒攻击、分区格式化等原因造成的数据丢失场景。压缩包内包含TestDisk及相关组件的可执行文件与文档,共16个文件,包体仅7.18MB。除核心的testdisk_static外,还包含photorec_static、fidentify_static等静态编译程序,以及对应的8号手册页、README.md、版本信息和许可证说明,便于用户在Windows、Linux或macOS的应急环境中直接运行,无需额外安装依赖。压缩包体积小巧,适合放入U盘作为随身恢复工具。目前已有593人学习,适合有一定命令行基础、需要自行处理硬盘分区故障的中高级用户。借助附带的文档、更新日志与网页说明,读者可以快速掌握扫描分区、重建分区表、恢复文件等操作思路,降低数据二次损伤风险。

1. TestDisk:一块裸盘如何把“攒了三年的照片”救回来

TestDisk 最常见的出场方式,是移动硬盘插上电脑后,磁盘管理里整块盘变成“未分配”,双击任何盘符都提示“未格式化”。这个画面一出现,多数人的第一反应是点“格式化”,或者下个一键修复软件让它自己动——而绝大多数二次损坏就是这么来的。TestDisk 做的事情不是“找文件”,而是重建盘的分区骨架:修复被清零的 MBR/GPT 分区表、损坏的引导扇区,让操作系统重新认出一块盘原本的结构。它适合能接受命令行的开发者和运维人员,也适合手里只有一份数据、不敢乱点的普通用户——前提是愿意严格按顺序操作:先诊断,再镜像,最后才动手修。这篇文章就按照这个顺序,把每一步说透。

2. 动手前的三道判断题:写保护、分区表类型与备份路径

2.1 为什么“什么都不做”往往是数据恢复的第一步

接到“数据丢了”的求助,我第一句话永远是:从发现异常到现在,你做了什么?答案往往令人心疼——有人点了“格式化”确认框,有人让某管家软件来了一轮“修复”,还有人眼睁睁看着系统自动弹了 chkdsk 并点了确认。这三个动作,每一项都在往盘上写数据。而 TestDisk 这类工具发挥作用的前提,是盘上的分区结构和文件系统元数据仍然可被识别;一旦被覆盖,恢复的难度会成倍上升。

所以要养成一个习惯:只要一块盘表现异常——打不开、变 RAW、未分配、容量显示不对——先断电、卸载、拔盘,把它放到一边,然后找另一块地方做镜像。这里的“写入”指的不只是拷贝文件:格式化、文件系统检查、磁盘修复工具、杀毒扫描,甚至 Windows 自动挂载后写入的日志文件,都属于写操作。数据恢复的第一原则是“先别修”,不是“快点修”。

另外要区分两种损毁:物理坏道和逻辑损坏。如果盘有异响、SMART 报告大量重定位扇区,或者通电后系统卡顿明显,优先做镜像再操作;如果只是掉电、拔盘、分区表丢失这类逻辑问题,TestDisk 可以直接上。物理问题硬跑软件,往往会把残存的数据区域进一步刮花。

2.2 判断分区表类型:MBR 还是 GPT,决定操作走向

TestDisk 在操作前会询问分区表类型:Intel(对应 MBR)、EFI GPT、Mac、Sun 等。选择错误,扫描结果就是一大堆乱码,相当于在错误的坐标系里找坐标。所以在运行 TestDisk 之前,先用系统自带的只读命令做一个无损诊断。

# 查看 /dev/sdb 这个未分配盘上,内核还能识别到什么 sudo lsblk --output NAME,SIZE,FSTYPE,PARTTYPE,PTTYPE /dev/sdb # 用 parted 以机器可读方式打印分区表,注意它不会写入 sudo parted /dev/sdb unit s print

这两条命令都只在内存里读盘,不写入任何数据。lsblk 输出里如果没有任何 p1、p2 之类的子设备,说明内核没能读出分区表;如果 PARTTYPE 一栏为空则更直观。用parted print能看到分区表类型(msdos 就是 MBR,gpt 就是 GPT)以及分区起始扇区、大小是否正常。

这里的关键判断依据是容量和固件特征:超过 2TB 的盘基本是 GPT;有些 2TB 内的盘也可能是 GPT。GPT 盘还有个特性——盘尾有一个备份 GPT 头,MBR 没有。如果损坏的是主 GPT 头,备份头常常还活着,这是后面第 4 章会用到的重要后手。而对 MBR 盘来说,它的四个主分区描述就固定在 512 字节引导区结尾处,整个分区表没了的话,只能靠扫描去找文件系统特征。

2.3 镜像备份:用 dd 给磁盘做一层“后悔药”

无论你的判断多么确定,只要这块盘是你唯一的数据副本,我都建议先做整盘镜像。镜像就是把源盘的每个扇区按位复制到一个大文件里,之后所有有风险的尝试都先对着镜像做,原盘保持不动。

# 源盘是 /dev/sdb,镜像写到 /mnt/backup 下的文件 # 注意:目标位置必须在另一块物理盘上,绝不能是源盘本身 sudo dd if=/dev/sdb of=/mnt/backup/sdb-20240401.img bs=4M conv=sync,noerror status=progress

参数含义:if=指定源盘,of=指定镜像文件路径,这两个写反的人每年都有,结果就是把空文件写回源盘,操作前默念三遍;bs=4M每次读写 4MB,兼顾速度和内存占用,太小会慢,太大会增加内存压力;conv=sync,noerror是这命令的灵魂——遇到读错误时,用填充数据补足该块长度,保证镜像里每个扇区的偏移和原盘严格对齐;status=progress显示进度和速率。机械盘做整盘镜像的速度一般在 100MB/s 量级,1TB 盘跑两三个小时,属于正常。

镜像做完后,可以先用只读方式挂载镜像,验证内部结构是否符合预期:

# 查看镜像里是否有可识别的分区结构 sudo fdisk -l /mnt/backup/sdb-20240401.img # 用 loop 设备把镜像当作块设备挂载 sudo losetup -Pf /mnt/backup/sdb-20240401.img sudo lsblk /dev/loop0 # 以只读方式挂载镜像的第一个分区,切忌去掉 -o ro sudo mount -o ro /dev/loop0p1 /mnt/test

losetup -P会为镜像文件模拟分区表结构,生成 loop0p1、loop0p2 等子设备;mount -o ro锁定只读,这个习惯能避免验证过程中不小心写入。如果这一步就能看到文件,说明分区表问题不大,后面操作会轻松很多;如果挂载失败,才轮到 TestDisk 出场。镜像文件建议保留到所有恢复工作结束、用户确认数据完整之后,再考虑删除。

3. 用 TestDisk 重建 MBR 分区表:一次典型分区丢失的完整操作

3.1 启动、磁盘选择与分区表类型:看懂 TestDisk 的交互界面

TestDisk 是典型的终端界面程序,用方向键和回车操作,不是鼠标窗口。但它有个好处:每一步都有明确提示,不怕误按。启动方式取决于你所在的系统环境。

# Linux 下直接指定目标盘启动 sudo testdisk /dev/sdb # 如果是 macOS,注意不要把盘符写错,常见如 /dev/disk2 # 先用 diskutil list 确认目标盘编号再启动

启动后第一个选择是日志模式:Create 创建新日志,Append 追加旧日志,No Log 不写日志。我一般选 Create——它会把你后续每个按键、每个扫描结果都记录进日志文件,出问题时可以通过日志回溯操作过程。这个日志文件生成在程序当前目录,留意路径,之后把它存到安全位置。

接下来选中目标盘,然后是最关键的一步:分区表类型。Intel 对应 MBR,EFI GPT 对应 GPT。判断依据来自第 2 章的诊断:2TB 以上盘、之前看到过 GPT 字样、或者是 UEFI 引导的环境,都优先选 EFI GPT。选错会出现什么?你会在一个 GPT 盘上按照 MBR 的规则找四个主分区描述,扫出来的东西全是碎片和误报。拿不准的时候,两种类型各扫一遍,配合 P 键预览文件内容来判断,而不是盯着一堆绿字做法律鉴定。

这个界面的常用指法先说清楚:上下方向键移动高亮,左右方向键切换底部菜单,Enter 确认当前操作,Q 返回上一级或退出当前界面,P 在分区行上预览文件列表,方向键在预览窗口里滚动。记住这几个键,足够走完全流程。

3.2 Quick Search 与 Deeper Search:扫描策略与时间成本

进入 Analyse 后,TestDisk 会先显示“当前分区表状态”。如果显示The harddisk seems to contain a valid partition table,但盘仍然打不开,问题往往不在分区表而在引导扇区或文件系统,后面第 4 章再讲。如果显示Invalid partition或No partition found,才进入重建分区表流程。

Quick Search 是第一轮扫描。它按当前/常见偏移快速搜索主分区和逻辑分区,通常几分钟内出结果。扫到的分区行会标记状态,常见有[Data]、[NTFS]、[FAT]、[EFI GPT]等。此时先别急着高兴:每个候选分区,都按 P 键预览文件列表——能列出目录和文件名,这个候选基本就是真的;预览报错或乱码,则大概率是误报。

Quick Search 一无所获的常见原因有两个:分区表被格式化工具整体清零,或者磁盘曾经被重新分区过、旧的起始扇区信息被抹掉。这时进入 Deeper Search,它会把整块盘的每个磁道都当作可能的分区起点去匹配文件系统特征,扫描量完全不是一个量级——2TB 的机械盘跑四五个小时很常见。但它有个特点:前十几分钟就能判断出是否有有价值的候选出现。如果扫了一大半仍然空白,基本可以死心,不用等完。

Deeper Search 找到候选后,TestDisk 会问你是否保留这个分区。这里有个常见的细节:磁盘可能在历史上有过多次分区,Deeper Search 会把所有留过痕迹的都翻出来——包含已经被覆盖掉的旧版本。保留还是不保留,取决于这个分区对应的文件系统类型和起始扇区是否合理。

3.3 验证与 Write 写回:先证明内容可读,再让系统认识它

找到候选分区后,流程的次序是固定的:预览、确认、写回。任何一步没做好,都可能导致分区表再次写坏。

# 写回后,先不重启,用只读命令确认新分区表已被内核识别 sudo partprobe /dev/sdb sudo fdisk -l /dev/sdb

先按 P 预览,确认文件列表真实存在,再在分区行上按 Enter 确认选中;然后回到主菜单,选择 Write,输入y确认。TestDisk 在这里做的事情,只是把分区描述写入到 MBR 的固定区域——通常在 LBA0 的 4 个分区表项,不碰数据区。这也是它比很多“一键重建分区表”工具可靠的原因:写入范围极其有限,不会自主发挥。

写回前值得做的一件事:把 TestDisk 界面上显示的每个分区的 Start/End LBA 值记录下来。如果写回之后发现不对,你至少知道屏幕上曾经长什么样,能用来回溯。我见过有人写回后系统仍然不认盘,结果他根本说不清自己当时点了哪个候选分区——这等于把证据丢了。TestDisk 在写回时会在当前目录生成.bak文件,那是写回前的旧分区表快照,千万别删,它是后悔药。写回完成后先不要重启,按上面代码块里的命令确认内核已经能看到新分区表,再做下一步验证。

4. GPT、RAW 分区与引导扇区损坏:结构不同,操作也不同

4.1 GPT 损坏:让系统认出 EFI GPT 分区表

GPT 盘的损坏和 MBR 盘的损坏有一个本质区别:GPT 在盘尾存了一份完整的备份头,分区表项也可能有多份拷贝。所以 GPT 盘的修复路径更多,成功率往往也更高。

现象通常是二选一:一是系统把盘识别为“未初始化”,因为主 GPT 头所在的 LBA1 被清空了;二是盘能被识别,但里面的分区全不见了。启动 TestDisk 后选择 EFI GPT 类型,它会检测主 GPT 头和备份 GPT 头的状态。如果备份头完好,界面会提示可以从备份恢复,选择加载备份头即可重建整个分区表结构。

另一种情况是备份头也不在了,或头还在但分区表项区域损坏严重。此时 TestDisk 会尝试重新构建 GPT 头:它会像扫描 MBR 一样,根据扫描到的文件系统特征反推出分区边界,再生成一份新的 GPT 头和分区表项。按 P 预览时,能看到EFI system partition和Microsoft reserved partition这类字样,基本可以确认结构恢复正确。

这里有个容易踩的坑:GPT 盘的 LBA0 上有一份保护性 MBR(Protective MBR),它存在的意义是让老系统识别出“这块盘已被 GPT 占用”,从而阻止误分区。有些工具会把这个保护性 MBR 当成普通 MBR 来“修复”,结果把 GPT 盘的标志弄丢了,系统反而不认识它。所以看到msdos分区表出现在一个大容量 GPT 盘上,别急着动手,先确认保护性 MBR 和 GPT 头的关系。

4.2 分区变 RAW:重建引导扇区(Rebuild BS)

比分区表丢失更常见的故障,是分区表还在,但某个分区双击打开时提示“参数错误”或“此卷不包含可识别的文件系统”。在磁盘管理里看,这个分区的文件系统一栏显示为 RAW。很多人这时候以为是分区表坏了,但其实分区表项还在——坏的是分区开头的引导扇区(DBR),也就是操作系统寻找文件系统元数据位置的入口。

这种情况最适合用 TestDisk 的 Rebuild BS(Rebuild Boot Sector)功能。流程是:启动 TestDisk,选择正确的盘和分区表类型,进入 Analyse 后定位到那个显示为[RAW]或状态异常的分区行,选择重建引导扇区。TestDisk 会在两个位置寻找文件系统引导记录的标准结构:一个是分区开头,另一个是该文件系统内部预留的引导扇区副本。比如 NTFS 通常在分区中段存有 $Boot 的备份副本,分区开头的 DBR 损坏后,这个副本就是救命用的。

选择哪个副本,看 TestDisk 提示的匹配程度。重建完成后,它会显示新的引导扇区参数——包括每扇区字节数、簇大小、MFT 起始位置等。如果簇大小显示成奇怪的值,说明选错了副本,需要回退换另一个。写回后,分区通常就不再显示 RAW 了。要特别说明:Rebuild BS 只在 DBR 这一层做局部写入,它不会扫描数据区,也不会改动文件内容,风险比重建分区表还低一些。

4.3 分区找回来了但文件系统仍打不开:别急着在 RAW 上跑修复

分区表修好了,盘也认了,但双击进去文件夹打不开、提示“文件或目录损坏且无法读取”,这种情况也很常见。它说明问题深入到了文件系统元数据层,比如 NTFS 的 MFT 主文件表部分损坏。TestDisk 能做的有限,但它确实提供针对 NTFS MFT 的修复尝试:符合条件的场景下可选 MFT 修复功能,从 MFT 镜像区重建主文件表。能不能成功,取决于数据区还有多少可用的元数据碎片。

如果 MFT 修复不成功,我的习惯不是继续在原盘上反复折腾,而是回到镜像上做事。所谓“反复折腾”,是指把格式化、chkdsk /f、各种修复软件的“一键修复”挨个在原盘上跑——每跑一次都在改盘上的元数据,恢复成功的概率随之递减。

# 在镜像上挂载出分区,再对该分区做只读检查 sudo losetup -Pf /mnt/backup/sdb-20240401.img sudo fsck -n /dev/loop0p1 # 或者用 Windows 环境下的 chkdsk,但要附加 /f 之外只读判断参数 # 在副本上做修复,原盘永远保留一个未改动的版本

fsck -n表示只检查不写入,-n是“no changes”的意思,就算发现问题也只是报告而不会动手。哪怕确定要修,也先对镜像里的副本分区执行修复,原盘镜像继续保留。文件系统修复是有可能修出问题的,在副本上做,就相当于手里永远留着一张后悔药。如果只是想把资料抢救出来,还有一个更务实的做法:用 7-Zip 这类能直接打开镜像文件的工具,绕过文件系统挂载这层,把能读到的文件和目录直接拖出来。先保住数据,再谈修复。

5. TestDisk 数据恢复中的常见故障与避坑:从误判到二次损坏

5.1 现象:扫描出一堆“存在”的分区,绿字一片,真假难辨

原因:分区表被清零后,磁盘数据区里残留的文件系统特征会被扫描算法当成候选分区;尤其是一块盘历史上装过多个系统、分过多次区,旧痕迹全都会冒出来。这不是 TestDisk 的 bug,而是扫描的固有行为。

解决:不要凭分区大小和颜色判断真假,按 P 预览是唯一的验证标准。能列出文件夹树的是真候选,报错的是误报。同时结合起始扇区判断——现代系统的分区起始扇区基本是 2048 对齐;起始扇区为 63 的可能是老 MBR 时代的遗留,也可能是一个重要的真实分区。如果两个候选都声称是同一个分区的不同版本,比较它们预览出的文件时间戳,选新的那个。宁可少认一个候选,也不要写回一个错误的分区表。

5.2 现象:分区表写回成功,但系统仍然不认盘

原因:写回去的只是分区描述,但 MBR 里还有别的内容。最常见的是磁盘签名丢失——Windows 用这个签名识别“这块盘”,签名不对时它可能把盘当成“外部磁盘”或提示“动态磁盘”;另一个常见原因是分区没有被标记为活动分区(Active),引导型系统盘会因此无法启动;还有一种情况是分区起始偏移和 4K 扇区格式不匹配,系统能读到分区但容量显示错误。

解决:写回后用 512e 和 4K 两种扇区假设分别检查分区对齐情况;在 Windows 磁盘管理里检查“导入外部磁盘”——如果签名冲突,系统会提示你选择要导入的盘;确认活动分区标记:用 fdisk 查看启动标志,必要时手动设置。这里要插一句:分区表写回后系统立刻完美识别,是最理想的情况;如果没识别,不要紧接着再跑一轮重写,先停下来核对上述几个点。

5.3 现象:Deeper Search 卡在某个百分比,几个小时一动不动

原因:多数是物理坏道。扫描进程在反复重试某个无法读取的扇区,驱动层超时很久才返回错误,看起来就是卡死。少数情况是 USB 硬盘盒供电不足,或者硬盘休眠策略导致读写请求被挂起。

解决:先中止扫描。TestDisk 在扫描卡的扇区上硬等没有意义;中断后用dd重新做镜像,这次如果仍卡住,换ddrescue这类专门处理坏道的工具,它会把读不出来的区域记录下来继续往后扫,而不是死磕一个位置。镜像做完后,所有扫描和恢复操作都对着镜像进行。如果你发现盘插在不同接口上表现完全不同——比如插机箱后置 USB 就正常,插前置面板就卡——先怀疑供电,再怀疑盘。

5.4 现象:恢复出的分区能看到文件,但目录结构混乱、文件名异常

原因:有两种可能。一是这个候选分区不是“当前版本”的分区,而是 Deeper Search 从更深磁道挖出来的旧分区残留;二是该分区在历史上被格式化并重新写入新数据,文件系统元数据已经被部分覆盖,导致文件名和目录树对不上。

解决:先在 Deeper Scan 结果里找有没有其他候选版本,对比每个候选的起始时间和文件内容;确认有且仅有一个候选时,优先用文件级工具把目录结构直接拷贝出来,而不是继续在元数据上做修复。文件名乱、目录乱,但文件内容能打开,说明数据区还在;这时候最值钱的动作是导出数据,不是修复文件系统。修复元数据的本质是重建指针,而指针的原始值可能已经消失了,硬修只会反复翻车。

5.5 现象:把 TestDisk 当“文件恢复工具”用,发现删掉的文件根本找不回来

原因:这是对工具定位的最大误解。TestDisk 解决的是“分区不在、引导扇区坏掉”这类结构问题,它不管单个文件的恢复;删除文件后的恢复属于文件级雕刻,那是它的姊妹工具 PhotoRec 的职责——按文件签名在剩余空间里搜刮数据碎片。两者经常配合使用,但分工不同。

解决:先明确目标。分区整个不见了,优先用 TestDisk 找回分区结构;分区还在、但文件被删或被格式化,应该上 PhotoRec 做文件重建;如果分区丢失而且里面还有被格式化后再写入的数据,先用 TestDisk 找回分区,再用 PhotoRec 对数据区做二次扫描。删除重要文件后的第一动作永远是停止往同一块盘上写入,任何新文件都可能覆盖掉刚删除但尚未被真正抹去的数据——这一步做错,后续所有工具都无力回天。

6. 验证恢复成果:重启前的最后一道关卡

分区表写回、引导扇区重建之后,不要急着把盘装回机器让它“自己跑起来”。系统一启动就可能自动挂载、写入日志、做文件索引,这些动作又是在改盘。正确顺序是:验证、确认、封盘。

# 对恢复后的分区做只读挂载,统计文件数量与总大小 sudo mount -o ro /dev/sdb1 /mnt/recovered find /mnt/recovered -type f | wc -l du -sh /mnt/recovered # 取几份关键文件做抽查,确认文件大小与内容可读 ls -l /mnt/recovered/重要目录 | head -20

文件数量、目录层级、关键文件大小和可读性,这三项都确认无误后,才考虑把盘装回去用。如果人家告诉你“里面有一万个文件”,你恢复出来只有三四十个文件,先想清楚“文件去哪了”再宣布成功——这时候多数是选错了候选分区,或者恢复出的分区只是旧版本,重新回第 3 章的写回步骤,别不好意思。先别删镜像:我自己的习惯是镜像保留至少一周,确认用户在真实场景下打开过文件、确认数据完整后,才把它归档到冷备介质上。顺便把 TestDisk 写回时生成的.bak分区表文件改个名存进对象存储或另一块盘——哪天引导扇区再坏,用 TestDisk 加载它比重新扫描快得多。

最后说一条我自己的血泪经验:有次给朋友的移动硬盘恢复了分区,验证了好几个文件都正常,就放心让他拿走了。结果他插上 Windows 自动弹了个修复提示,顺手点了确认,盘又变回 RAW。数据没丢,但所有流程又得重走一遍。从那以后,但凡从我手里出去的恢复盘,我都反复叮嘱一句:恢复完成后第一时间做备份,备份完成前,不要点任何系统弹出来的“修复”和“格式化”提示。这句话比任何工具都能救数据,希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询