©著作权归作者所有:来自51CTO博客作者赛里的原创作品,如需转载,请注明出处,否则将追究法律责任
https://blog.51cto.com/net881004/2083393
警告:当误删后,不要再对服务器进行写磁盘。
一、文件删除原理
在ext3/4文件系统中,inode索引节点除了存放文件属性还指向文件的block节点,是书的目录,block存放文件的实际数据,是书的每一页,文件的上级目录的block存放的是文件名及其inode节点编号,删除文件实际上是删除文件名和inode节点编号的关联以及inode节点内的指针信息,那么实际上,文件的block还在,加上ext3/4文件系统是日志文件系统,格式化时会分配一个固定大小的空间的日志文件journal,它记录创建和删除文件的记录,当删除一个文件,操作系统首先把文件inode信息和文件名称写入到journal,然后删除文件并清空inode原始数据指针。
二、有两种情况无法恢复
1)当新的数据写入到被删除文件占用的block后,原来的inode号就指向新的数据,那么这样是无法找回的。
2)当journal日志文件存满之后,会释放前面的空间,循环使用,存放最新的记录,如果删除文件的记录被覆盖,是恢复不了的。
三、恢复文件的原理
根据journal日志文件残留inode的信息,定位到相关目录,恢复残留inode对应的block。但日志文件恢复只适合小数据量的恢复,因为journal的空间有限,存放不了太多记录。对于大文件如oracle等数据库文件恢复采用逆向推算和数据文件本身特点来提取。
此列以/home分区为例。如果是根分区的数据被误删,这个恢复起来很麻烦,大概可以进单用户模式下只读方式挂载根分区,然后恢复。或者把整个硬盘取出来后,挂载到另外一台linux服务器上操作。
一、恢复ext4分区误删数据(亲自测试过,正常)
1、同步服务器时间。
[root@localhost ~]#yum install -y rdate [root@localhost ~]#rdate -s time-b.nist.gov [root@localhost ~]#clock -w
2、安装extundelete工具。
[root@localhost ~]#yum -y install e2fsprogs* gcc gcc-c++ gcc-g77 [root@localhost ~]#wget http://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2 [root@localhost ~]#tar -jxvf extundelete-0.2.4.tar.bz2 [root@localhost ~]#cd extundelete-0.2.4 [root@localhost ~]#./configure --prefix=/usr/local/extundelete [root@localhost ~]#make && make install [root@localhost ~]#/usr/local/extundelete/bin/extundelete --help
3、模拟误删除数据
[root@localhost ~]# rm -rf /home/netdisk 误删除
4、建议先停止一些频繁读写磁盘的服务。
[root@localhost ~]# for i in `chkconfig --list |grep kkmail|awk '{print $1}'`;do /etc/init.d/$i stop;done
5、恢复操作。
(1)卸载/home分区
[root@localhost ~]# fuser -k /home [root@localhost ~]# umount /home/
(2)使用extundelete查看分区上存在的文件,如下:--inode 为查找某i节点中的内容,使用2则说明为搜索,如果需要进入目录搜索,只须要指定目录I节点即可
[root@localhost ~]# /usr/local/extundelete/bin/extundelete --inode 2 /dev/mapper/VolGroup-lv_home NOTICE: Extended attributes are not restored. Loading filesystem metadata ... 45 groups loaded. Group: 0 Contents of inode 2: 0000 | ed 41 00 00 00 10 00 00 d5 21 9e 5a 3f 24 9e 5a | .A.......!.Z?$.Z 0010 | 3f 24 9e 5a 00 00 00 00 00 00 03 00 08 00 00 00 | ?$.Z............ 0020 | 00 00 00 00 02 00 00 00 68 21 00 00 00 00 00 00 | ........h!...... 0030 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................ 0040 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................ 0050 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................ 0060 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................ 0070 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................ 0080 | 1c 00 00 00 64 61 01 9b 64 61 01 9b 68 7f 3e 58 | ....da..da..h.>X 0090 | 38 15 9e 5a 00 00 00 00 00 00 00 00 00 00 02 ea | 8..Z............ 00a0 | 07 06 3c 00 00 00 00 00 21 00 00 00 00 00 00 00 | ..