linux系统中误删文件可通过extundelete工具恢复,前提是文件未被覆盖。1. 安装extundelete并确认目标设备路径;2. 使用–inode参数查看可恢复文件列表;3. 通过–restore-file或–restore-Directory恢复指定文件或目录;4. 恢复前尽量卸载文件系统以避免数据覆盖;5. 注意恢复后的文件权限、文件名可能异常,并非所有文件都能成功恢复。
文件误删在linux系统中虽然不是每天都会遇到,但一旦发生确实挺让人头疼的。如果是ext3/ext4文件系统,可以试试extundelete这个工具,它能帮你找回不少被删除的文件。
不过要注意的是:恢复成功的前提是删除后的文件没有被覆盖,所以发现误删后最好立刻停止写入操作,包括不要安装新软件、不复制文件,甚至尽量别重启系统。
下面我来一步步说怎么用 extundelete 恢复文件。
安装 extundelete
首先得确认你的系统是否已经安装了 extundelete。如果没有,可以通过包管理器安装:
-
sudo apt update && sudo apt install extundelete
-
centos/RHEL 系统:
sudo yum install epel-release sudo yum install extundelete
-
如果找不到包,可以去官网下载源码编译安装。
安装完成后,输入 extundelete –help 可以看到基本命令帮助。
查看可恢复文件列表
使用 extundelete 前,需要指定目标设备(比如 /dev/sda1),而不是挂载点目录。你可以通过 df -h 来查看当前挂载的设备路径。
执行以下命令查看有哪些文件可以恢复:
sudo extundelete /dev/sda1 --inode 2
这里的 –inode 2 表示从根目录开始扫描。输出结果会列出文件名、inode号、状态(Deleted表示已删除)等信息。
如果你知道要恢复哪个目录下的文件,可以加参数缩小范围,例如:
sudo extundelete /dev/sda1 --restore-directory /home/user/docs
恢复单个或多个文件
如果只想恢复某个具体文件,可以用 –restore-file 参数加上文件相对路径。比如:
sudo extundelete /dev/sda1 --restore-file home/user/report.docx
注意这里路径是相对于文件系统的相对路径,不是绝对路径。
恢复后的文件默认会保存到当前目录下的 RECOVEred_FILES 文件夹里。你可以进去检查是否恢复成功。
如果你想恢复所有还能找回来的文件,可以直接运行:
sudo extundelete /dev/sda1 --restore-all
不过这样做可能会生成大量文件,建议先查清楚再批量恢复。
恢复过程中的注意事项
-
恢复前尽量卸载文件系统
如果你要恢复的分区正在使用中,最好先卸载它。否则恢复过程中有数据被覆盖的风险。可以用 umount /dev/sda1 卸载。 -
恢复出来的文件权限可能有问题
有时候恢复出的文件属主和权限会被重置为 root,记得恢复后手动修改权限。 -
文件名可能变成 inode 编号
如果原文件名已经被覆盖,恢复出来的文件可能只有 inode 编号。这时候需要靠文件内容判断是什么文件。 -
并不是所有文件都能恢复
如果文件被删除很久,或者磁盘空间被频繁写入过,那恢复成功率就会下降。
基本上就这些。掌握这几个步骤,遇到误删时不至于手忙脚乱。虽然 extundelete 不是万能的,但在某些场景下真的能救急。