news 2026/9/7 15:58:59

Linux文件误删恢复实战:从inode原理到extundelete等工具全解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux文件误删恢复实战:从inode原理到extundelete等工具全解析

作为一个常年跟 Linux 服务器打交道的人,我太清楚那种“rm -rf 之后大脑一片空白”的感觉了。不管是手滑多敲了一个空格,还是写脚本时变量没赋值导致删错了目录,那一刻的心跳加速和冷汗,几乎是每个运维和开发者的必修课。但先别急着绝望,Linux 下的文件删除机制,决定了它和 Windows 回收站有着本质区别,很多情况下数据并非立刻消失,而是有救的。

这篇文章,我不打算空谈理论,而是直接聚焦到实际操作。我会带你从理解 Linux 文件系统的底层删除逻辑开始,再到一步步使用 extundelete、debugfs、foremost 这些工具把文件从磁盘里“抠”出来。整个过程会包含我这些年踩过的坑、验证过的命令,以及一些常规文档里不会写的判断技巧。内容稍微有点长,但每一步都可以直接照着做,希望能帮你把损失降到最低。

1. 先搞清楚:文件被删除后,到底发生了什么

在动手恢复之前,花几分钟搞清楚 Linux 文件删除的底层机制,能让你少走很多弯路。很多人以为删除就是数据被清空了,其实完全不是这么回事。

1.1 磁盘上的“指针”游戏:inode 与目录项

可以把磁盘想象成一个巨大的图书馆,文件就是书架上的书,而 inode(索引节点)就是图书的索引卡,上面记录着书放在哪个书架、哪一层。目录项(dentry)则像是图书馆门口的检索机,告诉你“那本书在索引卡的编号是多少”。当你执行rm命令时,系统实际做的是两步:

  1. 删除目录项(dentry),也就是让这个文件在目录列表中消失,你ls就看不到了。
  2. 释放 inode 中的数据块指针,并标记 inode 为“未使用”。

关键在于,这两个动作都不会清空磁盘上真正存储数据的那些扇区。数据还是静静地躺在原来的物理位置上,只是系统告诉我们“这块地方空闲了,可以写入新数据了”。这就像你把一本书的索引卡抽出来扔掉,但书还在书架上没被清理。只要之后没有新书(新数据)占用这个位置,这本书就还在那里。

这就是为什么在文件删除后,第一时间停止对这块磁盘的写入操作,是恢复成功与否的生死线。任何新的文件创建、日志写入、甚至系统更新,都可能覆盖掉那些“待回收”的数据块。

1.2 谁能救,谁没救?先判断文件系统和可用性

并不是所有 Linux 下的文件都能恢复,这取决于你使用的文件系统类型。因为不同的文件系统,删除后的行为不尽相同。

文件系统恢复难度原因简析
ext3 / ext4较低删除文件时会移除 inode 的部分信息,但数据块内容大概率还在,且 ext 系列文件系统有日志(journal),有较多恢复方法和工具可用。
XFS中等XFS 是很多 CentOS/RHEL 7+ 默认的文件系统,数据块释放后容易被重新分配,且原生没有像 extundelete 那么顺手的工具,恢复复杂一些。
Btrfs较高(相对)它支持写时复制(CoW)和快照,如果有定期快照,恢复几乎是一瞬间的事;否则也能用btrfs restore尝试。
ZFS较高(相对)同样有快照机制,恢复主要靠zfs rollback或从快照中复制文件。

一个重要的判断依据:如果你执行df -hT后,发现被删文件所在分区的“已用”容量没变,或者你隐约记得之前这个分区快满了,现在却腾出了空间,那就说明删除动作已经生效,文件系统已经把那些块标记为“空闲”,后续写入风险极高。这时候,最重要的事情,就是保持现状,什么都别做。

1.3 全盘扫描 vs 日志回放:恢复思路本质上只有两条

