碎片拼接技术恢复XenServer服务器SQL Server数据库数据
目录
- 1、数据恢复方案一
- 2、数据恢复方案二
环境:
- Dell PowerEdge服务器;
- XenServer虚拟化平台;
- 4块希捷2T STAT硬盘用RAID卡组成的RAID10;
- XenServer虚拟机操作系统:Windows Server系统;
- 虚拟机磁盘:1个10G系统盘和1个5G数据盘,部署的Web服务器(ASP +SQL)。
故障:
- 服务器突然断电导致服务器中一台XenServer虚拟机不可用,虚拟磁盘文件丢失,服务器管理员联系北亚数据恢复中心寻求帮助。
故障检测和分析:
- 1、拿到原始数据盘后,北亚数据恢复工程师将原始盘连接到北亚数据恢复服务器上,准备超过原始盘总容量的空间作为备份原始盘数据使用,将原始盘以磁盘底层扇区的方式镜像到备份空间上,以后操作都在备份数据上操作,以确保原始盘数据安全。
- 2、分析底层数据,北亚数据恢复工程师发现
XenServer中虚拟机的磁盘都是以LVM结构存放,即每个虚拟机的虚拟磁盘都是一个LV,虚拟磁盘模式是精简模式。
LVM的相关信息在Xen Server中都有记载,查看“/etc/lvm/backup/frombtye.com “下LVM的相关信息发现并没有存在损坏的虚拟磁盘信息,因此北亚数据恢复工程师判断LVM的信息已经被更新了。因此,北亚数据恢复工程师只能接着分析底层看能否找到未被更新的LVM信息,经过一番努力,终于在底层发现还未更新的LVM信息。
如下图:

- 3、根据获取到的未被更新的LVM信息找到虚拟磁盘存放数据的区域,发现该区域的数据已被破坏。北亚数据恢复工程师经过分析后
发现,造成虚拟机不可用的原因是虚拟机的虚拟磁盘被破坏,虚拟机中的操作系统和数据丢失。这种情况很有可能是由虚拟机遭遇网络入侵后留下恶意程序造成的。仔细核对这片区域后,北亚工程师发现虽然该区域很多数据被破坏,但还是找到很多数据库的页碎片,可以尝试将这些数据库的页碎片拼接成一个可用的数据库。
服务器数据恢复过程:
1、数据恢复方案一
按照方案一的思路进行底层分析,根据RAR压缩包的结构可以找到很多压缩包的数据开始位置,而RAR压缩包文件的第一个扇区中会记录此RAR的文件名。因此通过从管理员那里获知的备份数据库的压缩包文件名和目前找到的压缩包位置的文件名相匹配,可找到备份数据库压缩包的开始位置。找到压缩包的位置后仔细分析这片区域的数据,然后将此区域的数据恢复出来重命名为一个RAR格式的压缩文件,尝试解压此压缩包,解压报错。
报错如下图所示:

仔细分析恢复出来的压缩包,北亚数据恢复工程师发现有部分数据被破坏,因此解压的时候报错。尝试使用RAR的修复工具看能否忽略错误,解压出来部分数据。结果修复完成之后解压出来的数据只有网站的部分代码,并没有发现数据库的备份文件。因此可以判断数据库备份文件在RAR压缩包中是损坏的。
如下是解压出来的部分网站代码:

2、数据恢复方案二
由于方案一并没有成功将数据库恢复出来,因此采用方案二来恢复数据。根据SQL Server数据库的结构去底层分析数据库的开始位置。在SQL Server数据库的结构中,第9个页会记录本数据库的数据库名。因此从服务器管理员那里获知到数据库名称之后,北亚数据恢复工程师再分析底层找到此数据库的开始位置。因为在SQL Server数据库的每个页中都会记录数据库页编号以及文件号,北亚数据恢复工程师根据这些特征编写程序去底层扫描符合数据库页的数据。
然后将扫描出来的碎片按顺序重组成一个完整MDF文件,再通过MDF校验程序检测整个MDF文件是否完整。
重建的MDF文件如下:

验证数据:
经过检测确定恢复出来的数据没问题之后,由北亚工程师搭建数据库环境,将重组后的数据库附加到搭建好的数据库环境中,查询相关表数据是否正常,查询最新数据是否存在。
截图如下:

由于数据库需要结合网站代码才能更好的验证数据库的完整性。管理员从网站开发商那里拿到网站代码搭建好环境,然后将恢复出来的数据库配置好后去验证,没有发现问题,本次数据恢复成功。
您可能感兴趣的文章
- 12-20Kubernetes中使用临时容器进行故障排查的方法
- 12-20Nginx设置HTTPS的方法步骤
- 12-20二进制方式安装 Kubernetes1.18.3版本实现脚本
- 12-20Nginx工作模式及代理配置的使用细节
- 12-20ZooKeeper分布式协调服务设计核心概念及安装配置
- 12-20Kubernetes部署可视化地图的十个步骤
- 12-20关于docker清理Overlay2占用磁盘空间的问题(亲测有效)
- 12-20Docker compose配置文件写法及命令使用示例
- 12-20openwrt安装docker并启动的操作方法
- 12-20云原生Kubernetes初始化容器Init使用教程


阅读排行
推荐教程
- 12-07一文教你怎么选择Tomcat对应的JDK版本
- 12-07新版Eclipse集成Tomcat时找不到server选项的解决方法
- 12-06IIS7 应用程序池自动回收关闭的解决方案
- 12-05Windows Server 2019安装VMware
- 12-05Windows服务器默认IE浏览器无法下载文件的解决方法
- 12-05Docker安装Jenkins全过程
- 12-19Zabbix SAML SSO 登录绕过漏洞的操作流程
- 12-15Docker-Compose搭建Spark集群的实现方法
- 12-14Docker Desktop无法正常启动解决(failed to start...)
- 12-14k8s 与docker空间使用分析与清理方法





