1. 原理
linux下执行rm -f 命令文件并没有被实际的删除。除非inode被删除或者覆盖,inode文件inode可以使用ls -i 查看。
此处的误删文件恢复只适用于RHEL6X系列,不适用于RHEL7X系列。RHEL7系列的误删恢复后续会讲解。
此处使用的恢复软件是extundelete,安装包: extundelete-0.2.4.tar.bz2
2. 安装
1)安装上传软件。
此处使用的windows远程工具是xshell。
yum install lresz -y #安装rz, sz
rz 选择上传的文件。
2) 安装extundelete
解压
tar -jxvf extundelete-0.2.4.tar.bz2
进入解压后的目录后三把斧(./configure, make , make install)
./configure时报错,提示缺少依赖,安装依赖:
rpm -ivh /mnt/Packages/e2fsprogs-devel-1.41.12-18.el6.x86_64.rpm
也可: yum --y install e2fsprogs.x86_64 e2fsprogs-devel.x86_64 e2fsprogs-libs.x86_64
在此./configure
make
make install
此时命令被安装到了/usr/local/bin/中。
3)创建模拟环境
新建一个分区sda2
fdisk /dev/sda
.......(分区新建过程不再赘述)
新建完分区此时ls /dev/sda*并未发现sdb2。
reboot系统
重启完系统之后: ls /dev/sda*此时出现新分区/dev/sda2
格式化分区
mkfs.etx4 /dev/sda2
新建分区挂载点
mkdir /sda2
将新建的分区挂在到/sda2
mount /dev/sda2 /sda2
检查挂载是否成功
df -h
拷入实验用的文件
cp /etc/passwd /sda2 #测试文件
cp /etc/hosts /sda2 #测试文件
mkdir -p /sda2/a/b/c
touch /sda2/a/empty.txt #空文件
cd /sda2
rm -rf hosts passwd a #删除这三个测试文件
4)文件恢复
文件被误删后第一时间要卸载掉文件所在的分区,防止已删文件的节点被使用从而导致无法恢复。
umount /dev/sdb2
查看文件节点信息,注意被删除的文件的节点号。
extundelete /dev/sda2 --inode 2
使用inode恢复单个文件
extundelete /dev/sda2 --restore-inode 文件节点号
当前文件下生成目录: RECOVERED_FILES, 进入目录目录内文件即为恢复的文件,可使用diff检查是否与源文件一致, 检查一致后将将新建分区重新挂载,将恢复的文件拷到原位置即可。
使用文件名恢复单个文件
extundelete /dev/sda2 --restore-file 文件名
使用文件名恢复目录
extundelete /dev/sda2 --restore-directory a #发现空目录和空文件未恢复
恢复分区内的搜有文件
extundelete /dev/sda2 --restore-all
3. 小结
不能恢复空目录和空文件。因为是空文件,即使未恢复也不影响,重新新建即可。