实战:在 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 

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        # 需要使用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  所示。 

image.png

图  5-12  删除前和恢复后的对比 

扩展: 

如果在根下删除文件了,想恢复,怎么办?   

方法 1:立即断电,然后把磁盘以只读方式,挂载到另一个电脑中进行恢复。 

方法 2:把 extundelete 在虚拟机上(虚拟机系统要和服务器版本一样),提前安装好后再复制到 U盘中,把 U 盘插入服务器,恢复时,恢复的文件要保存到 U 盘中(不要让恢复的数据写到/下,那样会覆盖之前删除的文件)。 

版权声明:
作者:WaterBear
链接:https://l-t.top/1226.html
来源:雷霆运维
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>