数据 rm -rf 后 ,在EXT3、EXT4、XFS文件系统中的恢复过程。【转载】

一、前言

1、数据保存分区,单独给一个分区

2、备份重要数据,验证备份数据的可用性

3、数据在被 rm -rf 之后,不要再继续写入新数据,不要紧张,卸载(umount)掉对应的数据分区。

4、忘记 rm 命令,执行扩容、删除、迁移时三思命令的准确性

5、数据备份、数据备份、数据备份(本地、异地 等)

      ... ... ... ...

 

二、文件删除原理           

  在日志文件系统中(EXT3、EXT4、XFS文件系统中 ),inode索引节点除了存放文件属性还指向文件的block节点,是书的目录,block存放文件的实际数据,是书的每一页。文件的上级目录的block存放是文件名及其inode节点编号,删除文件实际上是删除文件名和inode节点编号的关联以及inode节点内的指针信息,那么实际上,文件的block还在,加上EXT3、EXT4、XFS文件系统是日志文件系统,格式化时会分配一个固定大小的空间的日志文件journal,它记录创建和删除文件的记录,当删除一个文件,操作系统首先把文件inode信息和文件名称写入到journal,然后删除文件并清空inode原始数据指针。

 

三、有两种情况无法恢复(从备份中恢复)

1、当新数据写入到被删除文件占用的block后,原来的inode号就指向新的数据,数据只能从备份中恢复

2、当journal日志文件存满之后,会释放前面的空间,循环使用,存放最新的记录,如果删除文件的记录被覆盖,数据只能从备份中恢复

 

四、数据恢复的原理   

  根据journal日志文件残留的inode的信息,定位到相关目录,恢复残留inode对应的block。但日志文件恢复只适合小数据量的恢复【可以尝试大文件恢复】,因为journal的空间有限,存放不了太多的记录。对于大文件如Oracle等数据库文件恢复采用逆向推算和数据文件本身特点来提取【太高深,不懂,不知所云】。

 

五、误删数据的恢复过程 EXT4 文件系统分区。【做实验在虚拟机下,没成功恢复。-- _ -- 】

1、同步服务器时间

1 #yum install -y rdate
2 #rdate -s time-b.nist.gov
3 #clock -w

2、模拟数据被删除

1 # ls /home/test/
   haha.zip
2 # rm -rf /home/test/

3、卸载对应分区或挂载成只读

1 # df -hT
  Filesystem                    Type   Size  Used Avail Use% Mounted on
  /dev/mapper/VolGroup-LogVol01 ext4    15G  1.9G   13G  14% /
 tmpfs                         tmpfs  931M     0  931M   0% /dev/shm
 /dev/sda1                     ext4   194M   34M  150M  19% /boot
 /dev/mapper/VolGroup-LogVol00 ext4   4.9G  138M  4.5G   3% /home
2
##杀掉访问指定文件的进程 http://blog.chinaunix.net/uid-7553302-id-2753021.html 3 # fuser -m -v -k /home/haha.zip 4 ##卸载分区 5 # umount /home/

4、安装extundelete工具 http://extundelete.sourceforge.net/

 1 ##安装依赖包、编译工具
 2 #yum -y install  e2fsprogs*  gcc gcc-c++  make 3 ##下载extundelete工具
 4 #wget http://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2
 5 ##解压编译安装extundelete工具,灰色为输出信息
 6 #tar xf extundelete-0.2.4.tar.bz2 -C /usr/src/
 7 #cd /usr/src/extundelete-0.2.4/
 8 #./configure --prefix=/usr/local/extundelete
   Configuring extundelete 0.2.4
   Writing generated files to disk
9 #make && make install
   make -s all-recursive
   Making all in src
   extundelete.cc:571: warning: unused parameter ‘flags’
   Making install in src
   /usr/bin/install -c extundelete '/usr/local/extundelete/bin'
