在 Linux 下“恢复删除文件”有没有救,主要取决于文件是怎么删的、文件系统类型、以及删除后有没有继续写入数据。下面按常见情况和可行方法来说明。
rm 删除 ≠ 立刻消失
以下情况很难恢复
shred 安全删除立即停止写入!
# 如果是误删分区,先卸载
umount /dev/sdXn
或至少不要再往该磁盘写数据
如果你有:
直接用备份恢复,安全且可靠。
# 安装
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/
⚠️ 必须在未挂载或只读挂载时进行
debugfs /dev/sda1
debugfs: lsdel
debugfs: dump <inode号> recovered.txt
sudo apt install testdisk
sudo testdisk
适合:
btrfs subvolume list /
btrfs send /snapshot > recover.btrfs
zfs list -t snapshot
zfs rollback pool/data@snapshot
如果文件被删,但程序还占用它:
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)我可以给你更精确的一步一步恢复方案。