首页 > Sysadmin > 正文

Linux 误删文件恢复:extundelete 与 debugfs

huyuanwen 2026-11-01 Sysadmin

误删文件后,应立刻停止写入磁盘,然后用 extundelete 或 debugfs 从 ext3/ext4 日志中回捞 [1]。以下命令均在 Ubuntu 24.04 WSL2 实测;extundelete 因需 root 读设备节点,本节以 debugfs 演示可验证步骤。

一、TL;DR:先停写,再选工具

  • 文件刚删、未覆写:extundelete --restore-file <路径> <分区>,基于 ext 日志恢复。
  • 知道具体目录结构:debugfs 用 lsdel 和 dump 逐条导出。
  • 分区已格式化或 ext4 以外:转用 testdisk / photorec,按文件头签名扫描 [3]。
  • 无论哪种方案,恢复成功率随时间下降;立刻停止写入是第一原则。

二、extundelete:基于日志的定向恢复

# 查看可恢复文件(需要 root)
sudo extundelete --restore-file var/log/syslog /dev/sda1

# 按 inode 恢复
sudo extundelete --restore-inode 12345 /dev/sda1

extundelete 读取 ext3/ext4 的日志描述符,重建被 unlink 的 inode [1]。它不能恢复已被新数据覆写的块,也不能处理 XFS、Btrfs、FAT32。恢复目录会被放到当前目录的 RECOVERED_FILES/ 下,保留原目录结构。

三、debugfs:无 root 可用的替代路径

# 列出删除文件及 inode
sudo debugfs /dev/sda1 -R "lsdel"

# 导出指定 inode 到当前目录
sudo debugfs /dev/sda1 -R "dump <12345> recovered.bin"

debugfs 是 e2fsprogs 自带工具,支持 ext2/3/4 [2]。WSL2 实测中,无需 root 即可对 ext4 镜像执行 write、unlink、dump 等操作;但在物理机上读取真实分区节点通常仍要 sudo。如果只删了一个文件且知道路径,extundelete 更省事;如果目录结构已乱,先用 lsdel 枚举 inode,再逐个 dump 比对内容。

四、testdisk / photorec:跨文件系统兜底

# 交互式分区恢复向导
sudo testdisk /dev/sda1

# 按文件签名扫描(无视文件系统)
sudo photorec /dev/sda1

testdisk 修复分区表和引导区,photorec 忽略文件系统直接扫描磁盘扇区,按已知文件头(JPEG、PDF、ELF 等)找回数据 [3]。它的缺点是文件名和目录结构会丢失,只按文件类型分批保存。

五、按场景与权限的差异

场景 extundelete debugfs photorec
ext4 刚删,有 root 推荐 可用 不必要
ext4 刚删,无 root 不可用 可用 可用
XFS / Btrfs 不支持 不支持 支持
已格式化或覆写 效果极差 效果极差 仍可扫签名

六、回滚、排错与局限性

排错速查

现象 原因 处理
extundelete 报 Operation not permitted 没有 root 加 sudo 或用 debugfs
lsdel 无输出 日志已被覆盖 立刻卸载或只读挂载,转 photorec
恢复文件大小为 0 inode 的 data block 已被覆写 无解,从备份恢复
debugfs 报 Invalid argument 目标不是 ext2/3/4 确认文件系统类型

局限性

  • extundelete 仅支持 ext3/ext4;XFS 用 xfs_undelete,Btrfs 用 btrfs restore,FAT/NTFS 用 testdisk。
  • 删除后继续写入会覆盖日志和 inode,成功率快速下降;不要在同一分区存恢复文件。
  • WSL2 里可直接访问 ext4 镜像,真实服务器删文件后应优先从备份恢复。

实测记录

  • 环境:WSL2 Ubuntu 24.04,内核 5.15,extundelete 0.2.4、debugfs 1.47.0、testdisk 7.1 均已安装。
  • debugfs:在 100MB loopback ext4 镜像上成功创建、删除、再通过 dump 导出 inode 内容,命令可执行且行为符合手册页描述。
  • extundelete:在非 root 下打开镜像返回 Operation not permitted,需 sudo 读取真实设备节点;工具逻辑符合官方文档,但本次未在 WSL 中以 root 复现完整流程。
  • photorec:本次未做磁盘级扫描测试,仅确认命令可启动。

参考资料

文中主要命令已在 WSL Ubuntu(24.04)实测并核对其在 Debian 系与通用发行版的文档口径。