5.4 实战3:在CentOS 6/RHEL 6上恢复ext4文件系统上误删除的文件
本实验针对ext4文件系统进行操作,如果是XFS文件系统不能执行此实验,本实验用于在误删文件后进行文件恢复。
首先对根目录尝试执行删除。
5.4.1 恢复文件相关工具
在ext4文件系统上误删除的文件,可以使用extundelete工具进行恢复。
在ext3文件系统上误删除的文件,可以使用ext3grep工具进行恢复。
在Windows文件系统上误删除的文件,可以使用final data v2.0汉化版和easyrecovery进行恢复。
5.4.2 知识扩展
Linux文件系统由3部分组成:文件名、inode、block。Windows文件系统也由这三部分组成。
block指磁盘块,是存储数据的地方。
为什么删除文件比复制文件快?因为删除文件时首先找到对应的目录条目,将其删除,然后把目录条目上对应的inode号码在inode位图中标为空,不需要删除该inode,也不需要清空该inode中保存的数据,当再次存储文件时,用新文件的inode覆盖该inode即可。该删除文件的数据所占用的磁盘块也不需要删除,也不需要清空数据,只需要在磁盘块的位图中标记删除文件的数据所占用的磁盘块为未使用,磁盘块中存储的数据则不会做任何删除或更改操作。如果要存储新的数据,把这些磁盘块当作未使用的,直接用新数据覆盖原有的数据。
复制文件即创建一个新文件,并把原来的数据填充到新文件的磁盘块上。
因此,删除只是删除文件名,实际数据并没有删除,而复制则需要数据填充,此过程需要时间,所以删除会比复制快,如图5-11所示。
图5-11 文件、inode、block分层图
5.4.3 在ext4文件系统上恢复被误删除的文件
1.准备测试分区
2.重启主机或刷新分区表
3.使用新的分区表
4.复制一些测试文件,然后把这些文件删除,最后恢复
(1)复制 /etc/passwd文件到/tmp/sda4/目录下。
(2)复制 /etc/hosts文件到/tmp/sda4/目录下。
(3)使用echo命令在当前目录下生成a.txt文件。
(4)递归创建/tmp/sda4/a/b/c目录。
(5)复制a.txt文件到 /tmp/sda4/a/目录下。
(6)复制a.txt文件到 /tmp/sda4/a/b目录下。
(7)使用touch命令在/tmp/sda4/a/b/目录下生成kong.txt文件。
(8)安装tree命令。
(9)使用tree命令查看/tmp/sda4/目录结构。
5.删除文件
6.安装extundelet
(1)从Windows上传extundelete文件到Linux,使用yum安装lrzsz工具,5.2节有讲解。
(2)解压并安装extundelet。
(3)使用yum安装e2fsprogs-devel程序。
注意:-j 4:使用4进程同时编译,提升编译速度,或使用4核CPU同时编译。
(4)安装
知识扩展:install命令和cp命令有什么区别?
用install命令复制时可以指定权限,而cp命令不可以。
7.开始恢复
方法1:通过inode结点恢复。
方法2:通过文件名恢复。
方法3:恢复某个目录,如目录a下的所有文件。
方法4:恢复所有文件。
(1)创建一个目录用于存放恢复的数据。
(2)通过inode结点查看被删除的文件名。
知识扩展:ext4文件系统的分区根目录的inode值为2,XFS文件系统的分区根目录的inode值为64。
(3)挂载分区。
(4)方法1:通过inode结点恢复。
(5)方法2:通过文件名恢复。
(6)方法3:恢复某个目录,如目录a下的所有文件。
下面是原来的目录结构。
(7)方法4:恢复所有文件。
文件删除前和恢复后的对比,如图5-12所示。
图5-12 文件删除前和恢复后的对比
知识扩展:如果在根目录下删除文件了,想恢复,怎么办?
方法1:立即断电,然后把磁盘以只读方式挂载到另一台计算机中进行恢复。
方法2:把extundelete安装在虚拟机上(虚拟机上系统的版本要和服务器上系统的版本一样),安装好后再复制到U盘中,恢复时,把U盘插入服务器,恢复的文件要保存到U盘中(不要让恢复的文件写到根目录下,这样会覆盖之前删除的文件)。