理解了上面的原理,恢复思路就清晰了。主要有两大流派:

  • 扫描数据块(Data Carving):这就是foremostphotorec这类工具的思路。它们不管文件系统元数据怎么变,直接按扇区扫描整块硬盘,根据文件头(比如 JPEG 文件头FFD8FF,PDF 文件头%PDF)去匹配并“掐头去尾”地还原文件。这种方式适合恢复文档、图片、视频这类有明确格式特征的文件,哪怕文件系统已经乱成一锅粥,只要数据没被覆盖,就有机会找回来。缺点是,还原出来的文件名通常是乱码或者按数字编号,文件结构也可能损坏,而且无法恢复纯文本日志这类没有明显头尾特征的文件。

  • 基于文件系统日志和元数据:这是extundeletedebugfsext4magic这类原生工具的思路。它们会解析 ext3/ext4 文件系统的日志(Journal)和 inode 表,找到被删除 inode 的入口,然后顺着 inode 里的块指针,把属于这个文件的数据块重新“读”出来。这种方式能恢复文件名、目录结构,甚至权限信息,对于文本文件、配置文件这类没有固定头尾的文件来说,几乎是唯一出路。缺点是对文件系统类型有要求(目前对 ext3/ext4 支持最好),如果删除后文件系统做了大量的写操作(比如fsck自动修复),日志被覆盖,成功率就会大打折扣。

我的建议是,如果救急,两套思路可以并用。先用 extundelete 这种精细工具恢复能找到的,再用 foremost 这种野蛮粗暴的工具去大范围捞一把,双管齐下,概率才能最大化。

2. 铁律:恢复前的急救准备与红线行为

很多数据恢复失败的案例,不是工具不行,而是事发现场的“二次破坏”太严重了。在你拿到工具之前,有一些行为是绝对禁止的,也有一些准备工作必须立马完成。

2.1 第一红线:立即以只读方式重新挂载(remount)

这是整个恢复流程里最核心、最要紧的一步,没有之一。被删文件所在的分区,现在正处于“裸奔”状态,任何进程的写入都是在往数据块上“泼墨”。

立刻执行:

mount -o remount,ro /dev/sdb1 # sdb1 是假设的分区,请替换为真实分区

或者如果你删除的是根分区/(这种情况下最头疼),没法直接卸载,操作会更极限:

# 进入单用户模式或者用 Live CD / USB 启动,将原分区挂载为只读

在单用户模式下,系统服务基本没启动,写入风险会小很多。但是,对于生产服务器,单用户模式意味着短暂停服,你需要权衡。如果文件极其重要,该停就停,没什么好犹豫的。

踩坑记录:我有一次帮朋友恢复数据库文件,删完文件后他为了“腾出更多空间”,自己又打包上传了个备份包到同一目录,结果数据块被新包覆盖了个严严实实,神仙难救。所以切记,在你确认恢复完成之前,被污染的分区上一律不要进行任何写操作,包括创建目录、编辑文件、装软件。

2.2 无法挂载为只读时,用 LVM 快照或 dd 镜像兜底

如果你的服务器特别重要,或者当前分区空间很大,拷贝镜像需要时间,但你又要保证业务不中断(不能 remount 为只读),那 LVM 快照就是救星。

假设你的磁盘是 LVM 管理的,创建一个快照卷的过程如下:

# 先查看逻辑卷名称 lvdisplay # 创建快照,大小取决于数据改动量,一般给原卷的 10%~20% 就行 lvcreate -L 10G -s -n root_snapshot /dev/mapper/centos-root # 将快照挂载为只读,之后的恢复操作全部基于这个快照进行 mkdir /mnt/snapshot mount -o ro /dev/mapper/centos-root_snapshot /mnt/snapshot

如果没有 LVM,也可以用dd命令做磁盘镜像,但这需要一块和原磁盘容量有足够空间的外部磁盘:

# 将被删除文件所在的分区完整镜像到另一个磁盘的目录下(假设外部盘挂载在 /mnt/backup) dd if=/dev/sdb1 of=/mnt/backup/sdb1.img bs=4M status=progress

