通过拼数据库碎片的方式恢复虚拟机磁盘文件丢失问题

背景概述
  由于服务器突然断电,造成我公司Xen Server服务器中一台VPS(即Xen Server虚拟机)不可用,虚拟磁盘文件丢失。硬件环境是Dell 720服务器配戴一张H710P的RAID卡,由4块希捷2T STAT硬盘组成的RAID 10,上层环境是Xen Server 6.2版本操作系统,虚拟机是Windows Server 2003系统,10G系统盘 + 5G数据盘两个虚拟机磁盘,上层是Web服务器(ASP + SQL 2005的网站架构)。通过电话联系到北亚数据恢复中心进行恢复,同时派两名同事驻场。

分析故障原因
  我们的数据盘首先被连接到北亚恢复环境服务器上,然后超过硬盘总容量的空间将数据盘以磁盘底层扇区的方式镜像到备份空间上。
  由于Xen Server服务器中虚拟机的磁盘都是以LVM的结构存放的,(即每个虚拟机的虚拟磁盘都是一个LV,并且虚拟磁盘的模式为精简模式。)LVM的相关信息在Xen Server中都有记载,查看“/etc/lvm/backup/frombtye.com “下LVM的相关信息发现并没有存在损坏的虚拟磁盘信息,因此可以断定LVM的信息已经被更新。接着分析底层看能否找到未被更新的LVM信息,果不其然在底层发现了还未更新的LVM信息。
图1:
 通过拼数据库碎片的方式恢复虚拟机磁盘文件丢失问题

  根据未被更新的LVM信息找到了虚拟磁盘的数据区域,但遗憾的是该区域的数据已被破坏。分析后发现造成虚拟机不可用的最终原因是因为虚拟机的虚拟磁盘被破坏,从而导致虚拟机中的操作系统和数据丢失。而导致这种情况的发生很有可能是虚拟机遭遇网络攻击或hack入侵后留下恶意程序造成的。仔细核对这片区域后发现,虽然该区域有很多数据被破坏了,但还是发现了很多数据库的页碎片。因此可以尝试将许多数据库的页碎片拼成一个可用的数据库。

处理办法:
1、实施方案一
  按照方案一的思路进行底层分析,根据RAR压缩包的结构可以找到很多压缩包的数据开始位置,而RAR压缩包文件的第一个扇区中会记录此RAR的文件名。因此根据我们提供的备份数据库的压缩包文件名和目前找到的压缩包位置的文件名相匹配,即可找到备份数据库压缩包的开始位置。找到压缩包的位置后仔细分析这片区域的数据,然后将此区域的数据恢复出来重命名为一个RAR格式的压缩文件。然后尝试解压此压缩包,发现解压报错。
图2:
通过拼数据库碎片的方式恢复虚拟机磁盘文件丢失问题
 
  解压报错的原因是有部分数据被破坏了。接着开始尝试使用RAR的修复工具看能否忽略错误解压部分数据,结果修复完成之后解压的数据库只有网站的部分代码,并没有数据库的备份文件。因此可以判断数据的备份文件在RAR压缩包中是损坏的。
图3:
 通过拼数据库碎片的方式恢复虚拟机磁盘文件丢失问题

2、实施方案二
  由于方案一并没有将数据库恢复出来,所以又采取了另一方案。根据SQL Server数据库的结构去底层分析数据库的开始位置,在数据库的结构中,第9个页会记录本数据库的数据库名。因此在提供了数据库的名称之后,再分析底层找到此数据库的开始位置。因为在数据库的每个页中都会记录数据库页编号以及文件号,所以可以根据这些特征编写程序去底层扫描符合数据库页的数据。
然后将扫描出来的碎片按顺序重组成一个完整MDF文件,再通过MDF校验程序检测整个MDF文件是否完整。
图4:
 通过拼数据库碎片的方式恢复虚拟机磁盘文件丢失问题

3、验证数据
  检测没问题之后再搭建数据库环境,将重组后的数据库附加到搭建好的数据库环境中。然后查询相关表数据是否正常,查询最新数据是否存在。
图5:
通过拼数据库碎片的方式恢复虚拟机磁盘文件丢失问题

 4、结论
  由于数据库需要结合网站代码才能更好的验证数据库的完整性。我们又开发商处拿到了网站代码搭建好了环境,然后将恢复好的数据库发送给我们验证,一切正常,通过拼数据库碎片的方式成功将数据库恢复完成,整个数据恢复成功。

上一篇:MapReduce框架Partitioner分区方法


下一篇:raid5 /raid5e /raid5ee的性能对比及其数据恢复原理和数据恢复方法