前言
本博文主要是通过VMware虚拟机来验证EXT格式和XFS格式的文件恢复,环境分别为RHEL6和CentOS7虚拟机。在两台虚拟机上的新硬盘上创建测试文件,然后模拟文件误删或丢失的情况来恢复文件。
EXT文件恢复
EXT格式的文件通过extundelete工具进行恢复,在实验开始前需要先布置环境,再安装extundelete工具,然后删掉测试文件,通过extundelete工具将文件恢复。
安装环境
[root@localhost Packages]# rpm -ivh e2fsprogs-libs-1.41.12-18.el6.x86_64.rpm
warning: e2fsprogs-libs-1.41.12-18.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
Preparing... ########################################### [100%]
package e2fsprogs-libs-1.41.12-18.el6.x86_64 is already installed
[root@localhost Packages]# rpm -ivh e2fsprogs-devel-1.41.12-18.el6.x86_64.rpm
warning: e2fsprogs-devel-1.41.12-18.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
Preparing... ########################################### [100%]
1:e2fsprogs-devel ########################################### [100%]
给主机添加一块硬盘,在新硬盘上做数据恢复测试。
[root@localhost extundelete-0.2.4]# fdisk /dev/sdb # 硬盘分区,只要创建一个分区即可
[root@localhost extundelete-0.2.4]# mkfs.ext4 /dev/sdb1 # 格式化为ext4格式
[root@localhost extundelete-0.2.4]# cd
[root@localhost ~]# mkdir /data # 创建挂载点
[root@localhost ~]# mount /dev/sdb1 /data # 挂载
[root@localhost ~]# df -Th | grep /data # 查看挂载
/dev/sdb1 ext4 20G 172M 19G 1% /data
安装extundelete工具
[root@localhost ~]# tar jxf extundelete-0.2.4.tar.bz2
[root@localhost extundelete-0.2.4]# ./configure && make && make install
# 安装好后,extundelete命令在/usr/local/bin中,可以直接使用,如果没有,可以创建一个软链接
创建、删除测试文件
[root@localhost ~]# cd /data
[root@localhost data]# ls
lost+found
[root@localhost data]# echo 1 > 1 # 写1、2、3三个文件
[root@localhost data]# echo 2 > 2
[root@localhost data]# echo 3 > 3
[root@localhost data]# rm -rf 2 # 删除文件2
[root@localhost data]# ls
1 3 lost+found
恢复被删除的测试文件
[root@localhost data]# cd
[root@localhost ~]# umount /data # 数据恢复前先解挂载
[root@localhost ~]# extundelete /dev/sdb1 --restore-all # 数据恢复
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... 160 groups loaded.
Loading journal descriptors ... 24 descriptors loaded.
Searching for recoverable inodes in directory / ...
1 recoverable inodes found.
Looking through the directory structure for deleted files ...
0 recoverable inodes still lost.
[root@localhost ~]# ls # 查看当前目录下RECOVERED_FILES目录
anaconda-ks.cfg install.log 公共的 图片 音乐
extundelete-0.2.4 install.log.syslog 模板 文档 桌面
extundelete-0.2.4.tar.bz2 RECOVERED_FILES 视频 下载
[root@localhost ~]# cd RECOVERED_FILES/
[root@localhost RECOVERED_FILES]# ls # 可以看到被删除的2
2
[root@localhost RECOVERED_FILES]# cat 2 # 之后再把文件复制到需要的地方
2
XFS文件恢复
思路也和EXT文件恢复差不多,XFS文件使用的工具是xfsdump,与extundelete工具不同的是,XFS文件需要实现对文件进行备份。
安装工具
[root@localhost ~]# yum -y install xfsdump &> /dev/null
准备硬盘
[root@localhost ~]# mkfs.xfs /dev/sdb1 &> /dev/null # 分好区后格式化为xfs格式
[root@localhost ~]# mkdir /data # 创建挂载点
[root@localhost ~]# mount /dev/sdb1 /data # 挂载到/data
[root@localhost ~]# df -Th | grep /data # 查看挂载
/dev/sdb1 xfs 20G 33M 20G 1% /data
往硬盘上写文件
[root@localhost ~]# cd /data
[root@localhost data]# ls
[root@localhost data]# echo "this is test" > test.txt # 准备测试文件
[root@localhost data]# mkdir ./dir1
[root@localhost data]# echo "abc" > ./dir1/letters.txt
[root@localhost data]# yum -y install tree &> /dev/null # tree命令可以树形展示目录内容
[root@localhost data]# tree
.
├── dir1
│ └── letters.txt
└── test.txt
1 directory, 2 files
备份数据
[root@localhost data]# cd
[root@localhost ~]# xfsdump -f /opt/xfs_dump /dev/sdb1 # 备份文件放在/opt/xfs_dump,被备份硬盘为/dev/sdb1
xfsdump: using file dump (drive_simple) strategy
xfsdump: version 3.1.7 (dump format 3.0) - type ^C for status and control
============================= dump label dialog ==============================
please enter label for this dump session (timeout in 300 sec)
-> xfs_dump
session label entered: "xfs_dump"
--------------------------------- end dialog ---------------------------------
……省略部分信息……
============================= media label dialog =============================
please enter label for media in drive 0 (timeout in 300 sec)
-> sdb1
media label entered: "sdb1"
--------------------------------- end dialog ---------------------------------
……省略部分信息……
删除测试文件
[root@localhost ~]# rm -rf /data/*
恢复数据
[root@localhost ~]# xfsrestore -f /opt/xfs_dump /data/ # 使用/opt/xfs_dump来恢复/data下的文件
[root@localhost ~]# tree /data/
/data/
├── dir1
│ └── letters.txt
└── test.txt
1 directory, 2 files
总结
ext4在恢复的时候需要解挂载,而xfs则需时刻都是被挂载状态,且xfsdump的命令应只有root能使用;ext4在丢失前不需备份,而xfsdump需要进行备份。