做完镜像后,理论上你就可以放心大胆地在镜像文件上操作了,即使把镜像搞坏了也没关系,除了镜像本身受损外不影响原磁盘。不过,dd 全盘镜像耗时较长,如果文件系统很大(超过1TB),等它跑完可能天都黑了。所以,除非是极其核心的文件,否则我倾向于直接对着原分区操作,前提是保持只读挂载。

2.3 你需要的不是“神器”,而是一个 LiveUSB 环境

很多新人会犯的错误是,在正常工作环境下直接安装恢复工具。这本身就违反了“只读”原则,因为安装软件会往根分区写入大量文件。

最靠谱的方案,是准备一个 Ubuntu / SystemRescue 的 Live USB 或者在另一台正常的电脑上操作:

  1. 将故障硬盘拆卸下来,通过 USB 硬盘盒连接到一台正常的 Linux 电脑上。
  2. 在这台正常的电脑上,安装恢复工具,然后对故障硬盘进行扫描。
  3. 将恢复出来的文件写到这台正常电脑的本地磁盘上。

这样做的好处是,故障硬盘完全被隔离,不会受到系统后台任何进程的干扰,安全性最高。当然,服务器场景下拔盘不现实,那就优先考虑 LVM 快照或 Live CD 启动。

3. 核心武器实弹演练:四类工具的使用心得

现在进入实战环节。我会挑选几个最具代表性的工具来演示,这部分内容建议收藏之后实操时对照着用。

3.1 首选工具:针对 ext 系列的 extundelete

extundelete是我个人在 ext3/ext4 上最常用的工具,因为它能恢复文件名和完整的目录结构,使用也相对简单。

安装方式(在急救环境或正常 Linux 上):

# Debian/Ubuntu apt-get install extundelete # CentOS/RHEL(需要 EPEL 源) yum install epel-release yum install extundelete

恢复核心命令:

# 恢复到当前目录下的 restored_files 文件夹中 mkdir restored_files cd restored_files # 先查看被删除的文件列表(-d 指定设备,--inode 2 表示从根目录开始扫描) extundelete /dev/sdb1 --inode 2 # 恢复某个特定目录下的文件(注意:路径是删除前在文件系统中的绝对路径) # 例如,之前删除了 /data/www/index.php extundelete /dev/sdb1 --restore-directory /data/www # 恢复某个特定文件 extundelete /dev/sdb1 --restore-file /data/www/index.php # 如果实在不知道路径,就全盘恢复所有能恢复的 extundelete /dev/sdb1 --restore-all

运行逻辑解读:执行extundelete后,它会在当前目录下生成一个名为RECOVERED_FILES/的文件夹,里面就是恢复出来的成果。执行--restore-all时,它会扫描整个分区的 inode 表,效率不是最高的,但它能自动把能找的文件都薅出来,适合不知道被删了哪些文件的场景。

亲测注意:extundelete 在恢复较大的文件(比如超过 1G 的日志或数据库文件)时,可能会卡住或者报错,因为它需要按照 inode 里的块指针逐个读取。如果源文件在删除前碎片化严重(文件块不连续,分散在磁盘各处),恢复成功的概率会显著下降。这种情况下,可以试试下面提到的 debugfs 手动恢复。

3.2 万能低级工具:一切尽在 debugfs

debugfs是 ext2/ext3/ext4 文件系统的原厂调试工具。它不像 extundelete 那样全自动,需要手动输入命令,但正因如此,可控性极强,而且不需要额外安装,系统自带。

操作演示:

# 打开设备(处于只读模式) debugfs /dev/sdb1 # 在 debugfs 交互界面里,先列出已删除的文件 lsdel # 输出结果示例: # Inode Owner Mode Size Blocks Time deleted # 7340037 0 100600 12345 32/ 32 Sun Jan 1 00:00:00 2024

lsdel列出的文件,第一列是 inode 号,第三列是文件大小。想要恢复,需要知道它的 inode 号。