10 ##查看工具使用帮助 11 #/usr/local/extundelete/bin/extundelete --help
  其中,参数(options)有:   --version, -[vV],显示软件版本号。     --help,显示软件帮助信息。   --superblock,显示超级块信息。   --journal,显示日志信息。   --after dtime,时间参数,表示在某段时间之后被删的文件或目录。   --before dtime,时间参数,表示在某段时间之前被删的文件或目录。   动作(action)有:   --inode ino,显示节点“ino”的信息。   --block blk,显示数据块“blk”的信息。   --restore-inode ino[,ino,...],恢复命令参数,表示恢复节点“ino”的文件,恢复的文件会自动放在当前目录下的RESTORED_FILES文件夹中,使用节点编号作为扩展名。   --restore-file 'path',恢复命令参数,表示将恢复指定路径的文件,并把恢复的文件放在当前目录下的RECOVERED_FILES目录中。   --restore-files 'path',恢复命令参数,表示将恢复在路径中已列出的所有文件。   --restore-all,恢复命令参数,表示将尝试恢复所有目录和文件。   -j journal,表示从已经命名的文件中读取扩展日志。   -b blocknumber,表示使用之前备份的超级块来打开文件系统,一般用于查看现有超级块是不是当前所要的文件。   -B blocksize,通过指定数据块大小来打开文件系统,一般用于查看已经知道大小的文件。

5、使用extundelete查看分区上存在的文件。

###--inode 显示inode的信息 数字2表示没弄懂具体什么含义,测试 1、2、3、4除了2有输出,其他没有,有人说 2 是根的节点号。【太高深,不懂】

[root@localhost extundelete-0.2.4]# /usr/local/extundelete/bin/extundelete --inode 2 /dev/mapper/VolGroup-LogVol00 NOTICE: Extended attributes are not restored. Loading filesystem metadata ... 40 groups loaded. Group: 0 Contents of inode 2: 0000 | ed 41 00 00 00 10 00 00 f1 ed a3 5a 2c ee a3 5a | .A.........Z,..Z 0010 | 2c ee a3 5a 00 00 00 00 00 00 03 00 08 00 00 00 | ,..Z............ 0020 | 00 00 00 00 02 00 00 00 9a 20 00 00 00 00 00 00 | ......... ...... 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 b0 c0 a0 2c b0 c0 a0 2c 4c 4d 41 58 | .......,...,LMAX 0090 | 71 e9 a3 5a 00 00 00 00 00 00 00 00 00 00 02 ea | q..Z............ 00a0 | 07 06 3c 00 00 00 00 00 21 00 00 00 00 00 00 00 | ..<.....!....... 00b0 | 73 65 6c 69 6e 75 78 00 00 00 00 00 00 00 00 00 | selinux......... 00c0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................ 00d0 | 00 00 00 00 00 00 00 00 00 00 00 00 73 79 73 74 | ............syst 00e0 | 65 6d 5f 75 3a 6f 62 6a 65 63 74 5f 72 3a 68 6f | em_u:object_r:ho 00f0 | 6d 65 5f 72 6f 6f 74 5f 74 3a 73 30 00 00 00 00 | me_root_t:s0.... Inode is Allocated File mode: 16877 Low 16 bits of Owner Uid: 0 Size in bytes: 4096 Access time: 1520692721 Creation time: 1520692780 Modification time: 1520692780 Deletion Time: 0 Low 16 bits of Group Id: 0 Links count: 3 Blocks count: 8 File flags: 0 File version (for NFS): 0 File ACL: 0 Directory ACL: 0 Fragment address: 0 Direct blocks: 8346, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 Indirect block: 0 Double indirect block: 0 Triple indirect block: 0 File name | Inode number | Deleted status . 2 .. 2 lost+found 11 test 128001 Deleted

6、恢复文件【注意看上边出现的  inode number :128001 的test文件为Deleted】 

1 # --restore-all是全部恢复 ,默认全将恢复出来的文件放在当前路径 RECOVERED_FILES/ 目录下,文件名为 file.I节点号
2 # /usr/local/extundelete/bin/extundelete --restore-all  /dev/mapper/VolGroup-LogVol00 
3 # /usr/local/extundelete/bin/extundelete --restore-file 文件名 /dev/mapper/VolGroup-LogVol00
4 # /usr/local/extundelete/bin/extundelete --restore-inode 12 /dev/mapper/VolGroup-LogVol00

   ##备注:恢复指定的时间点后被删文件
   ##1).指定一个时间点
 5 #date -d "Mar 10 00:40:23 2018" +%s
   1520613623
   ##2).恢复这个时间点后的文件
  6 # /usr/local/extundelete/bin/extundelete --restore-all --after “1520613623” /dev/mapper/VolGroup-LogVol00

    ##注:如果要恢之前的就用before参数。extundelete命令与after结合使用,在进行恢复时非常有用,可以过滤掉那太旧的文件,减小恢复压力。

