服务器数据恢复环境:
同友存储,底层由数块物理硬盘组建的 raid5 磁盘阵列,存储池划分若干 lun,每个 lun 下无数台虚拟机。
服务器故障:
未知起因导致存储解体,无奈启动,虚拟机全副失落,其中一个 lun 中的 3 台虚拟机数据尤为重要,须要复原其中的数据。
服务器数据恢复过程:
1、将故障存储中的所有磁盘以只读形式进行全盘镜像备份,后续的数据分析和数据恢复操作都基于镜像文件进行,防止对原始数据造成二次毁坏。
2、基于镜像文件剖析 raid5 阵列,发现故障存储中的 raid5 阵列缺失 2 块磁盘,热备盘曾经启用。通过理论状况能够推断故障产生的大抵过程:第一块硬盘掉线后 raid5 启动热备盘替换。第二块硬盘掉线后 raid5 降级,第三块硬盘掉线导致 raid5 阵列解体。这种状况下个别是无奈通过校验间接获取到缺失盘的数据,只能应用磁盘等同大小的全 0 的空镜像进行 raid 重组(依赖空镜像组建的 raid 的文件系统构造会重大损坏,相当于每个条带都缺失两个块的数据,所以除非凡状况外不倡议如此操作)。
重建 raid:
3、通过重组进去的 raid5 阵列提取 LUN。通过对存储构造的进一步剖析获取到存储划分的 MAP 块,对各个 LUN 的数据块指针进行解析并由北亚企安数据恢复工程师编写程序提取 LUN 碎片。碎片提取实现后进行碎片拼接,组成残缺的 LUN。
提取 LUN:
4、导出 LUN 内所有虚拟机并尝试启动,后果因为操作系统被毁坏,虚拟机无奈启动。
5、提取虚拟机内的文件,但虚拟机内的文件少数损坏重大,只有多数文件可用,只能通过其余计划进行复原。
6、本次须要进行数据恢复的虚拟机内有 mysql 数据库,能够依据 mysql 数据库底层存储的特殊性扫描数据页并提取数据。
数据恢复过程截图:
7、依据 mysql 数据页特色扫描数据页并导出数据(仅实用于 innodb 引擎数据库,myisam 引擎数据库没有“数据页”概念),剖析零碎表获取各用户表信息,依据各个表的 id 宰割数据页。
8、因为该数据库的表构造变更过屡次,存储故障导致系统表的局部数据失落,所以记录提取过程十分苦楚(这里不赘述)。
获取最早版本数据库各个表的表构造。因为合并快照前的父盘因为写入较早,应用第一块掉线盘进行校验获取到残缺数据,而后提取出其中数据库各个表的表构造。用户方提供了最新版本数据库的建表脚本。
别离应用两组不同表构造提取数据记录并导入到搭建好的环境中的 mysql 数据库内,剔除各个表中因为表构造变更所导致的乱码数据,最初将两组数据别离导出为.sql 文件。
数据验证:
两个版本的数据库表构造不同,先分割用户方工程师进行调试,调试实现后导入平台进行测试,平台测试胜利,本次数据恢复工作实现。