# 根据 inode 号创建恢复链接(相当于把这个已删除的文件“捡”回来) # dump 命令会把 inode 的内容导出来 dump <inode号> /tmp/recovered_file # 例如恢复 inode 为 7340037 的文件 dump 7340037 /tmp/recovered_file

这里有个很关键的点:对于 ext4 文件系统,如果lsdel结果为空,或者不显示文件,这并不代表文件无法恢复。很多情况下,是因为文件的 inode 被部分重用或清空,但数据块仍在。这时就需要祭出debugfs的终极命令——logdump,去分析文件系统日志中的内容。不过logdump操作起来极其复杂,需要对 ext4 的内部结构特别熟悉,普通用户建议直接跳到后面的ext4magic

3.3 日志回放专家:ext4magic 的妙用

ext4magic是我最近几年发现的一个宝藏工具,它就是专门针对 ext3/ext4 的日志进行回放来恢复数据的。当删除时间不长,日志里还保留着 inode 变化的记录时,它的恢复成功率比 extundelete 高很多,尤其是在目录项被删除后,它能从日志中找到原始文件名。

核心用法:

# 查看指定时间之后的文件系统变更记录(时间戳是 Unix 时间戳) ext4magic /dev/sdb1 -l -j 1672531200 # 恢复在某个时间点之后被删除的文件(时间戳可调整) # -j 后面跟的是“从什么时间开始查找删除记录” ext4magic /dev/sdb1 -j 1672531200 -R # 恢复结果会生成到当前目录的 RECOVERED_FILES/ 下 # 如果知道文件在日志中被删除,甚至可以用 -d 指定目录恢复 ext4magic /dev/sdb1 -j 1672531200 -d /data/www -R

和 extundelete 的区别:extundelete 是直接扫描 inode 表,而 ext4magic 是从日志块里回放删除行为。理解这一点很重要。如果删除文件后的瞬间,文件系统就立即被卸载(比如 vm 断电重启),日志里可能还留着之前的记录,ext4magic 会有奇效。相反,如果删除后系统持续运行了很久,日志循环覆盖了好几轮,ext4magic 的效果就会打折。

注意:ext4magic 依赖e2fslibs库,CentOS 需要先安装e2fsprogs-libse2fsprogs-devel,否则编译安装会失败。

3.4 无头苍蝇救星:foremost 与 photorec

当你完全不知道丢的是什么类型的文件,或者文件系统的元数据损坏太严重,前面几个工具都失效时,就该轮到数据雕刻(Carving)工具登场了。

foremost 演示(通过文件头特征恢复):

# 安装 apt-get install foremost # Debian/Ubuntu yum install foremost # CentOS(可能不在默认源,可用 rpm 包) # 操作:指定输出目录和要扫描的设备 mkdir /tmp/output foremost -t jpg,pdf,docx,zip -i /dev/sdb1 -o /tmp/output
  • -t告诉它要恢复哪些类型,多个类型用逗号分隔。
  • -i指定输入设备。
  • -o指定输出目录,执行完后会生成jpgpdf等对应的子目录。

photorec 则更傻瓜化:

# 安装 testdisk apt-get install testdisk # 或 yum install testdisk # 然后运行 photorec /dev/sdb1

photorec 是全交互的,按提示选择恢复文件存放的目录,它就能自动扫描整个分区。它能识别 400+ 种文件格式,而且不依赖文件系统的 inode 信息,纯按扇区扫描。缺点是恢复出来的文件名基本都是乱的,需要你根据内容去甄别。

用这两种工具的关键坑点:它们对大文件很不友好。如果被删的是一个 1GB 的数据库文件,虽然它在磁盘上连贯分布,但 foremost 会尝试把它当成一个由多个文件连接起来的“块”来分割恢复,恢复出来的是一堆几十MB大小的文件碎片,拼都拼不完整。所以,photorec 和 foremost 更适合恢复文档、照片、视频、压缩包这类本身有明确文件分隔符和固定大小的文件。

4. 实战复盘:从删除到恢复的一小时

为了让你对这些工具有个直观印象,分享一个我经历过的真实场景,完整走一遍流程。

