linux下恢复误删除的文件方法(ext2及ext3) 2009-12-19 15:23:47
分类: LINUX
如果是ext2文件系统的,直接用debugfs是可以恢复出来的,但对于ext3,debugfs就无能为力了,好在我们有了ext3grep这个开源工具(http://code.google.com/p/ext3grep/)!
对于ext2
1、在/data(/dev/sdb)上创建并删除测试文件(作测试目的以plantodelete为例)
#vi plantodelete
输入This text is plantodelete! 保存退出
#rm -f plantodelete
2、以只读方式remount /data,防止再次写入文件
#mount -r -n -o remount /data
如果出现busy用
#fuser -k /data
3、恢复误删除的文件
#debugfs /dev/sdb
debugfs 1.35 (28-Feb-2004)
debugfs: lsdel <-- 列出删除的文件
Inode Owner Mode Size Blocks Time deleted
12 0 100600 4096 1/ 1 Sat Dec 19 15:54:04 2009
13 0 100644 14 1/ 1 Sat Dec 19 15:54:08 2009
2 deleted inodes found.
debugfs: stat <13> <-- 察看状态
Inode: 13 Type: regular Mode: 0644 Flags: 0x0 Generation: 2897353947
User: 0 Group: 0 Size: 14
File ACL: 1033 Directory ACL: 0
Links: 0 Blockcount: 16
Fragment: Address: 0 Number: 0 Size: 0
ctime: 0x4b2c86a0 -- Sat Dec 19 15:54:08 2009
atime: 0x4b2c869c -- Sat Dec 19 15:54:04 2009
mtime: 0x4b2c869c -- Sat Dec 19 15:54:04 2009
dtime: 0x4b2c86a0 -- Sat Dec 19 15:54:08 2009
BLOCKS:
(0):8200
TOTAL: 1
debugfs: dump <13> plantodelete <-- 恢复文件
debugfs: q <-- 退出debugfs
在运行debugfs命令的当前目录下就可以看见恢复的文件了
对于ext3
1、下载并安装ext3grep
#wget -c http://ext3grep.googlecode.com/files/ext3grep-0.10.1.tar.gz
#tar zxf ext3grep-0.10.1.tar.gz
#cd ext3grep-0.10.1
#./configure
#make
#make install
依赖包
-r--r--r-- 1 root root 863808 Nov 5 19:03 e2fsprogs-1.39-33.el5.x86_64.rpm
-r--r--r-- 1 root root 587041 Nov 5 19:03 e2fsprogs-devel-1.39-33.el5.i386.rpm
-r--r--r-- 1 root root 652235 Nov 5 19:03 e2fsprogs-devel-1.39-33.el5.x86_64.rpm
-r--r--r-- 1 root root 122537 Nov 5 19:03 e2fsprogs-libs-1.39-33.el5.i386.rpm
-r--r--r-- 1 root root 122590 Nov 5 19:03 e2fsprogs-libs-1.39-33.el5.x86_64.rpm
drwxr-xr-x 3 1000 1000 4096 Nov 5 19:04 ext3grep-0.10.2
-rw-r--r-- 1 root root 236364 Nov 5 18:55 ext3grep-0.10.2.tar.gz
安装时用rpm -ivh xxxx.rpm来安装即可
2、将要恢复数据的分区umount(以 /dev/sdb /data为例 )
#umount /data
如果因为busy无法正常umount,使用
#fuser -k /data
杀掉进程再umount
3、查找并恢复误删除的文件
#ext3grep /dev/sdb --ls --inode 2
找到想要恢复的文件的inode 如 13
#ext3grep /dev/sdb --restore-file --inode 13
恢复成功后在运行ext3grep的当前目录下就会有RESTORE_FILES目录下就是恢复出来的文件