恢复ECS误删数据的最佳实践
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了恢复ECS误删数据的最佳实践相关的知识,希望对你有一定的参考价值。
1.1 背景知识
Linux删除说明
在 Linux 系统下,通过命令 rm -rf 可以将任何数据直接从硬盘删除,并且没有任何提示,同时 Linux 下也没有与 Windows 下回收站类似的功能,也就意味着,数据在删除后通过常规的手段是无法恢复的,因此使用这个命令要非常慎重。在使用 rm 命令的时候,比较稳妥的方法是:
1)把命令参数放到后面,这样有一个提醒的作用。
2)将要删除的东西通过 mv 命令移动到系统下的 /tmp 目录下,然后写个脚本定期执行清除操作
如上做法可以在一定程度上降低误删除数据的危险性。
其实保证数据安全最好的方法是做好备份,虽然备份不是万能的,但是没有备份是万万不能的。任何数据恢复工具都有一定局限性,都不能保证完整地恢复出所有数据,因此,把备份作为核心,把数据恢复工具作为辅助是运维人员必须坚持的一个准则。
Extundelete工具简介
Extundelete 是基于 linux 的开源数据恢复软件。在使用阿里云的云服务器时,如果您不小心误删除数据,并且 Linux 系统也没有与 Windows 系统下回收站类似的功能,您可以方便快速安装此工具。
在利用 extundelete 恢复文件时并不依赖特定文件格式,首先extundelete会通过文件系统的inode信息(根目录的inode一般为2)来获得当前文件系统下所有文件的信息,包括存在的和已经删除的文件,这些信息包括文件名和inode。然后利用inode信息结合日志去查询该inode所在的block位置,包括直接块,间接块等信息。最后利用dd命令将这些信息备份出来,从而恢复数据文件。该工具最给力的一点就是支持ext3/ext4双格式分区恢复,基于整个磁盘的恢复功能较为强大。
注意:在实际线上恢复过程中,切勿将extundelete安装到你误删的文件所在硬盘,这样会有一定几率将需要恢复的数据彻底覆盖
适用对象
适用于网站访问量小、有少量 ECS 实例或服务器的用户。
本实验使用的软件及版本:
- e2fsprogs-devel e2fsprogs (相关的依赖库) gcc-c++ make(编译器等)
- Extundelete-0.2.4
说明:extundelete需要libext2fs版本1.39或更高版本来运行,但是对于ext4支持,请确保您有e2fsprogs版本1.41或更新版本(可以通过运行命令“dumpe2fs”并记录其输出的版本)。
说明:以上版本是写文档时的软件版本。您下载的版本可能与此不同。
2.2 安装部署extundelete工具
本小节的主要内容:在Linux环境中,安装部署extundelete工具。
1. 远程登录到本实验提供的Linux操作实验环境。登录时,请使用 我的实验资源 提供的 extundelete数据恢复(Linux)ECS实例的 外网地址,用户 以及 密码。
说明:用户通过本地远程访问Linux操作系统的详细操作步骤,请参考 帮助文档 中 Mac用户 远程访问Linux系统 或 Windows用户 远程访问Linux系统。
2. 执行如下命令,查看已下载的extundelete安装包:extundelete-0.2.4.tar.bz2 。
ls
说明:本实验已下载 extundelete安装包,用户可通过如下命令,下载 extundelete安装包。
wget http://zy-res.oss-cn-hangzhou.aliyuncs.com/server/extundelete-0.2.4.tar.bz2
3. 执行如下命令,安装tundelete的相关依赖和库:
yum -y install bzip2 e2fsprogs-devel e2fsprogs gcc-c++ make
等待1-3分钟,完成相关的依赖和库的安装和编译。
4. 执行如下命令,解压extundelete到当前目录下。
tar -xvjf extundelete-0.2.4.tar.bz2
5. 执行如下命令,查看解压结果:
ls
6. 执行如下命令,进入extundelete-0.2.4的目录中:
cd extundelete-0.2.4
7. 执行如下命令,检测系统配置,并生成makefile:
./configure
8. 执行如下命令,编译安装extundelete软件:
make && make install
完成后,通过运行结果可以看到默认文件是安装到usr/locla/bin的路径下。
9. 执行如下命令,进入新增src目录,并查看extundelete可执行文件。
cd src
ls
至此,完成extundelete工具的全部安装部署。
说明:可以通过如下命令,查看 extundelete工具的参数使用说明。具体的参数说明信息,请参考本实验的 常见问题。
extundelete --help
2.3 模拟数据误删除
本小节主要内容:挂载一块数据盘,并在数据盘中写入新的数据,并模拟数据删除操作。
1. 通过如下步骤,将分配的数据盘挂载到ECS服务器上。
1)执行如下命令,查看分配的数据盘 /dev/vdb:
fdisk -l
2)执行如下命令,对数据盘进行分区:
fdisk /dev/vdb
在如下的参数配置中,输入如下信息:
- Command(m for help)输入 n;
- Command action 输入p;
- Partition number(1-4,default 1)输入1;
- First cylinder 和 Last cylinder 处直接输入 回车,使用默认的配置;
- Command(m for help)输入 w,从而使上面的配置生效。
3)执行如下命令,对数据盘进行格式化:
mkfs.ext3 /dev/vdb1
2. 通过如下步骤,创建文件路径,并挂载磁盘,以及新建实验数据:
1)执行如下命令,创建文件路径:
mkdir /alidata
2)执行如下命令,将文件夹挂载到数据盘上:
mount /dev/vdb1 /alidata
3)执行如下命令,新建一个文件“hello.txt”,写入“Hello Aliyun”信息,并查看数据:
echo "Hello Aliyun">/alidata/hello.txt
4)执行如下命令,生成hello.txt文件的md5值。主要用于下一小节恢复文件时,进行校验。
md5sum hello.txt
3. 通过如下步骤,模拟用户数据误删除操作:
1)执行如下命令,进入/alidata 路径下,并删除hello.txt文件:
cd /alidata
rm -rf hello.txt
2)执行如下命令,结束使用分区的进程数:
说明:在真实的工作环境中,若已确认没有资源占用,可跳过此步骤。
fuser -k /alidata
2.4 恢复误删数据
本小节主要内容:卸载数据盘,并通过extundelete工具恢复误删除数据。
1. 首先,重新登录到ECS服务器。
2. 执行如下命令,卸载数据盘。
说明:任何数据恢复工具,在使用前均要将恢复的数据盘卸载,或将挂载数据盘设为只读。这样的做法是防止数据被覆盖。
umount /dev/vdb1
3. 执行如下命令,使用extundelete工具,对整个 /dev/vdb1 分区进行搜索,并查看hello.txt的 Inode number 和 Delete status。
说明:--inode参数值设为 2 ,是对整个分区进行搜索。如果需要进入目录搜索,只需要制定目录 I 节点即可。
extundelete --inode 2 /dev/vdb1
4. 执行如下命令,使用extundelete工具,恢复删除文件:
说明:通过上一步,我们可以看到 hello.txt 的节点值为 12 。--restore-inode 参数值是需要恢复的文件 Inode number 。
extundelete --restore-inode 12 /dev/vdb1
5. 执行如下命令,可以查看到当前目录下,新增一个 RECOVERED_FILES 文件夹,并查看到文件 file.12。
说明:恢复的文件是按照 extundelete 工具的自己的命名规范,进行命名的
ls
ll RECOVERED_FILES/
6. 执行如下命令,查看恢复的文件md5值,判断是否恢复原有的文件:
md5sum RECOVERED_FILES/file.12
对比上一小节的hello.txt的md5值,可以看到原文件的md5值和恢复的md5值相同。
说明:实验中生成的md5值可能与图片所示的值不同,请以真实的实验数据为主。
3.1 常见问题
1. extundelete的参数(option)和动作(action)说明:
- 参数(option)
--version, -[vV],显示软件版本号。
--help,显示软件帮助信息。
--superblock,显示超级块信息。
--journal,显示日志信息。
--after dtime,时间参数,表示在某段时间之后被删的文件或目录。
--before dtime,时间参数,表示在某段时间之前被删的文件或目录。
- 动作(action)
--inode ino,显示节点“ino”的信息。
--block blk,显示数据块“blk”的信息。
--restore-inode ino[,ino,...],恢复命令参数,表示恢复节点“ino”的文件,恢复的文件会自动放在当前目录下的RESTORED_FILES文件夹中,使用节点编号作为扩展名。
--restore-file ‘path‘,恢复命令参数,表示将恢复指定路径的文件,并把恢复的文件放在当前目录下的RECOVERED_FILES目录中。
--restore-files ‘path‘,恢复命令参数,表示将恢复在路径中已列出的所有文件。
--restore-all,恢复命令参数,表示将尝试恢复所有目录和文件。
-j journal,表示从已经命名的文件中读取扩展日志。
-b blocknumber,表示使用之前备份的超级块来打开文件系统,一般用于查看现有超级块是不是当前所要的文件。
-B blocksize,表示使用数据块大小来打开文件系统,一般用于查看已经知道大小的文件。
以上是关于恢复ECS误删数据的最佳实践的主要内容,如果未能解决你的问题,请参考以下文章
在 AWS ECS 上使用 docker-compose 进行持续部署的最佳实践