服务器存储故障:
同友存储中组建的raid5磁盘阵列由于未知原因崩溃且无法启动,raid5中的虚拟机全部丢失,其中3台虚拟机中的数据尤为重要,管理员联系我们数据恢复中心要求对这3台虚拟机进行数据恢复。
服务器存储数据恢复过程:
1、分析存储底层结构。
通过与管理员的沟通和对raid的分析,搞清楚了故障存储的底层结构:多块物理磁盘组成一个存储池并划分多个lun,需要进行数据恢复的为lun1,lun1包含了那3台虚拟机。如下图所示:
存储结构
2、重组raid。
在对阵列进行分析重组时,数据恢复工程师发现原存储中的raid5缺失2块硬盘,热备盘已经启用。(还原故障发生的过程:第一块硬盘掉线后系统启动热备盘进行替换,第二块硬盘掉线时raid5处于降级状态,第三块硬盘掉线导致raid阵列崩溃。)这种情况下无法通过校验直接获取丢失盘的数据,只能使用和磁盘同等大小的全0镜像进行重组(由于依赖空镜像组成的raid文件系统结构会破坏严重,相当于每个条带都会缺失两个块的数据,所以除非特殊情况不建议如此操作)。
重建raid
3、通过重组出来的raid阵列提取LUN。通过对存储结构的进一步分析获取到存储划分的MAP块,对各个LUN的数据块指针进行解析。北亚数据恢复工程师编写数据提取程序提取LUN碎片。提取完成后进行碎片拼接,组成完整LUN。
提取LUN
4、导出LUN内所有的虚拟机并尝试启动,由于操作系统被破坏,虚拟机无法启动。
5、提取虚拟机内文件。由于虚拟机无法启动,只能对虚拟机内的文件进行提取,但多数文件破坏严重,只有少数文件可用,只好继续制定其他数据恢复方案。
6、通过分析数据库页提取数据。本案例中的虚拟机内有mysql数据库,可以利用数据库底层存储的特殊性进行数据页扫描,提取数据。(由于父盘和快照文件都被损坏,常规合并操作无法完成快照合并,使用北亚自主研发的VMFS快照合并程序进行快照合并。)数据恢复过程截图如下:
7、获取mysql数据页并分析。根据mysql数据页特征进行数据页扫描并导出(innodb引擎可以使用此方案;myisam因为没有“数据页”这个概念,所以这个方案不可用),分析系统表获取各用户表信息,根据各个表的id进行数据页分割。
8、提取表结构、提取记录。因为数据库使用时间已久,表结构也曾多次变更,加上系统表在存储损坏后有部分数据丢失,记录提取过程遇到很大阻力。首先获取最初版本数据库各个表的表结构:合并快照前的父盘因为写入较早,使用第一块掉线盘进行校验获取到这个文件的完整数据,然后提取出其中数据库各个表的表结构,之后管理员提供了最新版的数据库建表脚本。分别使用两组不同的表结构对数据记录进行提取并导入恢复环境中的mysql数据库内,然后剔除各个表中因为表结构变更造成的乱码数据,最后将两组数据分别导出为.sql文件。
9、数据验证。因为两个版本的数据库表结构不同,所以管理员联系应用工程师进行调试。调试完成后导入平台,平台调试成功,本次数据恢复完成。