4.1 事件还原:一条脚本引发的连锁事故

当时是帮一家公司部署新系统,我需要在/data/app/目录下清理旧的日志文件。我写了一个清理脚本,循环删除超过 7 天的.log文件。脚本本身逻辑没错,但因为测试时cron环境变量没加载,脚本里引用的一个关键路径变量为空,导致find /data/app/ -mtime +7 -exec rm -rf {} \;里的{}变成了根目录的误匹配,直接把/data/app下的几个项目代码目录一起删了。

发现的时候是下午三点,团队立马炸锅。幸运的点在于,这个目录是一个独立的XFS 分区(当时图省事没挂根分区),而且公司在另一台机器上有数据备份,但备份恢复需要停机重新初始化,会产生两小时的数据丢失。老板希望先尝试恢复已删除的文件。

4.2 决策过程:为什么我选择不卸载分区

当时我的第一反应是先卸载这个分区,保证数据不被二次覆盖。但问题是,/data/app下的 SQLite 数据库文件正在被服务进程占用,直接umount会导致服务端口套接字失效,连接全部中断。权衡之后,我采取了折中方案——立刻停止该服务的写入线程,但保证进程不退出,不让文件系统卸载。

因为我记得这个目录的数据量大概只有 4GB,而且最近几天没有什么大的写入操作,所以我没有做镜像,直接选择了ext4magic(这块磁盘最开始是 ext4,后来用 tune2fs 转成了 XFS,但底层日志记录方式不一样,得先确认)。这里说明一下,我当时在紧急状态下判断失误了,后来我试用 ext4magic 才知道它不支持 XFS,浪费了 5 分钟。所以正确的做法是:

# 第一步,立刻确认文件系统类型 df -T /data/app

如果不确定,不要乱开工具。

4.3 最终成功恢复的关键步骤

确定磁盘是 XFS 后,我调整了策略。XFS 下的恢复没有 extundelete 那么好用,但因为删除动作发生不到 20 分钟,系统未及时回收元数据,我用的是xfs_undelete(一个第三方的 XFS 恢复脚本)和xfs_db(系统自带 XFS 调试工具)。

呼,说起来都是泪。这里只分享最终有效的操作:

关键一步:xfs_db定位到 XFS 的日志元数据区域,通过日志记录找到最近的 inode 变化记录。

# 使用 xfs_db 进入调试模式 xfs_db -r /dev/sdb2 # 查看分配组信息 sb # 查看日志块 log # 手动定位相关 inode 记录

但 XFS 的日志恢复非常复杂,xfs_db不适合新手。最终我实际靠的还是最原始但有效的方法——用 grep 在磁盘上直接搜索字符串特征

因为被删的文件里含有一段具有特殊标记的配置文件内容,例如【项目密钥】。我用strings工具直接扫描整个分区:

# 将磁盘上所有可打印字符串提取出来,并检索特征 strings -a /dev/sdb2 | grep -n "项目密钥"

定位到大概的偏移量后,再结合dd命令将这块区域切出来,用stringssed拼接还原出了大部分配置文本。这种方法虽然野路子,但在文件系统工具失灵时确实能救命。

这个案例想说明的是:不要迷信任何一款工具,恢复方案是动态的。工具层面的 extundelete 和 debugfs 适合 ext 文件系统;如果是 XFS,我后来也找到了xfs_undelete这个项目,但测试下来还是不如 ext 系顺手。

5. 疑难杂症与避坑指南

日常操作中会遇到很多上面没提到的细节问题,我整理了一下,分成几类。

5.1 删除文件后根分区被自动 fsck 了,还能救吗?

很常见的情况。Linux 开机时如果检测到文件系统不干净,会自动执行fsck。fsck 是文件系统一致性检查工具,它会重建一些目录项和 inode 结构。

