服务器数据恢复环境:
一台同友存储,存储上有一组raid5磁盘阵列,存储上层有若干台虚拟机,其中有3台linux操作系统虚拟机上存放重要数据。
服务器故障:
同友存储上的raid5阵列崩溃导致存储无法启动。
服务器数据恢复过程:
1、将故障存储中所有磁盘编号后取出,由硬件工程师检测硬件故障,发现有一块盘盘片划伤,其他磁盘没有发现明显的硬件故障。将完好磁盘以只读方式做扇区级的全盘镜像,镜像完成后将所有磁盘按照编号还原到原存储中,后续的数据分析和数据恢复操作都基于镜像文件进行,避免对原始磁盘数据造成二次破坏。
2、与用户方进行沟通后,北亚企安数据恢复工程师基于镜像文件查看所有磁盘底层情况,分析本案例中存储结构。
存储结构:
3、根据分析底层数据获取到的raid5相关信息重组raid5阵列。重组过程中发现本案例中的raid5缺失2块盘(第一掉线盘掉线后由热备盘顶替,之后第二块盘掉线导致RAID5处于降级状态,第三块盘盘片划伤掉线导致RAID崩溃),无法直接获通过校验获取到丢失盘的数据,只能使用与磁盘同等大小的全0镜像进行重组(此方法除了紧急情况慎用。依赖空镜像组建raid,文件系统结构会严重破坏,相当于每个条带都会缺失两个块的数据)。
重建raid:
4、分析存储结构,获取存储划分的MAP块。解析MAP块得到各个LUN的数据块指针。北亚企安数据恢复工程师编写数据提取程序提取LUN碎片,提取完成后拼接碎片&组成完整LUN。
提取LUN:
5、导出虚拟机后尝试启动,和预计的情况一样:由于操作系统被破坏,虚拟机无法启动。
6、在虚拟机无法启动的情况下提取虚拟机内文件。提取虚拟机内的文件后进行测试,发现大多数文件都被破坏,只有少部分小文件可以打开。
7、与用户方进行沟通后得知有一台虚拟机内有mysql数据库,可以利用mysql数据库存储特殊性,通过扫描数据页提取数据。找到这台有mysql数据库的虚拟机,发现该虚拟机启用了快照。在父盘和快照文件都损坏的情况下,常规合并无法完成,使用北亚企安自主研发VMFS快照合并程序进行快照合并。
8、根据mysql数据页特征扫描&导出数据页(仅采用innodb引擎的mysql数据库可以使用此方案),分析系统表获取各用户表信息,根据各个表的id分割数据页。
9、该mysql数据库在长时间的使用过程中曾多次变更表结构,而且存储损坏后系统表有部分数据丢失,导致记录提取困难。首先获取最初版本mysql数据库各个表的表结构:合并快照前的父盘因为写入较早,通过使用第一块掉线盘进行校验来获取到这个文件的完整数据,然后提取出数据库各个表的表结构。和用户沟通后,用户方提供了最新版本数据库的建表脚本。
10、分别使用最初版本mysql数据库的表结构和最新版本mysql数据库的表结构提取数据记录,并导入到恢复环境中的mysql数据库内。剔除各个表中因为表结构变更而出现的乱码数据,将两组数据分别导出为.sql文件。
11、因为两个版本的mysql数据库表结构不同,由用户方应用工程师进行调试后导入平台,平台调试成功。本次服务器数据恢复工作完成。