TestDisk可修复误删的分区表但不能恢复被覆盖的数据;需手动安装、sudo运行、目标盘须未挂载;扫描后须预览验证再写回,且写完需partprobe或重启,GPT备份头丢失或反复格式化时需谨慎选择结果。

TestDisk 能恢复误删的分区表,但不能找回被覆盖的数据;它只修复分区结构,不恢复文件内容。
testdisk 命令无法启动或报错 command not found
多数 Linux 发行版默认不预装 testdisk,需手动安装。Debian/Ubuntu 用 sudo apt install testdisk,RHEL/CentOS/Fedora 用 sudo dnf install testdisk(旧版用 yum)。注意:不要用 snap 或 flatpak 安装,它们常因设备权限限制无法访问原始磁盘。
- 运行前必须用
sudo,否则testdisk连磁盘列表都读不到 - 别在挂载状态的磁盘上操作,先用
lsblk和mount确认目标盘(如/dev/sdb)未被挂载 - 某些云服务器或容器环境禁用 raw 设备访问,
testdisk直接退出且无提示
用 testdisk 扫描并写回分区表的关键步骤
启动 testdisk /dev/sdb 后,选 Intel(常见 MBR/GPT)、Proceed、Analyze。此时它会尝试定位旧分区——不是立刻按 Write,而是先 Quick Search,若失败再 Deeper Search。
-
Deeper Search可能耗时几十分钟,尤其大容量盘;期间别中断,否则可能写入错误的分区头 - 找到分区后,用方向键高亮它,按
P预览是否能列出文件(验证识别正确性),再按Enter选中 - 确认无误后按
Write,它会把分区表写回磁盘第一个扇区;写完必须重启,否则内核仍按旧分区缓存工作
恢复后系统无法启动或分区不显示
写回分区表 ≠ 系统自动识别新分区。常见原因是:内核未重读分区表、文件系统损坏、或 GRUB 引导信息丢失。
- 写完立即执行
sudo partprobe /dev/sdb,强制内核重新读取分区表;若报错“device is busy”,说明有进程正在访问该盘 - 即使分区可见,
lsblk显示FSTYPE为空,大概率是文件系统超级块损坏,需用e2fsck -f /dev/sdb1(ext4)或ntfsfix /dev/sdb1(NTFS)修复 - 如果是系统盘,恢复分区后通常仍无法启动——
testdisk不修复/boot或GRUB,得进 live 环境重装引导
真正麻烦的是 GPT 磁盘的备份头丢失,或者分区被反复格式化过;这时候 testdisk 的 Deeper Search 可能返回多个相似结果,选错一个就彻底写坏。别靠猜,用 P 键逐个预览目录结构,找那个有你熟悉路径和文件名的。

















