TestDisk PhotoRec 数据恢复实战:免费重建分区表 + 找回误删文件
2026/9/22 14:26:35 网站建设 项目流程

TestDisk & PhotoRec 数据恢复实战:免费重建分区表 + 找回误删文件

【免费下载链接】testdiskTestDisk & PhotoRec项目地址: https://gitcode.com/gh_mirrors/te/testdisk

TestDisk 负责修复损坏的分区表,PhotoRec 做文件级数据恢复,两者免费开源、互相配合。照本文操作一遍,你能独立修复一块丢失分区的磁盘,并把误删的照片从扇区里扫回来。

🔴 先立三条保命规矩

  1. 停写入

每多一次写入,原始数据被覆盖的概率就高一分。

  1. 换盘存

恢复到本盘会直接覆盖你还没救出来的数据。

  1. 留日志

出问题时有据可查,报问题时也能附上过程记录。

30 秒诊断:你的数据现在处于哪种状态

先对号入座,再决定动哪个工具:

症状判断对应工具
文件/文件夹消失了,分区还在、还能进索引被删,扇区里的原始数据通常还在PhotoRec
磁盘显示"未初始化",分区整体消失分区表损坏,容器结构丢了TestDisk
装双系统后引导失败,进不了原有系统引导扇区或分区结构被改动TestDisk
读取极慢、固定位置卡住、SMART 报坏道盘体有坏块,反复读盘会加速恶化ddrescue做镜像,再选上面任一

一句话决策:结构坏了找 TestDisk,内容丢了找 PhotoRec,两者可组合。

原理速览:为什么删了还能找回,坏了还能修

把磁盘想象成图书馆:分区表是书架旁的目录卡。目录卡烧了(分区表损坏),书还在架上——TestDisk 的工作是把目录重新排对,重新定位每个"书架"(分区)的起止位置并写回。PhotoRec 干脆不看目录卡,而是沿书架逐本核对书脊上的 ISBN,按文件头签名把"书"一本本捡出来,这就是 file carving。代价是书脊上没有登记处信息:恢复出的文件按类型丢进recup_dir.d这类子目录,原始文件名和目录结构没了,需要自己重新整理。

所以组合路径是:先用 TestDisk 修复结构,分区能挂载时大部分数据直接回来;仍然拿不到的部分,再交给 PhotoRec 做文件级扫描。

跟着走一遍:安装 + 第一次恢复

发行版直接装现成包,两个命令testdiskphotorec一起装上:

# Ubuntu / Debian sudo apt-get install testdisk
# Arch Linux sudo pacman -S testdisk
# macOS brew install testdisk

需要最新功能时从源码编译:

git clone https://gitcode.com/gh_mirrors/te/testdisk ./autogen.sh && ./configure && make && sudo make install

线路 A:重建丢失的分区表(TestDisk)

lsblkfdisk -l确认设备名,别选错盘。然后:

sudo testdisk /log /dev/sdb

/log生成日志文件。界面关键步骤:

  1. [Create]建立日志;
  2. 分区表类型选Intel,新系统/苹果选GPT
  3. Analyse进入分析,再选Quick Search
  4. 找到分区后核对起止位置与容量是否合理;
  5. P标记为 Primary;
  6. Write写回分区表,重启验证。

线路 B:从扇区里捞文件(PhotoRec)

sudo photorec /log /d /data/recovery /dev/sdb1

/d指定恢复文件的保存目录,必须指向另一块物理盘——这是最容易翻车的参数,写之前用df -h复核一遍。界面关键步骤:

  1. 选择要扫描的分区(或整盘);
  2. 文件系统类型不确定就选Other
  3. 确认保存位置在别的磁盘;
  4. Search开始扫描,Ctrl+C 可中途停止;
  5. 结束后到recup_dir.d等子目录按类型找文件。

参数速查 & 提速技巧

参数适用工具作用
/log两个都有生成日志文件,出问题必开
/logname 文件名两个都有指定日志文件名
/debug两个都有输出调试信息,报问题时附上
/d 目录PhotoRec指定恢复文件保存目录
/all两个都有跳过交互提示,按默认值执行
/listTestDisk列出系统识别到的所有磁盘
/cmd两个都有命令行模式,适合写脚本

提速与排错:

  • 只扫分区不扫整盘:交互界面里可以限定扫描范围,Quick Search比全盘扫描快得多,范围越精确越快。
  • 坏道盘先镜像再干活ddrescue /dev/sda /data/sda.img /data/sda.log,坏块会被跳过并记录进度,可中断续跑;之后所有操作对着.img做,原盘不再受任何写操作影响。
  • 日志常开/log几乎没有额外开销,但报问题时能完整交代扫描过程,省掉一半猜谜时间。

🚨 翻车现场自救

进度条卡在某个百分比不动

原因:扫描区域有坏道,或正在识别一个大文件。对策:先smartctl -a /dev/sda查盘体状态(需安装 smartmontools);有坏块就转 ddrescue 镜像流程;确认盘是健康的就耐心等,或 Ctrl+C 停掉改扫分区。

恢复出来的文件打不开、内容残缺

原因:原始数据已被新写入覆盖,或文件在盘上是碎片化存储、签名切割拼不完整。对策:发现丢失后第一时间操作;用df -h确认恢复目录在别的盘;恢复出的关键文件先逐个打开验证,能用的先归档。

SSD 上删了的数据找不回

原因:TRIM 会在删除后很快清零物理块,和机械盘"数据还在、只是索引没了"是两回事。对策:误删后立即停止对 SSD 的一切写入;cat /sys/block/sda/queue/discard_max_bytes非零说明 TRIM 生效,若触发过 TRIM,多数情况只能靠备份。

操作之后盘更糟了

原因:最常见的错误是把恢复目录放到了被恢复的盘上,扫描写入直接覆盖原始数据。对策:立刻df -h看目标目录挂在哪块物理盘;恢复目录必须独占另一块盘,没有空盘就先ddrescue整盘备份。

想改源码?看这里(简写)

src/目录的命名规律很直白:partgpt.cparti386.cpartmac.cpart*.c各管一种分区表格式,file_*.c每个文件对应一种文件类型的签名识别,diskacc.c是磁盘访问层,filegen.c是统一识别引擎。添加新格式三步:新建src/file_xxx.c实现文件头/尾检查函数 → 在filegen.c注册 → 加入src/Makefile.am编译列表。细节以项目最新文档为准。

行动备忘

  1. 停止对丢失磁盘的一切写入,能断电就断电
  2. lsblk确认设备名,判断是分区结构还是文件内容的问题
  3. 坏道盘先ddrescue做镜像,后续全部在镜像上操作
  4. 写盘前用df -h复核恢复目录在另一块物理磁盘
  5. 每次运行都带/log,保留日志
  6. 恢复完成先抽查关键文件能否正常打开,再整体归档
  7. 定期备份 + 季度导出一次分区表——备份永远排在任何恢复工具之前

【免费下载链接】testdiskTestDisk & PhotoRec项目地址: https://gitcode.com/gh_mirrors/te/testdisk

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

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

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

立即咨询