7、重新挂载分区,并恢复数据

8、其他数据恢复工具   ext4magic

  下载链接  https://sourceforge.net/projects/ext4magic/?source=typ_redirect

 

六、恢复EXT3文件系统分区的数据 【没做过实验】

1、上面介绍的是在EXT4文件系统分区的文件删除后的恢复,也可以尝试恢复EXT3文件系统。EXT3文件系统可以使用debugfs工具,这是linux系统自带工具,debugfs恢复EXT3的文件系统中被rm、rm -f 掉的文件。

 1 # df -T
 2     Filesystem Type 1K-blocks Used Available Use% Mounted on
 3     /dev/sda3 ext3 151189708 2370036 141139672 2% /
 4     tmpfs tmpfs 32960412 0 32960412 0% /dev/shm
 5     /dev/sda1 ext3 198337 26798 161299 15% /boot
 6 
 7 ##创建一个文件
 8 # mkdir test
 9 # echo "123456" > /root/test/test.file
10 
11 ##删除文件
12 # rm -rf /root/test/test.file
13 
14 ##接着运用系统自带工具debugfs来恢复已删除的文件
15 ##首先打开,刚刚被删除文件所在的分区
16 ##注意上面显示的有<>尖括号内的数字就是我们要找的文件Inode号,执行logdump –i <8654024>
17 
18 # debugfs
19     debugfs 1.41.12 (17-May-2010)
20     debugfs: open /dev/sda3
21     debugfs: ls -d /root/test
22     8654023 (12) . 8519681 (4084) .. <8654024> (4072) test.file
23     debugfs: logdump -i 8654024
24     FS block 1006 logged at sequence 404351, journal block 7241
25     (inode block for inode 15):
26     Inode: 15 Type: regular Mode: 0664 Flags: 0×0 Generation: 0
27     User: 0 Group: 0 Size: 20
28     File ACL: 0 Directory ACL: 0
29     Links: 1 Blockcount: 8
30     Fragment: Address: 0 Number: 0 Size: 0
31     ctime: 0×48159f2d — Mon Apr 28 15:25:57 2008
32     atime: 0×48159f27 — Mon Apr 28 15:25:51 2008
33     mtime: 0×4806f070 — Thu Apr 17 12:08:40 2008
34     Blocks: (0+1): 102348
35     No magic number at block 7247: end of journal.
36 
37 ##执行完命令后,显示了一屏信息,需要注意的是下面Blocks这一行后面的值(如上信息,需要记住Blocks这一行后面的数字102348)
38 ##输入quit,退出debugfs
39 ##debugfs: quit
40 
41 ##执行如下命令进行恢复:
42 # dd if=/dev/sda3 of=/tmp/test.file.bk bs=4096 count=1 skip=102348
43     1+0 records in
44     1+0 records out
45     4096 bytes (4.1 kB) copied, 0.0110028 s, 372 kB/s
46 
47 ##最后查看tmp目录下,发现已经恢复了我们之前删除的文件内容
48 # cd /tmp/
49 # cat test.file.bk
50 # mv test.file.bk /root/test.file
51 # cat /root/test.file
52    123456        

 2、其他工具 ext3grep

 

七、恢复XFS文件系统分区数据

  xfs用xfs_irecover工具恢复。
  http://www.ufsexplorer.com/rdr_xfs.php

以下摘自官网。
------------------------------------------------------------
Q: Does the filesystem have an undelete capability?

There is no undelete in XFS.

However, if an inode is unlinked but neither it nor its associated data blocks get immediately re-used and overwritten, there is some small chance to recover the file from the disk.

photorec, xfs_irecover or xfsr are some tools which attempt to do this, with varying success.

There are also commercial data recovery services and closed source software like Raise Data Recovery for XFS which claims to recover data, although this has not been tested by the XFS developers.

As always, the best advice is to keep good backups.
------------------------------------------------------------

 

 

 

转载于:https://www.cnblogs.com/hbgs/articles/8540846.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值