最近一段时间碰到了好几个意外断电引起的服务器故障而导致的数据丢失的案例。意外断电引起的服务器故障有:服务器无法启动、服务器可以启动但是虚拟机丢失、服务器多块硬盘出现故障离线……(好像最近机房的供电都不太稳定的样子)。今天我们通过一个异常断电导致服务器数据丢失的案例给大家简单介绍一下服务器异常断电如何进行数据恢复,仅供技术交流,如果有更好的方法欢迎探讨。

服务器数据恢复环境:

服务器断电mongodb会丢失数据吗 服务器断电会怎么样_数据恢复

 

服务器故障:
突然断电导致服务器上的一台虚拟机不可用。

服务器故障分析:

数据恢复第一要务:所有的数据恢复操作之前都必须将原始数据在数据恢复服务器上进行镜像备份,然后只能在镜像文件上进行数据分析与数据恢复操作,切忌不可对原服务器做任何操作,保持原服务器数据的初始状态。

经过数据恢复工程师的分析发现原服务器中丢失的虚拟机磁盘采用了LVM结构,在“/etc/lvm/backup/”目录下查询看有没有损坏的虚拟机磁盘的信息,如果有就说明LVM信息尚有保存;如果查询没有就说明该信息已经被更新,只能在底层数据中查询看有没有更新的lvm信息。本案例就是从底层数据中查询到了尚未更新的lvm信息,请见下图:

服务器断电mongodb会丢失数据吗 服务器断电会怎么样_服务器断电mongodb会丢失数据吗_02

 

找到lvm信息就说明数据还在,以lvm信息为基础进行分析查找虚拟磁盘的分区数据。但是经过数据恢复工程师的分析发现本案例中的虚拟磁盘被破坏掉了。经过服务器数据恢复工程师的进一步查找和分析发现该区域的数据确实被破坏了,仅找到一些数据库页碎片。如果想要成功恢复数据就只能通过拼接数据库碎片这种方法了。

服务器数据恢复操作:
*rar压缩包的结构:正常情况下rar压缩包的第一个扇区记录的是文件名,可以根据文件名反向分析压缩包的数据起始位置,然后把相应的压缩包底层数据提取出来并重命名。
1、在本案例的实际操作过程中却出了意外:提取出来的压缩包解压时报错,报错信息如下:

服务器断电mongodb会丢失数据吗 服务器断电会怎么样_服务器_03

 

2、由于解压数据报错,服务器数据恢复工程师首先尝试使用rar修复工具(设置为忽略错误)进行修复,但是解压依旧失败。

3、在数据库层面分析数据库开始位置,由于我们已经知道了数据库名称,可以由此反推数据库开始位置。

4、根据每个数据库页的编号和文件号去底层数据扫描符合这个数据库页的所有数据。

5、北亚数据恢复工程师把所有扫描出来的数据拼接重组为一个mdf文件,重组后的mdf文件如下图所示:

 

服务器断电mongodb会丢失数据吗 服务器断电会怎么样_服务器_04

 

6、通过校验程序对重组出来的数据进行检测。
7、检测合格后服务器数据恢复工程师进行数据提取操作。
8、数据恢复工程师搭建了一个数据库环境,将恢复出来的数据库数据附加进去进行查询,确认恢复出来的数据正常。本服务器数据恢复成功,恢复结果见下图:

服务器断电mongodb会丢失数据吗 服务器断电会怎么样_服务器断电mongodb会丢失数据吗_05