服务器数据恢复环境:
一台某品牌PowerEdge系列服务器和一台PowerVault系列存储,上层是ESXI虚拟机文件,虚拟机中运行SQL Server数据库。

服务器故障:
机房非正常断电导致虚拟机无法启动。管理员检查虚拟机发现虚拟机配置文件丢失,所幸的是xxx-flat.vmdk磁盘文件和xxx-000001-delta.vmdk快照文件没有丢失。管理员尝试恢复虚拟机,将原虚拟机的xxx-flat.vmdk删除后新建了一个虚拟机,分配了几百GB的精简模式和几百GBGB的快照数据盘,但是并没有将原虚拟机内的数据恢复出来。

服务器数据恢复过程:
1、将挂载在VMware vSphere Client上的卷卸载后做镜像备份,后续的数据分析和数据恢复操作都基于镜像文件进行,避免对原始数据造成二次破坏。
2、经过对镜像文件进行检测&分析后发现:a、断电导致虚拟机目录项已经损坏;b、删除文件操作导致文件的数据区索引被清除;c、重建虚拟机操作导致分配给新建虚拟机的磁盘空间的数据底层被清零。前两种情况可以通过人工修复来恢复数据,但如果第三种情况是新建虚拟机的磁盘空间占用了原虚拟机的释放空间,这部分空间的数据则无法恢复,需要进一步检测才能确定是否出现这种情况。
虚拟机目录项:

3、数据恢复工程师分析底层数据,在自由空间内排查被删除的虚拟机磁盘区域,扫描这部分区域发现了大量的碎片并拼接&重组这些碎片,但是经过拼接&重组后发现有部分碎片文件缺失,只能暂时将缺失的文件碎片位置留空。
4、利用虚拟磁盘快照程序将重组好的父盘和快照盘合并,生成一个新的虚拟磁盘。
5、解释虚拟磁盘中的文件系统,因为数据缺失,文件系统解释过程中出现很多报错,提示某些文件损坏。
文件系统解释结果:

6、在解析完文件系统后发现没有找到原始的数据库文件。宏桥备份和索菲备份这两个目录的目录结构正常,但是在尝试将备份导入到数据库中时提示报错。
宏桥备份和索菲备份的部分目录结构:

导入.BAK文件报错信息:

7、根据SQL Server数据库的结构去自由空间中找到数据库的开始位置。SQL Server数据库的库名通常在库的第九页内,根据这一特性在底层扫描数据库页碎片,然后利用扫描出来的碎片重组mdf文件,在本案例中除了cl_system3.dbf和erp42_jck.dbf因有部分碎片
没有找到外(极有可能被覆盖了),其余数据库均校验成功。
校验完的MDF文件:

cl_system3.dbf文件中某个碎片丢失的区域:

8、详细检查备份文件依然没有找到这两个丢失的文件,只有部分增量备份文件。由于erp42_jck.dbf文件中只缺失少量的页,根据缺失的页号在增量备份中查找,再将找到的页补到erp42_jck.dbf文件中,通过这个办法可以恢复一部分丢失的数据库页。但是补完后发现还是缺失部分页,无法正常使用。
9、通过北亚企安自主开发的数据库解析程序将erp42_jck.dbf文件中重要的几十张表导出,并导入到新建的数据库中,恢复出缺失的文件。
10、重新搭建原始环境,将恢复出来的数据导入到新搭建的环境中,由用户亲自验证数据库的完整性,验证后确认所有数据完整、数据库挂载成功、上层应用运行正常,本次数据恢复工作完成。

最新文章

  1. MVC5 网站开发实践 1、建立项目
  2. js复制
  3. homework 11 2016 5 13 读入文件做输入
  4. JSON基础使用
  5. android讯飞语音开发常遇到的问题
  6. 如何解决 Java 安全问题?
  7. SGU 123.The sum
  8. es6总结
  9. 001.Ansible部署RHCS存储集群
  10. IOC注入框架——Unity中Web.Config文件的配置与调用
  11. brace源码改造实现跨服务器监控-zjs
  12. spark加载模型与gRPC与JSF与JDQ冲突
  13. Innodb页面存储结构-2
  14. PostgreSQL安装详细步骤(windows)[转]
  15. TensorFlow函数(二)tf.get_variable() 和 tf.Variable()
  16. Python设计模式中单例模式的实现及在Tornado中的应用
  17. python爬虫beautifulsoup4系列4-子节点
  18. [大数据入门]实战练习 安装Cloudera-Hadoop集群
  19. UVa 11181 - Probability|Given(条件概率)
  20. Python datetime描述

热门文章

  1. js实现替换对象(json)格式的键名
  2. 代码随想录算法训练营day09 | leetcode 28. 实现 strStr()
  3. flutter系列之:Navigator的高级用法
  4. 把 URL 中文和一堆百分号转换成字符串
  5. Java第三讲动手动脑
  6. 【javascript】slice()、substring()和substr() 三种字符串截取方法区别
  7. pat 乙级1024 科学计数法关于stl中size()的一些思考即测试点六,无符号整数问题
  8. python的常见问题解决
  9. cximage总括功能讲解
  10. form表单enctype扩展