温馨提示×

怎样恢复linux误删文件

小樊
45
2026-09-10 12:45:25
栏目: 智能运维

在 Linux 下误删文件(如 rm 删除)后,能否恢复取决于文件系统类型、删除后是否有写入操作、是否及时采取措施。下面按「紧急处理 → 恢复方法 → 预防措施」说明。


一、误删后的【第一原则(非常重要)】

  1. 立即停止写入
    • 不要在该磁盘/分区继续下载、安装、编辑文件
    • 最好立刻卸载分区(如果可以):
      umount /mnt/xxx
      
  2. 不要反复尝试“测试恢复”
    • 很多失败尝试会覆盖数据

二、常见恢复方案(按场景)

✅ 场景 1:使用 ext3 / ext4 文件系统

工具:extundelete(最常用)

# 安装
yum install extundelete
# 或
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:ext4 且较新系统

工具:ext4magic

ext4magic /dev/sda1 -r

extundelete 在某些情况下更强。


✅ 场景 3:xfs 文件系统(CentOS/RHEL 常见)

❗ xfs 官方不支持直接恢复

可尝试:

  • xfs_undelete(社区工具,有限)
  • 从备份恢复(唯一可靠方式)

✅ 场景 4:任意文件系统(低级恢复)

工具:testdisk / photorec

apt install testdisk
testdisk

photorec

特点:

  • 不依赖文件系统结构
  • 按文件类型扫描
  • 文件名会丢失

适合:

  • 图片、视频、压缩包
  • 重要但无文件名需求的数据

✅ 场景 5:文件仍在被进程使用(最常见“假删除”)

如果文件被程序打开,但被 rm

lsof | grep deleted

找到类似:

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

恢复:

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

✅ 这是成功率最高的情况


三、如果使用了 rm -rf

  • 没有回收站
  • 只能依赖:
    • 文件恢复工具
    • 快照(LVM / Btrfs / ZFS)
    • 备份

四、有备份 / 快照的情况

LVM 快照

lvcreate --snapshot --name snap --size 1G /dev/vg00/lv01

Btrfs

btrfs subvolume snapshot /

五、防止再次误删(强烈建议)

1️⃣ 用 trash 代替 rm

apt install trash-cli
alias rm='trash-put'

2️⃣ rm 加确认

alias rm='rm -i'

3️⃣ 定期备份

  • rsync
  • Borg
  • Restic

六、快速判断你能不能恢复

情况 恢复可能
文件被进程占用 ✅ 很高
刚删,无写入 ✅ 高
删除很久,有写入 ❌ 低
xfs 无备份 ❌ 极低
有快照/备份 ✅ 100%

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

  • 文件系统类型(df -T
  • 删除方式(rm / rm -rf
  • 是否有进程占用
  • 是否有备份

我可以给你具体可执行的恢复命令

0