在linux使用命令行,有时会发生误删除文件的情况,发生这种情况的时候不要慌张, 还是有一定办法恢复删除文件的,首先将删除文件的所在磁盘卸载掉,防止inode被覆盖读写找不回来了, 然后使用工具进行恢复。这里推荐一个工具:extundelete
1. 工具安装
可以通过yum install extundelete安装,
也可以从网上下载安装:
2. 找回文件
1.卸载删除文件所在磁盘
如下在work目录有一个文件test-del,里面有两行内容, 删除这个文件,查看到work目录挂着在/dev/vdb1磁盘,
退出work目录返回到上层目录, 使用umount /dev/vdb1卸载目录
[root@VM-16-14-centos work]# cat test-del
12345667
abcdefg
[root@VM-16-14-centos work]#
[root@VM-16-14-centos work]# rm test-del -f
[root@VM-16-14-centos work]# cd ../
[root@VM-16-14-centos data]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 989M 0 989M 0% /dev
tmpfs 1000M 24K 1000M 1% /dev/shm
tmpfs 1000M 592K 999M 1% /run
tmpfs 1000M 0 1000M 0% /sys/fs/cgroup
/dev/vda1 79G 3.8G 72G 5% /
tmpfs 200M 0 200M 0% /run/user/0
/dev/vdb1 30G 19G 9.4G 67% /data/work
[root@VM-16-14-centos data]# umount /dev/vdb1
[root@VM-16-14-centos data]#
2. 查找删除文件的inode,进行恢复
通过extundelete --inode 2 /dev/vdb1 查找删除文件的inode,可以看到test-del文件的inode 是4680,
使用extundelete --restore-inode 4680 /dev/vdb1进行恢复, 恢复的文件在当前的RECOVERED_FILES目录下,名字为file.inode,
对于test-del就是file.4680, 查看内容和删除前的一致,文件恢复成功。
如果要恢复所以删除的文件可以使用
extundelete --restore-all /dev/vdb1 进行恢复;
如果删除的文件在磁盘的目录下, 需要使用extundelete --inode 目录inode进行逐级目录查找。
[root@VM-16-14-centos data]# extundelete --inode 2 /dev/vdb1 |grep test-del
test-del 4680 Deleted
[root@VM-16-14-centos data]# extundelete --restore-inode 4680 /dev/vdb1
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... 240 groups loaded.
Loading journal descriptors ... 29196 descriptors loaded.
[root@VM-16-14-centos data]# cat RECOVERED_FILES/file.4680
12345667
abcdefg
[root@VM-16-14-centos data]#