前提是extundelete命令必须要有,我的红帽版本是6.4的,这次用这个命令来恢复,我的另一篇博客有下载地址和安装extundelete的介绍
http://blog.chinaunix.net/uid-30212356-id-5079136.html
用df -hT命令可以查看文件系统类型,如:
[root@localhost extundelete-0.2.4]# df -Th
文件系统 类型 容量 已用 可用 已用%% 挂载点
/dev/sda2
ext4 18G 2.5G 15G 15% /
tmpfs tmpfs 504M 224K 504M 1% /dev/shm
/dev/sda1
ext4 291M 32M 245M 12% /boot
/dev/sr0 iso9660 3.0G 3.0G 0 100% /media/RHEL_6.4 i386 Disc 1
上面只有/boot和/ 是ext4文件系统类型的,可以用来测试,当然你也可以用fdisk命令额外划分一个区来测试,这里我就用/boot来测试吧!
1.在/boot下拷贝几个文件,再创建一个目录和非空文本(随便写点内容),然后把a.txt拷贝到创建的目录中
[root@localhost boot]# cp /etc/passwd ./
[root@localhost boot]# cp /etc/hosts ./
[root@localhost boot]# vim a.txt
[root@localhost boot]# mkdir test
[root@localhost boot]# cp a.txt test/
[root@localhost boot]# ll test/
总用量 1
-rw-r--r-- 1 root root 15 6月 11 06:52 a.txt
2.用rm -rf 文件 删除创建的文件和目录(可以一个一个的删也可以一下子全部删完)
[root@localhost boot]# rm -rf a.txt
[root@localhost boot]# rm -rf hosts passwd
[root@localhost boot]# rm -rf test/
3.删除之后,最好cd ~退出原目录重新开一个终端,在新开的终端上恢复。然后你可以用mount -o ro,remount /boot以只读的方式重新挂载目录,也可以用umount /boot目录直接卸载。然后创建一个目录
[root@localhost ~]# mkdir recover
[root@localhost ~]# cd recover/
[root@localhost recover]#
4.开始恢复
可以以节点(inode)的方式恢复,他记录的是你的文件叫什么名字,在哪个块存放着
[root@localhost recover]# extundelete /dev/sda1 --inode 2 (这里要输入2)
.......
File name | Inode number | Deleted status
. 2
.. 2
lost+found 11
grub 32385
efi 32387
passwd 18 Deleted
hosts 19 Deleted
vmlinuz-2.6.32-358.el6.i686 16
initramfs-2.6.32-358.el6.i686.img 17
test 20 Deleted
a.txt 21 Deleted
可以看到被删除的文件,状态是
Deleted
进入原来的终端,进入/root/recover,如果想通过inode的方式恢复a.txt,inode 后要加上21
[root@localhost recover]# extundelete /dev/sda1 --restore-inode 21
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... 38 groups loaded.
Loading journal descriptors ... 110 descriptors loaded.
[root@localhost recover]# ll
总用量 4
drwxr-xr-x 2 root root 4096 6月 11 07:49 RECOVERED_FILES
注意:恢复后的文件默认位于 RECOVERED_FILES 里!
[root@localhost recover]# ls RECOVERED_FILES/
file.21
以inode方式恢复时都是file.文件的inode形式,查看一下该文件,正是原来删除的文件
[root@localhost recover]# cat RECOVERED_FILES/file.21
abcd
efgh
igkl
把
RECOVERED_FILES删了,用另外一种方式恢复
[root@localhost recover]# rm -rf RECOVERED_FILES/
[root@localhost recover]# ll
总用量 0
假如你知道删除的文件名,那么可以通过文件名恢复(我把刚恢复的文件又删除了)
[root@localhost recover]# extundelete /dev/sda1
--restore-file a.txt //这里是删除的文件名
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... 38 groups loaded.
Loading journal descriptors ... 110 descriptors loaded.
Successfully restored file a.txt
[root@localhost recover]# ll
总用量 4
drwxr-xr-x 2 root root 4096 6月 11 07:56 RECOVERED_FILES
[root@localhost recover]# ls RECOVERED_FILES/
a.txt
查看一下,恢复成功了!
[root@localhost recover]# cat RECOVERED_FILES/a.txt
abcd
efgh
igkl
接下来看看可不可以恢复目录(
我把刚恢复的文件又删除了)
这个恢复目录的时候有可能恢复出来也可能恢复不出来的。
[root@localhost recover]# extundelete /dev/sda1
--restore-directory /test
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... 38 groups loaded.
Loading journal descriptors ... 110 descriptors loaded.
Searching for recoverable inodes in directory /test ...
6 recoverable inodes found.
Looking through the directory structure for deleted files ...
5 recoverable inodes still lost.
可以看到,找到了6个inode,但是5个丢失了,查看一下,成功的恢复了,不错!
[root@localhost recover]# ls RECOVERED_FILES/
test
[root@localhost recover]# cat RECOVERED_FILES/test/a.txt
abcd
efgh
igkl
如果你很懒的话,也可以一下子恢复所有的文件或目录(删除所有恢复的东西重新测试)
[root@localhost recover]# extundelete /dev/sda1
--restore-all
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... 38 groups loaded.
Loading journal descriptors ... 110 descriptors loaded.
Searching for recoverable inodes in directory / ...
6 recoverable inodes found.
Looking through the directory structure for deleted files ...
1 recoverable inodes still lost.
[root@localhost recover]# ll
总用量 4
drwxr-xr-x 3 root root 4096 6月 11 08:10 RECOVERED_FILES
[root@localhost recover]# ll RECOVERED_FILES/
总用量 20
-rw-r--r-- 1 root root 15 6月 11 08:10 a.txt
-rw-r--r-- 1 root root 781 6月 11 08:10 file.32391
-rw-r--r-- 1 root root 158 6月 11 08:10 hosts
-rw-r--r-- 1 root root 1522 6月 11 08:10 passwd
drwxr-xr-x 2 root root 4096 6月 11 08:10 test
最后再重新挂载一下刚刚卸载的/dev/sda1或者/boot即可~
总之,方法就是这个方法,具体的需要你试一下!而且你还可以用extundelete --help查看一下具体的功能,根据你的需求来恢复删除的东西;