温馨提示×

linux怎样恢复删除文件

小樊
42
2026-09-13 16:34:41
栏目: 智能运维

在 Linux 下“恢复删除文件”有没有救,主要取决于文件是怎么删的、文件系统类型、以及删除后有没有继续写入数据。下面按常见情况和可行方法来说明。


一、先明确几个关键点

  1. rm 删除 ≠ 立刻消失

    • 文件 inode 和数据块还在,只是目录项被移除
    • 如果没有被覆盖,有很大概率可恢复
  2. 以下情况很难恢复

    • 删除后继续大量写入文件
    • 使用 shred 安全删除
    • 文件系统是 tmpfs / 内存盘
    • 磁盘已 TRIM(SSD 常见)
  3. 立即停止写入!

    # 如果是误删分区,先卸载
    umount /dev/sdXn
    

    或至少不要再往该磁盘写数据


二、常见恢复方法

方法 1:从备份恢复(最推荐)

如果你有:

  • rsync / tar 备份
  • 云快照
  • LVM / ZFS / Btrfs 快照

直接用备份恢复,安全且可靠。


方法 2:ext 文件系统(ext3 / ext4)恢复

1️⃣ extundelete(最常用)

# 安装
sudo apt install extundelete

# 恢复单个文件
extundelete /dev/sda1 --restore-file /home/user/test.txt

# 恢复整个目录
extundelete /dev/sda1 --restore-directory /home/user/docs

# 恢复全部
extundelete /dev/sda1 --restore-all

恢复的文件会在:

RECOVERED_FILES/

⚠️ 必须在未挂载或只读挂载时进行


2️⃣ debugfs(高级)

debugfs /dev/sda1
debugfs: lsdel
debugfs: dump <inode号> recovered.txt

方法 3:通用恢复工具(任何文件系统)

TestDisk + PhotoRec

sudo apt install testdisk
sudo testdisk
  • TestDisk:恢复分区、目录结构
  • PhotoRec:按文件签名恢复(jpg/pdf/doc 等)

适合:

  • 格式化
  • 分区丢失
  • 文件类型明确

方法 4:Btrfs / ZFS(有快照最好)

Btrfs

btrfs subvolume list /
btrfs send /snapshot > recover.btrfs

ZFS

zfs list -t snapshot
zfs rollback pool/data@snapshot

方法 5:进程还在时“抢救”(很实用)

如果文件被删,但程序还占用它

lsof | grep deleted

找到:

java 1234 user 5w REG 8,1 12345 /home/user/log.txt (deleted)

恢复:

cp /proc/1234/fd/5 /home/user/log.txt

✅ 这是最稳妥的实时恢复方式


三、不同文件系统的建议

文件系统 推荐工具
ext3/ext4 extundelete
xfs xfs_repair(有限)
btrfs 快照
zfs 快照
任意 testdisk / photorec

四、防止再次误删的建议

# 安全 rm
alias rm='rm -i'

# 使用 trash
sudo apt install trash-cli
trash-put file.txt

# 定期备份
rsync -a /data /backup

如果你愿意,可以告诉我:

  • 文件系统类型(df -T
  • 删除方式(rm / rm -rf / 格式化)
  • 是否已关机或继续使用了

我可以给你更精确的一步一步恢复方案

0