
1. 格式化之后文件到底还在不在先抛一个我这些年被问得最多的问题硬盘手滑格了照片还能回来吗。答案取决于“格”这个动作到底做了什么。绝大多数人做的所谓格式化是快速格式化它既不清零也不逐扇区擦除它干的事情非常克制——把文件系统用来记账的那张表重新写一遍。你可以把硬盘想象成一个巨大的仓库文件系统FAT32、NTFS、exFAT、ext4 之类是仓库管理员的台账里面记着“第 1024 号货架到 1087 号货架放着一份 3.2MB 的文件名字叫某某”。快速格式化就是把台账撕掉换成一本新的空白台账货架上的东西一个没动。这就意味着只要你不往那些货架上继续堆新东西原来的数据在物理介质上仍然完整地躺着。PhotoRec这类数据恢复工具本质上就是绕过那本被撕掉的台账直接跑到货架区按“物品的形状特征”把东西认出来搬走。它不看文件名不看目录结构甚至不看文件系统本身——这一点非常关键也是它能在“台账被彻底换掉”的情况下还能干活的原因。也正因为如此它恢复出来的东西一律叫 f1234567.jpg 这种编号名目录结构全丢这是它的设计代价不是 bug。适合读这篇的人分三类第一类是刚把移动硬盘格式化了、正处在“还有没有救”焦虑里的普通用户第二类是经常要帮同事朋友处理误删误格盘的运维或 IT 支持第三类是想搞明白文件雕刻file carving这套底层思路的技术爱好者。不管你是哪一类先把一个认知钉死恢复的前提是“没被覆盖”其余所有技巧都是在这个前提之下做的优化。理解了这句话后面所有操作你都能自己想明白为什么。2. PhotoRec 的工作机制拆解2.1 签名雕刻不靠账本靠长相认人PhotoRec 的核心技术叫文件签名雕刻signature-based carving。每种文件格式在文件开头都有相对固定的字节序列业内叫 magic number 或文件头签名。比如 JPEG 图片通常以FF D8 FF开头以FF D9结尾PNG 固定以89 50 4E 47 0D 0A 1A 0A这八个字节起手PDF 以%PDF-开头ZIP 及其派生格式docx、xlsx、jar、apk都以50 4B 03 04起始。PhotoRec 干的事情就是拿着这些签名清单把整块磁盘按字节扫一遍一旦在某个位置匹配上某个签名就认为“这里可能是一个文件的起点”然后按照该格式的头部结构去推算文件长度或者一路往后找结束标记匹配上了就截取出来写成新文件。整个过程完全不需要读取文件系统的元数据所以哪怕分区表被删、文件系统损坏、甚至是相机存储卡被误格式化它照样能工作。这套方法的优点很明显不依赖任何登记信息抗“账本丢失”能力极强。缺点同样明显而且必须在动手前就知道不认碎片如果文件在磁盘上是分散存放的签名雕刻往往只能救回第一段后面的内容错位结果是打不开的损坏文件。不认名字和路径恢复出来全是编号文件几万张照片混在一起后期整理的工作量可能比恢复本身还大。会出现误判某段随机数据恰好撞上了某个签名就会产生一个体积很小的垃圾文件。这是正常现象不是软件出问题。会重复同一份文件在不同扫描阶段被识别两次或者文件内部的缩略图被当成独立 JPEG 抠出来这两种情况都很常见。2.2 为什么它压根不关心文件系统类型很多人卡在“选择文件系统类型”这一步以为自己选错了就全盘皆输。实际上 PhotoRec 里那个 ext2/ext3/ext4、FAT/NTFS、exFAT 的选项主要影响的是扫描范围的计算方式而不是识别逻辑本身。它选择“空余空间”模式时需要知道这块盘上哪些块是文件系统认为“未使用”的这个判断依赖文件系统结构选“整个分区”时它就是老老实实从头到尾线性扫。所以实操上的判断标准很简单如果你只是删了几个文件或者刚格式化盘上其他数据还多优先选空余空间速度快命中率高误报少如果分区表都没了、文件系统结构彻底烂掉那就只能选整个分区慢但覆盖面最全。选错文件系统类型的后果通常是“扫描范围判断不准”或者“扫描过程中报错退出”而不是“一个文件都恢复不出来”这一点别自己吓自己。2.3 和 TestDisk 的分工一个修账本一个捡东西这两个工具出自同一个开源项目经常一起出现但定位完全不同很多人第一次用会搞混。TestDisk 修的是账本重建分区表、修复引导扇区、恢复被删的分区、修复 FAT 表和 NTFS 引导记录。它的思路是“让原来的文件系统重新变得可读”。PhotoRec 捡的是货不管账本直接把数据块按签名抠出来。实操中的顺序应该是先 TestDisk 尝试修复分区结构如果修好了、盘能正常挂载读出来那恭喜直接拷贝文件就行恢复出来的文件名目录结构都是原样的这是最理想的结果。只有当分区结构彻底救不回来、或者文件系统损坏严重到无法挂载时才轮到 PhotoRec 上场。我见过不少人反过来操作先跑 PhotoRec扫了六个小时拿出十万个编号文件结果发现其实 TestDisk 三分钟就能把分区表修好——这种冤枉路完全没必要走。2.4 它的能力边界要提前说清楚PhotoRec 支持的文件类型有几百种覆盖了绝大多数常见图片、视频、文档、压缩包和一部分数据库文件格式但它对固态硬盘的 TRIM 机制基本无能为力。现代 SSD 在删除文件后会主动把对应块标记为空并做擦除数据在物理层面就没了这时候任何软件恢复都是徒劳。同理手机上的闪存介质普遍带 TRIM 和加密恢复成功率远低于机械硬盘。另一个边界是加密卷。如果原盘做了全盘加密或者文件本身是加密的PhotoRec 抠出来的就是一堆密文签名也匹配不上扫描结果会非常难看。所以动手之前先想清楚介质类型和加密状态比扫描六个小时更有价值。3. 动手之前的准备决定成败的几个动作3.1 第一条铁律立刻停止一切写入这是所有操作里唯一不能妥协的一条。发现数据丢失的那一刻第一反应应该是拔掉或者断电源而不是“我先装个恢复软件试试”。下载软件、解压、安装这个过程本身就在往磁盘里写东西而恢复软件动辄几百 MB正好压在被删文件原来占的位置上那就彻底没救了。如果丢失的是系统盘更稳妥的做法是直接关机把硬盘拆下来挂到另一台机器上做从盘。如果没有条件拆盘那至少做到不要在丢失数据的盘上安装任何东西不要在浏览器里缓存大文件关掉系统的自动更新和索引服务因为 Windows 的搜索索引、缩略图缓存、休眠文件都会在你不知道的时候往空闲空间里写东西。我把这条经验总结成一句话贴在工位上恢复的成功率在按下删除键之后的十分钟内就已经决定了大半。3.2 第二条铁律目标盘必须是另一块物理盘PhotoRec 会问你“恢复出来的文件放哪里”这一步如果填了源盘自己的路径那么恢复出来的每一批文件都会覆盖掉还没扫到的待恢复数据形成自我毁灭式的循环。我见过最典型的事故是用户把恢复目录设成了源盘的根目录下一个新建文件夹扫描到一半几十 GB 的结果文件把原本还有救的区域全填满了。正确做法是准备一块容量足够的独立硬盘或者大容量 U 盘容量估算按“源盘已用空间 × 1.2”来留因为抠出来的文件会丢失压缩比优势和元数据体积往往比原目录更大。如果只是恢复几百张照片一个 64GB 的 U 盘就够如果整盘恢复最好准备一块和源盘同容量的空盘。这一点上抠门是会付出代价的。3.3 介质形态决定你用哪个版本的软件PhotoRec 有三种运行形态选哪个取决于你的实际情况形态适用场景优点需要注意图形界面版桌面系统下操作普通用户有菜单引导步骤直观需要系统能正常启动命令行版服务器、无图形环境、批量任务参数可控可脚本化需要记参数独立启动镜像系统盘损坏、无法进系统不依赖本地系统写入需要另做启动介质系统还能正常开机的时候图形界面版完全够用按菜单点下去就行。如果丢数据的就是系统盘本身那就必须做启动介质从外部环境运行否则你每开机一次都在往这块盘上写日志和临时文件。3.4 有条件的话先做镜像再扫描这一步很多人跳过但它是专业做法和业余做法的分水岭。对整块盘做一份只读镜像之后所有扫描、实验、反复尝试全在镜像上进行源盘只读一次风险归零。工具上常用的是 ddrescue 这类专门为坏道盘设计的镜像工具它会记录进度、跳过坏道、支持断点续传。# 查看磁盘列表确认源盘和目标盘的设备名别搞反 lsblk # 把源盘整盘镜像到独立的目标盘文件-n 跳过已复制部分-r3 重试3次 ddrescue -n -r3 /dev/sdb /mnt/backup/disk.img /mnt/backup/disk.map提示源盘和目标盘必须反复确认设备名/dev/sdb 和 /dev/sdc 搞反一次源盘就变成被覆盖的那个了。做镜像之前把其它无关存储设备全部拔掉是降低误操作概率最有效的办法。对一块有坏道的盘来说直接拿 PhotoRec 生扫还有个隐患遇到读取错误它会卡住或者跳过而 ddrescue 会把坏道区域标记出来让你知道哪些范围的恢复结果天然不可靠。这属于进阶做法普通用户不必强求但值得知道有这么条路。4. 完整实操流程从启动到文件落地4.1 启动与权限命令行版本需要 root 或管理员权限因为它要直接读取块设备普通权限下看不到/dev/sdX这种裸设备。图形界面版在 Linux 上通常也是用 sudo 启动在 Windows 上则以管理员身份运行。这一步如果报“权限不足”或者列出的磁盘列表是空的先检查权限不用怀疑软件坏了。4.2 选择磁盘认清你要扫的是哪一块启动后会列出所有可识别的磁盘包括移动硬盘、U 盘、存储卡读卡器甚至包括你的系统盘。这里最容易出的错是选成大容量移动硬盘里的小分区或者误选系统盘。判断技巧是看容量和型号对不上就退回上一步重新看。如果读卡器没被识别出来换一个 USB 口或者换一台机器再试有些廉价读卡器在裸设备读取模式下会不稳定。4.3 分区表类型怎么选接着会让你选分区表类型通常只有两个选项Intel对应 MBR和 EFI GPT。判断方法很朴素2010 年之后出厂的电脑、容量超过 2TB 的硬盘基本都是 GPT老式 U 盘和小容量存储卡多是 MBR。拿不准的时候选完如果下一步能看到正确的分区列表说明选对了如果提示“没有找到分区”或者列出来的分区明显不对就退回去换另一个。这里补一个细节如果分区表本身已经损坏两个选项都看不到分区那就不要纠结了直接选“No partition”或者在整个磁盘层面扫描相当于放弃分区边界全盘线性扫。这种做法速度最慢但覆盖面最广是分区表彻底完蛋时的唯一出路。4.4 分区选择与“整个磁盘”的取舍能看到分区列表时会给你两个方向选具体某个分区或者选“Whole disk”整盘。只有丢失数据集中在一个分区时才选那个分区扫描范围小、速度快、误报少。如果连自己都记不清数据在哪个分区或者分区结构已经被重建过选整盘更稳。我在实际工作中倾向于能定位到分区就一定定位到分区。一块 4TB 的盘整盘扫描按每分钟几百 MB 的速度算跑十几个小时很正常锁定到一个 500GB 的分区时间能压缩到两三成。而且整盘扫描会把其他分区的数据也一起抠出来后期整理成本成倍上升。4.5 文件系统类型的实际影响前面说过这个选项主要影响“空余空间”的计算。选 FAT/NTFS 用于 Windows 系的分区和绝大多数 U 盘、存储卡选 ext2/ext3/ext4 用于 Linux 分区exFAT 常见于大容量移动硬盘和相机存储卡如果是 macOS 常用的那套格式也有对应选项。实在不确定可以先选一个跑几分钟看扫描速度是否正常、有没有大量报错不正常就中断换一个。注意这里选错不会毁数据只是可能扫不全或者中途报错。别把它当成一道生死题试错成本很低。4.6 Free space 与 Whole 的取舍逻辑这是整个流程里最需要动脑子的一步。**Free space空余空间**只扫描文件系统标记为“未使用”的区域。适合刚删文件、刚格式化的场景此时原数据都还在空闲区里扫描速度快恢复出来的文件几乎都是真货。缺点是如果分区已经被写入过新数据或者文件系统结构损坏导致空闲区判断错误就会漏。**Whole整个分区**从分区第一个字节扫到最后一个字节。适合文件系统彻底损坏、或者你不确定之前有没有做过写入的情况。缺点是极慢而且会把现存的正常文件也一起抠一遍产生海量重复。判断法则我给你一条格式化之后如果自己又往里拷过东西选 Whole格式化之后立刻断电没再动过选 Free space。拿不准就选 Whole多花时间总比少救东西强。4.7 输出目录的设置要点输出目录必须落在另一块物理盘上这条前面强调过这里说三个执行细节。第一路径里不要有中文和空格某些版本对非 ASCII 路径处理不干净容易写到一半失败。第二留足空间PhotoRec 会按recup_dir.1、recup_dir.2这样的方式分目录存放每个目录默认装 500 个文件就换下一个所以最终会有几十上百个目录这是正常设计不要惊讶。第三输出盘的文件系统建议用 NTFS 或 exFAT避免 FAT32 的 4GB 单文件上限把大视频截断。4.8 扫描过程中的观察与中断开始扫描后界面会滚动显示已恢复的文件数、当前扫描位置和耗时。判断是否正常有两个观察点文件计数是否在稳步增长以及是否频繁出现读取错误。前者说明扫描在工作后者说明介质可能有物理问题这时候要考虑先做镜像。扫描可以随时中断已经恢复出来的文件是完整的不会因为中断而损坏。所以实操策略是先让它跑半小时看看恢复出来的文件质量如何、是不是自己想要的东西再决定要不要让它跑完全程。我经常用这个办法做快速验证——半小时就能判断这块盘值不值得花十个小时。5. 文件类型勾选策略越少越快越全越慢PhotoRec 默认会勾选一大批文件类型。这个默认值的设计思路是“尽量不漏”但代价是扫描速度和误报率。实际上绝大多数人的需求很具体要么找照片要么找视频要么找文档。把不需要的类型全部取消勾选速度能提升好几倍。常见需求建议勾选说明相机卡照片丢失jpg、heic、raw 类、png、tif相机卡基本只有图像勾视频是浪费时间手机照片视频jpg、heic、mp4、mov注意 heic 和 mov 的识别率受版本影响办公文档docx、xlsx、pptx、pdf、txtOffice 新格式本质是 zip 容器签名识别有交叉代码与文本txt、c、h、py、md 等文本类误报率最高会产生大量碎片文件整盘长期归档全选慢但覆盖面最广适合不确定内容的场景这里有个容易被忽略的坑docx 和 xlsx 的签名和 zip 完全一样所以它们经常互相误判恢复出来的 docx 打开报错、改成 zip 后缀却能解开这不是文件坏了是扩展名标错了。遇到这种情况用文件头判断真实类型再改后缀就行。另一个经验是文本类文件的取舍。纯文本没有可靠的结束标记PhotoRec 只能按“遇到不可打印字符就截断”的方式处理结果就是一篇长文被切成几十个碎片而且误报极多——任何一段二进制数据里出现连续可打印字符都会被识别成 txt。如果你的目标只是找回几张照片务必把 txt 类关掉否则结果目录里会被几十万个垃圾文件淹没。6. 命令行参数化把重复劳动变成一条命令6.1 常用参数速查图形界面适合一次性操作真正高频使用还是命令行高效。核心参数不多参数含义典型取值/d指定输出目录/mnt/backup/recover/cmd指定源设备跳过交互/dev/sdb/log生成日志文件配合/d使用/sig只扫描指定签名集合需配合自定义签名文件/fileopt控制文件类型勾选见下文/debug输出调试信息排查异常时用6.2 一条可以直接抄的命令下面这条是我处理“整块移动硬盘被格式化”场景时常用的模板含义是扫描整盘、只找图片和视频、结果写到独立备份盘、同时记录日志。# whole 表示整盘扫描/d 指定输出目录/log 记录过程 sudo photorec /log /d /mnt/backup/recover /cmd /dev/sdb whole,options,paranoid如果只想筛特定类型用/fileopt配合类型开关形如jpeg,enable表示只启用 JPEG其余关闭。类型名称在交互界面的列表里能看到照抄即可。批量处理多块盘时把设备名和输出目录做成变量写进脚本一次跑完比一块一块点菜单省事得多。提示命令行跑之前先用lsblk或磁盘管理工具确认设备名。脚本化最大的风险不是参数写错而是设备名写错一条命令下去扫错盘、写错盘后果不可逆。6.3 自定义签名给冷门格式开个后门PhotoRec 的签名库是纯文本文件格式非常直白一行描述一个类型包含扩展名、最大长度、文件头字节、文件尾字节。如果某种小众格式不在内置清单里理论上可以自己加。做法是找到该格式的规范文档确认头部魔数和尾标记按文件里的既有格式照葫芦画瓢。# 自定义签名示例结构伪代码字段含义见官方文档 # 扩展名 头偏移 头字节 尾标记 最大长度 myfmt 0 0x4D5A ... 1048576我不建议新手碰这个因为签名偏移算错会导致大量误报而且一旦写坏了会影响所有扫描。但它值得知道这意味着文件雕刻这套方法本身是开放的遇到专业设备产生的私有格式不是完全没辙只是需要额外投入。7. 结果整理真正耗时间的活儿在这7.1 先看懂 recup_dir 的结构扫描结束后输出目录下会是一堆recup_dir.1到recup_dir.N的文件夹每个里面装着最多 500 个以f开头加数字编号加上扩展名的文件。同时还会生成一个report.xml之类的报告文件记录了每个文件的原始偏移位置和识别到的类型。这份报告别删它是后面判断文件来源的唯一线索。面对几万个文件第一步不是逐个打开看而是按扩展名分组统计先看构成。# 统计各扩展名文件数量快速了解恢复结果构成 find /mnt/backup/recover -type f | sed s/.*\.// | sort | uniq -c | sort -rn # 找出所有体积为 0 或极小的文件这些基本都是误报可直接清理 find /mnt/backup/recover -type f -size -4k -delete7.2 用完整性判断哪些是真货编号文件里必然混着大量误报和残片。判断手段有三层第一层是文件头尾校验。很多格式自带结束标记比如 JPEG 应该以FFD9结尾如果恢复出来的文件尾部没有这个标记基本可以判定是被截断的残片打不开或者只能显示出上半截。用脚本批量检查头部和尾部字节能筛掉一大半垃圾。第二层是结构合法性检查。用对应的解析库尝试打开能正常读取元信息的留下报错的剔除。图片可以用图像处理库批量读取尺寸视频可以用媒体探测工具读取时长能读出时长说明容器结构是完整的。第三层是按体积排序人工抽查。通常最有价值的文件体积较大残片都很小。先看大的能快速判断恢复质量。7.3 重命名与归档的现实做法编号文件要还原成可用的东西最实用的路线是先按类型归档再按时间排序再靠缩略图人工筛选。图片类用支持缩略图预览的看图工具按目录浏览一屏几十张肉眼扫一遍比任何自动分类都快。文档类按体积排序打开前几个确认内容再批量改名。如果原盘里有大量重复文件同一个文件被复制过多次恢复结果里会出现多个内容相同的编号文件。用哈希值去重是标准做法但对几万个文件算哈希比较耗时可以先按体积分组只对体积相同的文件做哈希比对效率能提升一个数量级。这套流程走下来一个几万文件的结果集通常能在半天内整理出可用部分剩下的残片直接删掉别舍不得。8. 常见问题排查实录现象可能原因处理方式启动后磁盘列表里看不到目标盘权限不足、读卡器不被识别、接口问题提权重试换 USB 口或换读卡器检查磁盘管理中是否可见扫描进度极慢选了整盘模式、勾选了全部类型、介质有坏道缩小范围到分区精简类型先用镜像工具跳过坏道恢复出大量几 KB 的垃圾文件文本类签名误报、随机数据撞签名关闭 txt 类勾选按体积过滤删除恢复的图片只能显示一半文件碎片化、被截断无解碎片化是雕刻方法的天然短板可尝试换用其它工具交叉验证恢复的 docx 打不开实际是 zip 或 xlsx扩展名误标按文件头确认真实类型后改后缀扫描中途报错退出介质读取错误、输出盘空间不足检查输出盘剩余空间对坏道盘先做镜像输出目录写不进去目标盘只读、路径含特殊字符检查挂载权限改用纯英文短路径结果里全是重复文件整盘模式把现存文件也扫了一遍文件内含缩略图按体积分组后哈希去重关于“恢复的图片只有上半截”这个现象我再展开说一句因为问的人特别多。这不是软件失手而是碎片化导致的必然结果文件在磁盘上不是连续存放的PhotoRec 从文件头开始按长度往后读读到的是物理上相邻的内容如果文件后半段被存到了别的地方读出来的就是错位数据。有没有救只有一种情况有救——如果原文件系统结构还在、能通过元数据找到完整的簇链那就应该用 TestDisk 那套思路或者支持元数据解析的工具而不是靠签名雕刻。这也是我反复强调“先修账本再捡货”的原因。9. 影响成功率的变量与我的实操体会9.1 决定成败的几个变量把影响恢复成功率的因素排个序我的经验是这样的是否被覆盖 介质类型 丢失时长 扫描范围选择 类型勾选 后期整理。第一项是决定性的后面几项都是百分之几的优化。一块格式化后立刻断电的机械盘恢复率能到九成以上同样一块盘格式化后又往里拷了 200GB 新数据恢复率可能掉到两成以下而且救回来的多是些小文件。介质类型的影响也很直接。机械硬盘的数据是磁记录删除只是标记物理数据长期存在固态硬盘受 TRIM 影响删除后主控可能主动擦除尤其是支持 TRIM 且系统也开启了该功能的组合恢复窗口期极短。存储卡介于两者之间取决于卡本身的控制器策略。所以我在接到求助时第一句话永远是问什么盘、删了多久、中间有没有写东西。这三个答案基本决定了要不要花时间。9.2 碎片化和 RAW 恢复的天然局限签名雕刻这套方法有个绕不过去的天花板它对连续存放的文件效果好对碎片化的文件无能为力。而现实是一块用了很久的盘上稍大一点的文件几乎必然是碎片化的。这就是为什么很多人用 PhotoRec 恢复视频结果全是打不开的残片——视频动辄几个 GB跨越几百个不连续的块雕刻方法只能拿到开头那一段。明白这一点之后你就知道它的正确定位它是一个覆盖面广、不挑文件系统状态的兜底方案而不是万能方案。真正重要的大文件恢复如果原文件系统还有救优先考虑能解析元数据的工具如果文件系统彻底没了那也只能接受部分恢复的现实。我在实际工作中会把两种思路都跑一遍交叉比对结果往往能互补。9.3 我在实际操作中的几点体会第一个体会是先跑半小时验证别一上来就全量跑。这个习惯帮我省了无数个小时。半小时的样本足以判断介质状态、文件质量、参数是否合理如果样本里全是垃圾碎片那再跑十个小时也不会变出好东西及时止损换方案才是对的。第二个体会是恢复目录的整理比恢复本身更花时间。几万个编号文件摆在面前人的耐心是有限的。所以我现在的做法是恢复一结束就立刻按类型分组、按体积排序、删掉小于阈值的残片先把结果压缩到几百个候选再开始看内容。这个预处理流程走完效率能提升十倍以上。第三个体会是关于心态的数据恢复是有失败率的别承诺“一定能恢复”。哪怕所有条件都理想也有救不回来的情况。真正专业的做法是提前做备份而不是事后指望工具。我见过太多人在数据丢了之后才开始研究备份方案这个顺序反了。三份副本、两种介质、一份异地这套老掉牙的原则之所以被反复讲是因为它真的管用。最后一个细节关于频繁使用的场景如果你经常要帮别人处理这类问题提前准备一个装好工具的可启动 U 盘里面放上镜像工具、恢复工具、校验脚本和一份简单的操作清单。真出事的时候从关机到开始扫描能压缩到五分钟以内这五分钟往往就是能不能救回来的分界线。等到手忙脚乱地找软件、下载、解压最好的时间窗口已经过去了。