实战:在 CentOS6/RHEL6 上恢复 ext4 文件系统下误删除的文件
本实验针对 ext4 文件系统进行操作,如果是 xfs 文件系统不能执行此实验,本实验用于在误删文件后进行文件恢复。
首先对根目录尝试执行删除:
# rm -rf / #由于根目录受安全模式保护,执行不成功的。
rm: 在"/" 进行递归操作十分危险。
rm: 使用 --no-preserve-root 选项跳过安全模式。
# rm -rf /* #但可以删除根目录下所有内容。
恢复文件相关工具:
1) ext4 文件系统上删除文件,可以使用 extundelete 工具进行恢复。
2) ext3 文件系统上删除文件,可以使用 ext3grep 工具进行恢复。
3) Windows 恢复误删除的文件:final data v2.0 汉化版和 easyrecovery。
在 ext4 文件系统上恢复被误删除的文件
extundelete 程序下载地址 http://sourceforge.net/ #开源软件发布中心上下载到本地电脑,然后 rz 上传到 Linux 系统上。
1. 准备测试分区:
[root@xuegod63 /]# fdisk /dev/sda #创建一个 sda4 分区。
这里省略分区过程……!
准备测试的数据过程省略!准备数据如下:
# tree /tmp/sda4/
/tmp/sda4/
├── a
│ ├── a.txt
│ └── b
│ ├── a.txt
│ ├── c #空目录
│ └── kong.txt #空文件
├── hosts
├── lost+found
└── passwd
2、数据恢复
误删除文件后,第一件事要做什么?如何避免误删除的文件内容被覆盖?
⑴卸载需要恢复文件的分区,或以只读的方式挂载。
[root@localhost ~]#cd /root
[root@localhost ~]# umount /tmp/sda4
⑵ 安装恢复软件 extundelet (可以到http://sourceforge.net/ 开源软件发布中心搜索下载)
上传 extundelete 的RPM包到 linux 中:
从 Windows 上传 extundelete 文件到 Linux,使用 yum 安装 lrzsz 工具,如果未安装lrzsz使用下面命令安装lrzsz。
1)# yum -y install lrzsz
# rz #使用 rz 命令上传安装包,rz 命令后会出现上传物理主机文件到Linux 的对话框,并选择此前下载的 extundelete 程序包。
⑶ 解压并安装 extundelet
# tar jxvf extundelete-0.2.4.tar.bz2 #解压 extundelete 程序。
# cd extundelete-0.2.4 #切换到解压后的程序包目录。
⑷ 使用 Yum 安装 e2fsprogs-devel 程序:
# yum install e2fsprogs-devel
# ./configure #检查系统安装环境。
# make -j 4 #编译,把源代码编译成可执行的二进制文件。
注: -j 4 使用 4 进程同时编译,提升编译速度 戒 使用 4 核 CPU 同时编译。
⑸ # make install #安装。
扩展:
install 和 cp 有什么区别?
install 复制时可以指定权限,而 cp 命令不可以。
⑹ 开始恢复:
方法一:通过 inode 结点恢复。
方法二:通过文件名恢复。
方法三:恢复某个目录,如目录 a 下的所有文件。
方法四:恢复所有的文件。
1)[root@xuegod63 ~]# mkdir test #创建一个目录使用于存放恢复的数据。
[root@xuegod63 ~]# cd test/ #切换目录。
2)通过 inode 结点查看被删除的文件名字:
[root@xuegod63 test]# extundelete /dev/sda4 --inode 2
. 2
lost+found 11
passwd 12 Deleted
hosts 13 Deleted
a 7313 Deleted
扩展:
ext4 文件系统的分区根目录的 inode 值为 2,xfs 分区根目录的 inode 值为 64。
# ls -id /boot/ #xfs 文件系统。
64 /boot/
3)# mount /dev/sda4 /tmp/sda4/ #挂载分区。
# ls -id /tmp/sda4/ #查看分区的 inode 号。
2 /tmp/sda4/
4)# umount /tmp/sda4/ #卸载分区。
5)方法一:通过 inode 结点恢复
# extundelete /dev/sda4 --restore-inode 12 #需要使用 inode 指定indoe 号。
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... 9 groups loaded.
Loading journal descriptors ... 63 descriptors loaded.
[root@xuegod63 test]# ls
RECOVERED_FILES #恢复后会自动命名 RECOVERED_FILES
[root@xuegod63 test]# diff /etc/passwd RECOVERED_FILES/file.12 #没有任何输出,说明一样。
方法二:通过文件名恢复
# extundelete /dev/sda4 --restore-file passwd #需要使用 file 指定文件。
# diff /etc/passwd RECOVERED_FILES/passwd # 没有任何输出,说明文件是一样的。
方法三:恢复某个目录,如目录 a 下的所有文件:
# extundelete /dev/sda4 --restore-directory a # 需要使用directory指定目录。
# tree RECOVERED_FILES/a/
RECOVERED_FILES/a/
├── a.txt
└── b
└── a.txt
下面是原来的目录结构:
[root@xuegod63 ~]# tree /root/sda4-back/a/
/root/sda4-back/a/
├── a.txt
└── b
├── a.txt
├── c
└── kong.txt
方法四:恢复所有的文件。
# extundelete /dev/sda4 --restore-all #使用 all 指定即可。
删除前后的数据,如图 5-12 所示。
图 5-12 删除前和恢复后的对比
扩展:
如果在根下删除文件了,想恢复,怎么办?
方法 1:立即断电,然后把磁盘以只读方式,挂载到另一个电脑中进行恢复。
方法 2:把 extundelete 在虚拟机上(虚拟机系统要和服务器版本一样),提前安装好后再复制到 U盘中,把 U 盘插入服务器,恢复时,恢复的文件要保存到 U 盘中(不要让恢复的数据写到/下,那样会覆盖之前删除的文件)。