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