Linux 文件误删恢复实战

1次阅读

误删文件后应立即停止磁盘写入以提高恢复成功率;ext4下优先用debugfs通过inode恢复原始数据,或用extundelete按路径重建文件;photorec仅作兜底,适用于严重覆写或无日志文件系统。

Linux 文件误删恢复实战

误删文件后立即停写磁盘

linux 下删了 rm -rf 的文件,恢复成功率和磁盘是否继续写入强相关。只要被删文件的 inode 还没被新数据覆盖,就有机会找回。

  • 立刻停止向该文件所在分区的所有写操作:别开新终端、别装包、别记日志、别用编辑器保存任何东西
  • 如果误删在 /home,但系统还在跑 GUI,建议切到 tty(Ctrl+Alt+F2)操作,避免桌面环境后台自动写缓存
  • 不要运行 apt upgradejournalctl --vacuum-size 或任何可能触发磁盘写入的命令

debugfs 直接读取 ext4 未覆写 inode

适用于 ext2/ext3/ext4 文件系统,且知道被删文件大致路径或名称。它不依赖文件名,而是通过 inode 恢复原始数据块,是最快最稳的方案之一。

  • 先用 dumpe2fs -h /dev/sda1 确认文件系统类型和块大小(常见为 4096)
  • debugfs /dev/sda1 进入交互模式,执行 lsdel 列出所有已删除但未覆写的 inode
  • 对目标 inode(比如 123456),用 icat /dev/sda1 123456 > recovered.txt 提取内容
  • 注意:icat 不还原文件名和权限,只恢复原始字节流;若文件是二进制(如图片、PDF),需确保输出后缀匹配,否则打不开

extundelete 恢复带路径的完整文件

debugfs 更友好,能按原路径重建目录结构,但要求文件系统没被 e2fsck 自动清理过,且必须在 unmounted 状态下运行(或至少 remount 为 ro)。

  • 安装:ubuntu/debiansudo apt install extundeletecentos 需先启用 EPEL 再 yum install extundelete
  • 卸载分区(如 /dev/sdb1):先 sudo umount /dev/sdb1;若提示 busy,用 lsof +D /mount/point 查占用进程
  • 恢复单个文件:extundelete /dev/sdb1 --restore-file "path/to/file.txt"
  • 恢复整个目录:extundelete /dev/sdb1 --restore-Directory "path/to/dir",结果默认放在 RECOVERED_FILES/
  • 警告:extundelete 对 XFS/Btrfs 无效;若执行时提示 No undeleted inodes,说明 inode 已被回收,得换其他方法

别信“实时监控类恢复工具”

photorectestdisk 这类基于文件签名的工具,确实能扫出大量碎片文件,但它们完全丢失路径、文件名、修改时间,且无法区分同类型文件(比如一 file_001.jpg 里哪个是你昨天改的稿子)。

  • photorec 适合 SD 卡、U 盘等无日志文件系统,或 ext4 已严重覆写的情况
  • 它会把所有识别出的 JPEG/PDF/DOCX 块全导出,不按逻辑顺序,也不保证完整性——一个 10MB 的 word 文档可能被拆成三段,拼起来打不开
  • 运行前务必指定输出到另一块盘(-d /mnt/backup),否则扫描过程本身就在持续写入,越救越丢
  • 真正关键的业务文件,优先走 debugfsextundeletephotorec 是兜底选项,不是首选

恢复这事,快慢之间差的是 inode 是否还活着;而 inode 活不活,取决于你删完之后那几分钟有没有手欠敲下一个命令。

text=ZqhQzanResources