恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
数据恢复实战:用TestDisk与PhotoRec跨平台找回误删格式化文件
首页
资讯中心
/
数据恢复实战:用TestDisk与PhotoRec跨平台找回误删格式化文件
数据恢复实战:用TestDisk与PhotoRec跨平台找回误删格式化文件
发布时间:2026/10/12 8:24:16
数据丢失这件事我几乎每个月都要帮朋友处理一两起。最常见的情节是U盘里攒了几年的照片被误删移动硬盘在格式化前没有备份或者SD卡在相机里突然提示需要重新格式化。大多数人第一反应是心凉半截然后病急乱投医跑去网上找个所谓专业数据恢复软件结果花了几百块不说有的越恢复越糟糕。其实数据丢失后最该做的不是花钱而是冷静下来搞清楚恢复的底层逻辑然后用一套跨平台的开源工具按规矩操作。这篇文章我主要聊的就是这两款工具——TestDisk和PhotoRec它们能在Windows、Linux、macOS上帮你找回大部分文件顺便也会把我在实际恢复和排查中遇到的各种场景都摊开讲一讲。1. 数据是怎么丢的先搞懂文件系统删除的底牌很多人有一个根深蒂固的误解文件删除之后磁盘上的数据就没了。如果你也这么想那恢复数据的希望确实渺茫。但事实是绝大多数情况下数据只是看不见了物理上还躺在硬盘或者闪存里。1.1 删除不等于清零以最常见的NTFS和ext4文件系统为例删除一个文件时系统做的只是把文件在目录里的条目标记为已删除同时把对应的空间在分配表里标记为可用。文件内容本身也就是那些占空间的1和0一个字节都没动。只有在后续新数据写入时系统才会逐步覆盖这些被标记为可用的空间——而且覆盖也不是立刻全部发生是先覆盖靠前的部分。打个比方文件删除就像是图书馆里把某本书的索引卡片抽掉书还放在书架上。只要没有新书摆进来占掉它的位置这本书的内容就还在。数据恢复工具干的事情就是绕过索引卡片直接去书架上把这本书的内容读出来再重新建一张索引卡。这也是为什么我一直强调出事后立刻停止写入。你每往这块盘里拷贝一个新文件、安装一个程序甚至只是打开一个会自动生成临时文件的软件都是在往书架上放新书随时可能压在你那本还没拿走的书上。1.2 三种最常见的数据丢失场景在我接触的案例里数据丢失基本可以分为三大类每类的恢复难度和思路完全不同。第一类是误删和回收站清空。这是最好恢复的因为文件系统标记刚改完底层数据基本完整。用恢复工具扫一遍绝大多数都能找回来。第二类是误格式化或分区表损坏。格式化的时候系统会重建文件系统结构比如FAT表、MFT、inode表新建一个空书架。但你原来的书还在书架上堆着只是新的索引体系不知道它们的存在。分区表损坏就更简单了——分区表只是记录哪个分区从哪儿开始到哪儿结束它坏了相当于图书馆的楼层分布图丢了每层的书反而安然无恙。第三类是物理介质损坏。硬盘有坏道、U盘主控挂掉、存储芯片受损这类恢复难度陡增很多时候需要开盘、换磁头、读芯片普通工具无能为力。这篇文章主要覆盖前两类——事实上前两类恰恰占了日常数据丢失的九成以上。我遇到过一个特别典型的案例一位同事把移动硬盘分区删掉后重新格式化成了exFAT里面是半年的项目素材。他一度以为全完了后来用TestDisk直接找到了原来的分区表备份几分钟就恢复了分区文件一个没少。这类看起来严重、实际上可逆的丢失就是跨平台数据恢复工具最擅长的领域。2. 跨平台恢复工具怎么选TestDisk与PhotoRec的定位既然聊到了工具就得把TestDisk和PhotoRec这对姊妹工具的定位说清楚。很多人分不清它们俩有什么区别其实非常简单TestDisk管的是结构——恢复分区表、修复引导扇区、找回被删除的分区目标是让文件系统重新可见。PhotoRec管的是内容——不管文件系统结构是死是活直接扫描原始扇区通过文件特征签名把一个个文件抠出来。2.1 开源跨平台双件套这两款工具都由CGSecurity维护免费开源二进制包直接覆盖Windows、Linux、macOS、FreeBSD、Solaris等一堆平台。跨平台意味着什么意味着你在Windows笔记本上扫描完的盘可以拿到Linux服务器上继续操作意味着一台老掉牙的macBook也能跑起同样的恢复流程。对搞运维、搞嵌入式的人来说服务器上没图形界面也能用命令行完成全部操作这一点特别友好。我用TestDisk和PhotoRec干这行当快十年了说句公道话它们在大多数软故障场景下都能交出让人满意的答卷而且在永远不会对源盘做写操作这一点上比很多商业软件都做得更干净。2.2 和其他工具对比什么场景用什么市面上能叫得上名字的数据恢复工具不少R-Studio、EaseUS Data Recovery Wizard、DiskGenius、Recuva各有各的用户群。我的习惯是先用开源工具做无损排查再用商业工具做定向补刀很少一上来就花钱。工具平台核心能力适合场景成本TestDiskWin/Linux/macOS分区表重建、引导扇区修复分区丢失、无法挂载免费PhotoRecWin/Linux/macOS文件签名找回、不依赖文件系统格式化后、无文件系统时免费R-StudioWin/Linux/macOS虚拟重建RAID/NTFS、按文件类型恢复商用环境、复杂磁盘阵列收费DiskGeniusWindows、部分Linux分区管理与恢复一体国内用户习惯图形化操作免费/收费版本RecuvaWindows针对误删的轻量恢复桌面端误删文件免费说句实在话当你要的是一个跨平台、无授权约束、不挑硬件的兜底方案TestDisk和PhotoRec是唯一的选择。它们没有漂亮界面运行起来像是在跑命令行但这恰恰是它们的优势——控制力强、行为透明、不会偷偷往源盘写日志。2.3 我的选型逻辑如果你问我到底该先用哪个我会按实际情况给你一个明确的判断链路系统还能识别这个盘只是打开提示未格式化或分区表错误——先用TestDisk找分区结构这是最优解因为文件系统本身没坏恢复后目录层级全都在。系统能识别但里面文件被批量删除了——优先PhotoRec因为它能基于文件内容签名去扫不依赖文件系统里的删除记录。已经格式化过且重新写入过部分新数据——只能PhotoRecTestDisk一般救不回格式化后的碎片化内容。盘完全打不开、有异响、系统无法识别——别自己再试了要么是主控问题要么是硬件坏道工具能做的有限优先考虑拆镜像。这四种情况几乎涵盖了我日常收到的所有求助。跨平台工具的实际价值就是在你还没确认能救回来多少之前先给你一个零门槛、高成功率的试探路径。3. 实操用PhotoRec找回格式化后的照片与文档说再多不如上手跑一遍。我拿一个最常见的真实场景来演示一张64GB的SD卡在相机里提示存储卡需要格式化被误操作格式化了里面是旅行照片和几份PDF文档计算机还能正常读取这块卡但打开发现空空如也。3.1 下载、校验与镜像备份先强调一遍恢复工作的第一纪律永远不要在原盘上直接操作恢复动作。PhotoRec虽然只读扫描但任何工具都有极小的概率出现读写异常而且如果中途断电或者卡死原盘数据可能遭受二次损伤。因此正确的操作顺序是准备一块容量不小于原盘的硬盘或者分区用于存放镜像文件。在Linux下用dd做全盘镜像Windows下可以用dd for Windows或Win32 Disk Imager。恢复操作全部在镜像文件上进行原盘立刻拔掉收好。做一个64GB镜像大概需要二三十分钟取决于读卡速度。这一步很多人嫌麻烦跳过但我想说你花这几十分钟换来的是无论后面怎么折腾原始数据永远有一份底稿的底气。用过一次你就知道值。3.2 实战扫描流程拿到镜像后用PhotoRec开始扫描。这一步的前提是系统能识别目标介质。以最常见的Linux为例# 查看设备名注意是哪个磁盘 sudo fdisk -l # 假设SD卡是 /dev/sdb先卸载所有挂载点 sudo umount /dev/sdb* # 直接扫描设备 sudo photorec -d /dev/sdb # 如果做了镜像扫描镜像文件更安全 sudo photorec /path/to/sdcard.img进入交互界面后PhotoRec会问你几件事选择要扫描的磁盘或镜像文件。选择分区类型——IntelMBR、EFI GPT、或者是无分区表的Whole disk模式。对于完全被格式化掉的卡直接选Whole disk扫全盘不要只扫某个分区。选择保存恢复文件的目录然后按C开始扫描。扫描过程中会实时显示当前扫到的扇区位置与已找出的文件数。我扫这块64GB卡大约用了40分钟输出的文件放在一个单独的恢复目录里里面按扩展名和文件签名自动分好了类。3.3 文件雕刻file carving的原理为什么能无中生有PhotoRec之所以能在一个已经格式化、文件系统几乎没有有效结构的地方找回文件靠的是文件雕刻技术。照片JPEG的开头特征字节是FF D8 FF结尾是FF D9PDF的开头是%PDFPNG开头是固定的一长串魔数。PhotoRec顺着扇区逐字节扫描只要发现某个扇区头部命中已知签名就继续往下读直到遇到这个格式的结束标记或者到了合理的大小上限然后把这个连续区间整体导出。这就是为什么它能绕过文件系统的所有索引——因为它的索引导航完全基于文件内容本身的指纹特征。但也因为这样恢复出来的文件名会是乱码目录结构也没了你需要从恢复包里靠大小、时间戳、缩略图去筛选。对当前这个案例最终恢复了绝大部分JPEG和PDF也就是我常说的找回了大部分文件。3.4 恢复结果的处理技巧文件恢复完之后我通常会告诉朋友做三件事先把恢复出来的JPG按大小排序小于50KB的基本是缩略图或者残片直接忽略。用图片查看器的按日期排序功能把恢复出来的照片按拍摄时间重新排一遍因为EXIF信息还在找起来比想象中快。对恢复出来的PDF和文档做一次抽查随机打开几份确认内容完整不要批量保存后才发现问题。PhotoRec的恢复率取决于损坏前是否写入过新数据、以及文件是否被碎片化。整体来说图片、视频、PDF这类大文件恢复率很高小文本文件比如TXT、日志因为碎片多反而容易只恢复出片段。这也是很多人用完之后说照片全回来了但聊天记录没了的原因——不是工具不行而是类型决定命运。4. 分区表损坏的救援TestDisk重建与风险控制如果说PhotoRec是抢救文件内容那TestDisk就是抢救文件系统的秩序。我更喜欢把TestDisk用在做结构级修复上特别是在分区丢失和无法引导这类故障里它的能力几乎是无可替代的。4.1 什么时候必须上TestDisk遇到下面这些情况我直接跳过PhotoRec先上TestDisk移动硬盘插上后显示需要初始化磁盘管理里能看到盘但全是未分配空间。磁盘分区还在但其中一个分区的文件系统变成RAW双击打不开。Linux下挂载报错fdisk -l能看到分区但parted显示未知分区表。重装系统时误把整个磁盘的分区表清掉了或者分区调整途中断电。这些故障的共同点是数据和文件系统都还在只是地图丢了。TestDisk的工作就是找回这张地图。4.2 重建分区表的完整操作链我以一块被误删了分区表的1TB移动硬盘为例走一遍完整流程。# 安装Debian/Ubuntu环境 sudo apt install testdisk # 以管理员身份启动 sudo testdisk /dev/sdb # 或者直接不带参数启动稍后选择磁盘 sudo testdisk进入交互菜单后我按这个顺序操作选择介质列出所有磁盘选目标盘回车确认。选择分区表类型Windows下通常是IntelMBR新机器多半是EFI GPT不确定就选None让TestDisk自动探测。这一步我一般直接选Intel因为TestDisk对MBR的兼容性最好探测出GPT后它会提示变化。进入Analyse分析模式这是核心选项TestDisk会扫描扇区里的分区表特征寻找可能的起始位置。Quick Search快速搜索先在每个扇区边界上找分区通常几十秒就能出结果。找到分区后按P键预览文件列表这一步我不能省必须确认看到的就是你原来的目录和文件再继续往下走。如果快速搜索没找到或结果对不上回到菜单选Deeper Search这会扫到每个柱面的边界时间会拉长到半小时甚至几小时但能发现一些被破坏掉的、非对齐边界的分区。确认结果后选择Write把探测出的分区表写入磁盘。TestDisk会要求确认并且建议你先把当前分区表备份到磁盘——我强烈建议选Backup。写完之后重启或重新插拔分区就回来了。4.3 为什么必须只读 另存备份有可能是对TestDisk最危险的劝告。它在Write之前的所有动作都是只读的只有当你明确选择写入分区表时才会改动磁盘。所以风险集中在最后一步——如果你分析出来的分区表本身就是错的写入后反而会把还能救的局面弄得更糟。我的实践习惯是在Analyse阶段把TestDisk生成的日志文件testdisk.log保存一份里面记录了它扫描到的所有分区起点和大小。在Write之前先回到主菜单用Image Creation功能做整盘镜像。如果条件不允许至少把日志里显示的分区参数记全等于给原始现场拍了张照片。如果写入后系统还是无法挂载那就掉头用镜像文件继续做只读分析不要在原盘上反复试第二次。我见过不少人图省事跳过镜像直接Write结果写错了分区表原来的分区信息反而被覆盖最后只能靠PhotoRec去抠文件——本来是一个几分钟恢复结构的活儿硬生生变成了几小时抠文件这就是没有控制风险的下场。5. 跳出文件系统从数据丢失到传输出错的串口排障聊到这里我突然想到一个非常容易让人血压升高的场景——Linux从串口接收数据时莫名其妙地丢字节。虽然不是文件删除但本质上也属于数据丢失而且丢掉的是更底层的流数据。做嵌入式或者跟单片机打交道的人十有八九都遇到过明明波特率对接线也对设备上报的数据就是会时不时少几个字节找半天找不到原因。5.1 串口丢字节的本质不是删除是没接住串口接收丢数据绝大多数时候不是数据真的被谁删掉了而是数据到达了但应用层没有及时取走导致缓冲区溢出后被新数据覆盖或者硬件流控没有协商好对端还在发送接收端已经没有空间放。打个比方你站在一列传送带前面传送带以固定速度不断送来纸片你手上正在处理上一张纸片来不及接下这一张于是纸片掉进了地上一个垃圾桶里——这个垃圾桶的容量就是接收缓冲区。如果垃圾桶满了后来的纸片就只能掉在地上直接被丢弃。Linux下串口的常规缓冲区是4096字节如果应用层读取不够快大量数据连续涌入时就会溢出。5.2 Linux下串口接收丢失的排查链路排查串口丢数据我有一套固定的链路一步步来不要跳。第一步确认波特率和数据格式没有被工具二次修改。很多人用stty配置完参数自认为已经设置好了但没发现配置只在当前终端会话内生效或者被其他程序覆盖了。我一般用这样一组命令确认# 查看当前串口参数 stty -F /dev/ttyUSB0 -a # 重新完整配置115200波特率8位数据无校验1位停止位 stty -F /dev/ttyUSB0 115200 cs8 -cstopb -parenb # 关闭硬件流控和软件流控如果不需要的话 stty -F /dev/ttyUSB0 -crtscts -ixon -ixoff第二步判断丢字节是接收端来不及还是发送端本身就没发出来。最有效的隔离手段是回环测试loopback test。把串口的TX和RX短接然后本机向自己发送大量数据看能不能完整收回来。如果回环测试都丢数据排除外部硬件问题问题出在系统串口驱动或接线电路上如果回环正常那嫌疑集中在对端设备的发送时机和流控上。第三步检查流控协商。很多人对流控不敏感觉得关掉就行。但实际项目中如果对端设备在接收缓冲区快满时依赖RTS/CTS信号来通知你暂停发送而你这边没有启用crtscts那么对端来不及处理的那些字节就只能丢掉。反过来也一样——你接收能力不足时如果不拉低RTS告诉对端暂停一下对端就会持续发送到溢出。第四步用工具抓数据判断丢的字节位置是否规律。我用minicom或picocom抓过很多次现场但真正有用的分析还是要靠带时间戳的抓包方式。最简单的是用Python写个脚本直读设备边读边打印时间戳import serial import time ser serial.Serial(/dev/ttyUSB0, 115200, timeout0) recv_buf [] while True: data ser.read(ser.in_waiting or 1) if data: recv_buf.append((time.time(), data)) # 在这里做数据完整性判断比如查找预期的帧号如果丢字节的规律是总是在接收大包时丢尾部那多半是应用层读取不及时如果是随机丢某一个字节则更像是电气噪声或者波特率微小偏差。5.3 实用配置与验证手段针对不同的丢字节根因我常用的几个手段加深缓冲区内核的tty翻转缓冲区大小由STUDIO_DEF_TTY_BUFFER_SIZE等编译配置决定但运行期可以用setserial修改部分参数。更直接的是在应用层加大用户态缓冲区并且用独立线程立刻读取数据、写入环形缓冲而不是在主逻辑中顺便读。开硬件流控如果两端都支持RTS/CTS就在stty里加上crtscts然后线缆接好对应的流控引脚。这是大流量传输场景下最可靠的方案。降波特率很多丢字节问题其实和波特率微小误差有关。比如用115200时没问题换成460800就开始丢因为晶振偏差在高波特率下被放大。如果业务允许换成57600或者38400能解决很多奇怪问题。用逻辑分析仪看波形到了这一步就真的不是软件能解决的问题了。我遇到过一个案例排查了三天最后发现是USB转串口模块的芯片发热导致电平漂移。这种硬件问题换一根好点的线和高质量模块才是根本解法。所以关于串口丢数据我的经验总结是先参数再流控后应用读速最后看电路。按这个顺序排查基本能定位90%的问题而不是靠感觉乱改。6. 恢复过程中的黄金纪律与常见坑做数据恢复做久了我越来越意识到技术其实不难难的是让当事人忍住各种手痒和好心办坏事。我在最后把这几年踩过的坑、总结出的纪律集中讲一遍。6.1 最忌讳的几件事第一忌讳在原盘上安装恢复软件。这个错误我见得太多了。很多人下载了数据恢复软件双击安装默认安装位置就是C盘而他要恢复的文件往往就在C盘——安装过程本身就在覆盖他最想找回的数据。正确做法是把软件装在另一块盘上或者用U盘启动一个Linux环境跑。第二忌讳格式化后发现不对又反复格式化。有人误格式化后听别人说再格式化一次也许能好又格式化了一遍。每一次格式化都可能重建文件系统结构、覆盖大量之前的数据恢复难度指数级上升。我的建议很绝对一旦发现误格式化立刻断电或者只读后续的所有操作都交给恢复工具只在镜像上完成。第三忌讳用Windows的磁盘检查工具。当系统提示分区有问题时Windows经常自动弹窗建议你扫描并修复。这个操作本质是修改文件系统的元数据让它看起来正常。但对于数据恢复来说修改文件系统的任何结构都是在破坏现场。我真遇到过有人点了这个按钮结果某些目录彻底消失的情况。第四忌讳急着把盘送去专业机构。不是所有专业机构都靠谱而且很多物理没坏的数据送到机构去也是挂盘跑软件跟你自己做的区别不大。只有在你自己跑TestDisk都搞不定或者盘有异响、SMART报大量坏道时才需要考虑开盘级的数据恢复。6.2 恢复成果的取舍与后续恢复出来的文件永远不可能100%等同于丢失之前。PhotoRec恢复出的文件名、目录层级会乱TestDisk恢复结构后某些新写入的数据可能会被回滚。所以我在完成一次恢复后都会建议对方做两件事立刻把恢复出来的文件转移到另外一块干净硬盘上不要再动原盘留着它以备将来需要二次精扫。建立备份纪律。我用一个特别简单的原则重要文件至少存在两个不同的物理介质上并且其中一个定期离线存放。一位做影像记录的朋友因为SD卡损坏丢过一整季的素材后来他改成现场拍摄结束后当晚把素材复制到两块硬盘里再也没出过事。数据恢复工具再强也赢不了没有备份。工具的意义在于给你一次补救的机会而备份的目的是让你永远不需要这种机会。在这行摸爬滚打这么多年我个人最大的体会是数据恢复的成败往往不是看你会不会用某个软件而是看你能不能管住自己——管住想立刻重试的手管住想往盘里拷文件的冲动管住不备份的侥幸。TestDisk和PhotoRec这两款跨平台工具实操门槛真的不高你跟着上面的步骤走一通大概率能拿回大部分文件。但请一定记住真正的数据安全不是会恢复而是能预防。希望这篇啰嗦的长文能帮你在最慌乱的时刻保持清醒也顺手让你把串口接收丢数据这类问题一并看懂。