先说结论:不一定没救,但危险系数极高。fsck 的执行过程可能会移动一些数据块的位置,用来修复一些逻辑错误,这就可能覆盖掉你要恢复的文件区域。如果 fsck 是在文件系统异常状态下强制运行的,大概率会把已删除的 inode 表清掉,把文件系统标记为“干净”,这样的话,用 extundelete 去扫描,得到的结果往往是“未找到已删除的 inode,无法恢复”。

如果你所在的分区在删除后发生断电,你强行挂载后,系统会提示需要进行 fsck。此时我的建议是:不要直接执行 fsck,优先考虑使用只读方式挂载尝试读取。如果强制挂载失败,再考虑fsck -n(非交互式,不真正修复,只查看)——这步只读检查不至于破坏数据。但是,如果你执行fsck -y(自动修复),就要做好恢复失败的心理准备了。

5.2 误删虚拟机磁盘文件(qcow2 / vmdk),该怎么操作?

这种情况尤其让人崩溃。因为虚拟机的磁盘文件通常是宿主机上的一个巨大文件,删除后,虚拟机的整个盘瞬间没了。

处理思路:

  1. 立刻停止该 VM 的进程,防止其写日志或写磁盘。
  2. 宿主机上的恢复工具对虚拟磁盘文件基本无效,因为它是宿主机文件系统上的一个大文件。你需要恢复到宿主机文件系统层面。
  3. 这种超大文件的恢复,extundelete 基本无能为力(因为 inode 里的块记录太多)。优先用debugfsxfs_db去手动定位和导出。如果在 KVM 环境,还可以试着查找宿主机上是否有临时快照或者备份链。
  4. 更稳妥的方案是预防。给虚拟机的镜像目录开启 LVM 快照,或者定期用qemu-img commit备份,这样才能避免直接去碰那块“巨石”。

5.3 不要在恢复过程中重启系统

这是个老生常谈但总有人犯的错。删除文件后发现出大事了,第一反应可能是“重启试试”。实际上是把自己往火坑里推。因为重启过程中,系统会执行大量的磁盘挂载检查、日志回放、临时文件清理,这些操作几乎百分百会覆盖掉一部分被删除的数据块。除非你准备拔盘做镜像,否则,一旦发现有重要文件被删,立刻停掉所有写操作,不要重启,老老实实按第 2 章的步骤操作。

5.4 恢复出来的文件打不开或乱码,怎么办?

这种情况很常见,特别是用 foremost 这种数据雕刻工具恢复的文件。原因通常是:

  • 文件碎片化严重:文件在磁盘上不是连续存储的,数据雕刻工具只能抓到它的开头部分,后面的内容可能在其他扇区,工具无法自动拼接。
  • 文件头被覆盖或损坏:比如图片文件的头部几个字节被别的数据覆盖了,导致识别出来的格式不正确。

处理方法:

  1. 如果恢复出的文件有大小,但打不开,可以尝试用十六进制编辑器(hexedit)直接查看文件开头,看看是否能找到一些特征(比如PK开头是 zip,%PDF开头是 PDF)。
  2. 对于图片,可以找找看有没有同时恢复出文件头和文件尾都完整的那些碎片,用gimpimagemagick尝试修复部分损坏的图像。
  3. 其实最好的办法,还是别等到这一步。删除后立刻做只读挂载,数据块没被覆盖,恢复出来的完整性会非常高。

6. 比恢复更重要的:如何构建防误删体系

吃了几次亏之后,我现在给自己团队定的规矩,就是从根上减少这种心跳骤停的发生。工具再牛,不如防患于未然。

6.1 建立回收站机制(不如 Windows 顺手,但可以模拟)

Linux 命令行没有原生回收站,但可以通过简单的方式模拟:

  • 如果个人使用,可以把rm命令封装成一个函数,自动将文件移动到一个特定的目录(比如~/.trash),并定期清理。用alias rm='mv -t ~/.trash'来替代?不行,这样会导致普通rm命令都不好使,你需要写一个脚本,可以识别rm -rf参数,把文件挪到回收站目录。
  • 如果是团队服务器,可以统一使用safe-rm或者类似工具,它会把危险的删除操作拦截下来,特别是对/etc/var等关键路径的递归删除。

