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

误删后第一件事:锁盘与挂载只读
文件被删除后,数据块并未立即从磁盘消失,只是被标记为“可覆盖”。任何写入操作——包括系统日志、进程写缓存——都可能覆盖这些块。所以第一步就是冻结磁盘。
立即卸载被删文件所在分区(如果允许卸载)
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
