1. 首页 > 技术教程 > 正文

数据误删急救:Linux 误删文件后的恢复尝试(不踩坑版)

数据误删急救:Linux 误删文件后的恢复尝试(不踩坑版)

你在主机选的 Linux 教程里翻到这篇文章,大概率是因为刚手滑删了重要文件。别慌,Linux 下误删文件有恢复手段,但前提是——立刻停止一切写入操作。本文直接给你一套可操作的恢复流程,覆盖 ext4 和 XFS 两种主流文件系统,并指出哪些情况救不回来。

数据误删急救:Linux 误删文件后的恢复尝试(不踩坑版)的图片

误删后第一件事:锁盘与挂载只读

文件被删除后,数据块并未立即从磁盘消失,只是被标记为“可覆盖”。任何写入操作——包括系统日志、进程写缓存——都可能覆盖这些块。所以第一步就是冻结磁盘。

立即卸载被删文件所在分区(如果允许卸载)

umount /dev/sda1

如果无法卸载,强制重新挂载为只读

mount -o remount,ro /dev/sda1

老鸟叮嘱:千万别在删文件的分区上执行 `fsck` 或 `touch` 任何文件,否则恢复成功率直线下降。如果你用的是 VPS,没物理盘可拔,至少通过 `mount -o remount,ro` 禁止写入。

ext4 文件系统恢复:用 extundelete

ext4 是 Linux 默认文件系统,恢复工具推荐 `extundelete`,开源、命令简单。

安装 extundelete

Ubuntu/Debian

apt update && apt install -y extundelete

CentOS/RHEL 7+

yum install -y epel-release && yum install -y extundelete

恢复指定文件或目录

假设你误删了 `/data/www/index.php`,且 `/data` 分区是 `/dev/vdb1`。

先查看被删文件列表(不会恢复,只预览)

extundelete /dev/vdb1 –inode 2

恢复单个文件到当前目录下的 RECOVERED_FILES/

extundelete /dev/vdb1 –restore-file www/index.php

如果删了整个目录

extundelete /dev/vdb1 –restore-directory www

命令执行后,会在当前目录生成 `RECOVERED_FILES/` 文件夹,恢复的文件就在里面。恢复的文件名可能被重命名,比如 `index.php` 变成 `f123456.php`,用 `file` 命令确认类型。

file RECOVERED_FILES/f123456.php

XFS 文件系统恢复:用 xfs_undelete(有限支持)

XFS 是 CentOS 7/8 和 RHEL 的默认文件系统,官方没有标准恢复工具。社区方案 `xfs_undelete` 只能恢复未被覆盖的、小文件,且依赖日志。

安装 xfs_undelete(需要编译)

git clone https://github.com/ianka/xfs_undelete.git
cd xfs_undelete && make

扫描并恢复

./xfs_undelete /dev/sdb1 -o /tmp/recovered/

如果 `xfs_undelete` 报错或找不到文件,别浪费时间。XFS 文件系统一旦删除,元数据会被快速回收,恢复成功率远低于 ext4。

万一恢复失败怎么办?试试 grep 硬搜

如果工具恢复不回来,但文件是文本类型(代码、日志、配置),可以用 `grep` 在磁盘上直接搜索内容。

假设你知道文件里有一行“DB_PASSWORD=”

grep -a -b 'DB_PASSWORD' /dev/sdb1 | head -5

找到偏移量后,用 dd 截取

dd if=/dev/sdb1 of=/tmp/recovered.txt bs=1 skip=123456 count=512

这种方法只能捞文本文件,二进制文件(图片、压缩包)基本没戏。而且你得记得文件内容的关键片段。

老鸟叮嘱:别在系统盘上测试恢复

不要在生产服务器上第一次用 `extundelete`。先在测试机或虚拟机里模拟一次误删流程,熟悉命令参数。另外,SSD 硬盘上恢复成功率极低,因为 SSD 的 TRIM 命令会在删除后立即擦除数据块,物理上无法恢复。

FAQ

1. Linux 误删文件后还能恢复吗?

能,但前提是立即停止写入操作。ext4 文件系统下恢复成功率较高,XFS 和 Btrfs 成功率低。如果文件被覆盖、磁盘被 TRIM,或者分区被重新格式化,则无法恢复。

2. 怎么知道我的文件系统是 ext4 还是 XFS?

执行 `df -T`,输出第二列显示文件系统类型。比如 `ext4` 或 `xfs`。

3. 恢复出来的文件乱码怎么办?

说明数据块已被覆盖,无法恢复。或者你恢复的是二进制文件,但用文本编辑器打开了。先用 `file` 命令确认文件类型。

4. 误删后我执行了 `rm -rf`,还能恢复吗?

`rm -rf` 只是删除了文件链接,数据块还在。只要没有覆盖,恢复原理一样。但如果你在同一个分区上又写了新文件,恢复成功率会暴跌。

5. 有没有图形化的恢复工具?

有,比如 `testdisk` 和 `photorec`,但命令行下效率更高,且 VPS 通常没有图形界面。`testdisk` 支持 ext4 和 XFS,但操作逻辑复杂,新手容易把盘搞坏。

6. 为什么我的 VPS 恢复后文件是空的?

常见原因:文件被删除后,系统日志或 cron 任务写入了新数据覆盖了原文件块。或者你恢复时没挂载只读,进程仍在写入。

**相关阅读:**

– [VPS 部署 AI 工具学习路线:从 Linux 基础到 AI Agent 实战](https://www.zhujixuan.com/jishujiaocheng/9765.html)
– [VPS 部署 AI 工具需要哪些基础?Linux、Docker、Nginx 和域名配置入门](https://www.zhujixuan.com/jishujiaocheng/9747.html)
– [低配 VPS 救星:Linux Swap 分区创建与内核优化](https://www.zhujixuan.com/jishujiaocheng/9414.html)

转载请注明出处:https://www.zhujixuan.com/jishujiaocheng/9564.html 商家投稿邮箱:zhujixuanblog@qq.com