我个人推荐直接改系统命令的方式:

# 修改 /etc/profile.d/trash.sh mkdir -p ~/.trash function rm() { if [[ "$1" == "-rf" ]]; then mv "$2" ~/.trash/ else /bin/rm "$@" fi }

这个方法虽然简单,但要注意别把rm -rf /tmp/*这种命令都给转移了,那样会积累大量垃圾文件。

6.2 快照:最后的无痛后悔药

在生产环境中,无论你是用云服务器还是自建机,LVM 快照或者云磁盘快照,是所有恢复方案的最终兜底。

  • 云服务器:定期给数据盘做快照,删除文件后,可以直接回滚到最近一个快照,精度可以到秒级,成本很低。
  • 自建服务器:如果是 LVM 管理,可以用lvcreate -s定期做快照,但因为快照会占用额外空间,一般设置一个定时任务,例如每天夜间做一次,保留最近 7 天的快照。

有了快照,恢复文件就变成了:挂载快照盘 -> 拷贝文件回来,整个过程不超过 10 分钟。这比任何数据恢复工具都靠谱一百倍。

6.3 一个好习惯:写命令前先“演练”

最后分享一个我个人的小习惯。凡是涉及rm -rfmv> file这类破坏性命令的命令行操作,先执行echo或者which看看命令解析后的路径到底是什么

比如:

find /data -type f -name "*.log" -mtime +7 -exec rm {} \;

执行前,先去掉-exec rm的部分,改为-exec echo {} \;,打印出每个将被删除的文件路径,确认无误后再执行删除。这多花十秒钟的时间,能帮你规避 99% 的误删事故。

另外,mv文件时也建议先mv /path/to/old /path/to/new而不是直接在两个目录间操作,这样至少留个原文件的“在剪贴板”状态,万一新位置不对,原文件还在。

数据恢复的核心逻辑我最后再提炼一次:先冻结环境,再分析文件系统,最后选对工具去捞数据。工具的上限比你想象的高,但它的下限也更低,一旦被二次覆盖,再贵的软件也回天无力。希望读到这里的你,永远不会真的用到这些命令。但如果真碰到了,按照上面的步骤一步步来,至少能让你在慌乱中找回一点主动权。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/7 15:57:18

AI生成智慧交通驾驶舱代码实战:从搭建到源码私有化

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/7 15:56:06

聚簇依赖下的大模型评测缺失响应处理:从IPW加权到鲁棒估计

刚看到这篇 NIPS 2025 的投稿标题时&#xff0c;我还有点愣神——Handling Missing Responses under Cluster Dependence with Applications to Language Model Evaluation——标题后半部分应该是 Evaluation&#xff0c;看截断的痕迹大概是被系统吞了。但就凭前半截&#xff0…

作者头像 李华
网站建设 2026/9/7 15:56:05

计算机网络自顶向下方法:从HTTP协议到Socket编程实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/7 15:55:18

Docker Compose 部署中间件全指南:从环境搭建到K8s迁移

1. 项目概述与需求拆解1.1 为什么要用 Docker Compose 装中间件我最早接触中间件部署的时候&#xff0c;干的还是最原始的活儿&#xff1a;去官网下载安装包&#xff0c;解压、改配置、加环境变量、写 systemd 服务脚本&#xff0c;然后一台一台机器重复。如果只是装个 MySQL 还…

作者头像 李华
网站建设 2026/9/7 15:55:11

CMakeLists大型工程实战:从模块化设计到底层构建配置,一套可复用的方案

简介&#xff1a;这是一份面向C开发者的CMakeLists管理大型工程实例学习包。资源通过实际项目演示CMake在跨平台构建中的核心用法&#xff0c;覆盖项目初始化、源文件组织、目标属性设置、外部依赖引入、CTest测试集成及安装部署等关键环节&#xff0c;适合希望提升构建技能、规…

作者头像 李华
网站建设 2026/9/7 15:55:09

车载测试工程师需求激增:从技术原理到职业发展全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华