debugfs是linux系统自带的一个文件恢复工具,它
可以恢复ext2文件系统的文件,但不能恢复ext3文件系统的文件,下面以一个实例来讲解debugfs恢复文件的方法。
首先增加一个虚拟硬盘,分区,格式化(mkfs.ext2),挂载分区。虚拟机环境实现。
实验分区为/dev/sdb2 ,创建分区步骤省略。
[root@oracledb ~]# mkfs.ext2 /dev/sdb2
新建一个目录,挂载上去
[root@oracledb /]# mkdir guazai
[root@oracledb /]# mount /dev/sdb2 /guazai
新建一个文件,vi file.txt 随便写点内容即可。
[root@oracledb guazai]# ll
total 20
-rw-r--r-- 1 root root 40 Jul 30 15:42 file.txt
drwx------ 2 root root 16384 Jul 30 15:39 lost+found
为了模拟故障,使用rm命令删除file.txt
[root@oracledb guazai]# rm -rf file.txt
[root@oracledb guazai]# ll
total 16
drwx------ 2 root root 16384 Jul 30 15:39 lost+found
该分区上的file.txt被删除了,怎样将其恢复回来呢?下面就是见证奇迹的时刻。
重新挂载分区,以只读方式
[root@oracledb ~]# mount -r -o remount /dev/sdb2
-r表示以只读方式,注意必须设置为只读方式
验证是否设置成功
[root@oracledb ~]# cd /guazai
[root@oracledb guazai]# mkdir aa
mkdir: cannot create directory `aa': Read-only file system
表示设置只读方式成功。
如果不能重新挂载,执行命令查看是谁正在使用该分区的文件
[root@oracledb guazai]# fuser -v -m /dev/sdb2
因为在这里是实验,故没有重要的进程和用户,直接将其杀死
[root@oracledb guazai]# fuser -k -v -m /dev/sdb2
执行命令debugfs
[root@oracledb guazai]# debugfs /dev/sdb2
debugfs 1.39 (29-May-2006)
debugfs:
在debugfs提示符下输入命令:lsdel 可以看到以下信息:
debugfs: lsdel
Inode Owner Mode Size Blocks Time deleted
12 0 100600 4096 1/ 1 Thu Jul 30 15:42:13 2009
13 0 100644 40 1/ 1 Thu Jul 30 15:43:56 2009
2 deleted inodes found.
如果不知道以前被删除的文件名,可输入命令 ls -d查看
debugfs: ls -d
2 (12) . 2 (12) .. 11 (4072) lost+found <0> (24) .file.txt.swp
<0> (4028) file.txt
从时间来看,删除的文件应该是inode为13的文件
使用dump来恢复:
debugfs:dump <13> /root/file.txt
其中13为inode,/root/file.txt为要恢复到得路径,路径和文件名可以随便设置
退出查看
debugfs: quit
[root@oracledb ~]# pwd
/root
[root@oracledb ~]# ll file.txt
-rw-r--r-- 1 root root 40 Jul 30 15:52 file.txt
[root@oracledb ~]# cat file.txt
wo shi file file.txt
filesystem is ext2
恢复的文件就是我之前删除过的file.txt文件。如果不是的话,把13改成12就可以了。
好了ext2文件系统的文件恢复就到这里了,希望对大家有所帮助。