恢复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 ,是对整个分区进行搜索。如果需要进入目录搜索,只需要制定目录 节点即可。

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 进行持续部署的最佳实践

阿里云SLB最佳实践

自建K8S迁移镜像应用至阿里云ACK最佳实践

ElasticsearchElasticsearch 最佳实践系列之分片恢复并发故障

SnapAssure备份实施运维最佳实践_redo日志篇

ElasticsearchElasticsearch日志场景最佳实践