VMware虚拟机误删除vmdk文件后如何恢复?
故障描述:
Dell R710系列服务器(用于VMware虚拟主机),Dell MD 3200系列存储(用于存放虚拟机文件),VMware ESXi 5.5版本,因意外断电,导致某台虚拟机不能正常启动,查看虚拟机的配置文件时发现此虚拟机的配置文件除了磁盘文件以外其他配置文件全部丢失。此时xxx-flat.vmdk磁盘文件和xxx-000001-delta.vmdk快照文件还存在。找VMware工程师诊断后,尝试新建一个虚拟机来解决故障,但发现ESXi存储空间不足。因此就将故障虚拟机下的xxx-flat.vmdk磁盘文件删除了,这时ESXi存储就有200多G的剩余空间了,而后VMware工程师就重新建了一个40G的虚拟机,并且分配了固定大小的虚拟磁盘,Windows Server 2008(虚拟机操作系统),数据库应用环境SQL Server 2008数据库服务器(管理宏桥和索菲两套应用数据库),虚拟机磁盘容量200G数据盘(精简模式)+ 160G快照数据盘。
解决方法:
1、备份数据
在VMware vSphere Client上将挂载的RD220i存储中VMFS卷以正常方式卸载掉。然后将RD220i存储上的VMFS卷通过网线的方式连接到备份服务器上,接着使用专业的工具将整个VMFS卷以扇区的方式镜像到已准备的备份空间上,以确保客户的数据安全,之后的分析和恢复操作均在备份的数据上进行。
2、分析故障原因
仔细分析VMFS卷的底层数据发现,ESXi主机的突然断电导致故障虚拟机目录下的目录项出现破坏,但是这种破坏不会影响虚拟机的重要数据,只是破坏了文件的目录项而已,可以通过人工修复即可解决。而人为删除某个文件的话,则目录项对应的数据区索引会被清掉,也不会影响删除文件的实际数据。这种情况可根据删除虚拟磁盘文件中的文件系统以及虚拟磁盘中的文件类型在VMFS卷自由空间中进行碎片匹配和合并,最终也可恢复删除的虚拟磁盘文件。但是在上述的两种情况之下又新建了一台虚拟机,并且分配了虚拟磁盘。经过仔细分析发现分配的40G虚拟磁盘已经全部清零了(在创建虚拟磁盘的时候会选择创建磁盘的类型),也是这个新建的虚拟机所占用的磁盘空间全部被清零。 如果新虚拟磁盘占用了删除虚拟机磁盘所释放的空间,那么此部分空间将无法恢复的。
图一:(是故障虚拟机的目录项区域)

3、实施过程一
按照方向一的思路进行底层分析,根据VMFS卷的结构以及删除虚拟磁盘的文件系统信息,在底层的自由空间中扫描符合删除虚拟机磁盘的区域,并统计其数量和大小是否符合删除虚拟磁盘的大小。再根据虚拟磁盘中的文件系统的信息将这些扫描到的碎片进行排列组合,结果发现中间有好多碎片缺失,仔细再对这些缺失的碎片进行重新扫描,发现这些碎片确实没有找到。接着将扫描到的碎片安照虚拟磁盘原本的顺序重组,对于没有找到的碎片暂且留空。接下来利用虚拟磁盘快照程序将重组好的父盘和快照盘进行合并,生成一个新的虚拟磁盘。再用专业工具解释虚拟磁盘中的文件系统,因缺失好多数据,文件系统解释过程中报好多错误,提示某些文件损坏。
解释完的文件系统如下图二:

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


导入.BAK文件报错信息如下图四:

4、实施过程二
由于方向一中并没有将原始的数据库文件恢复出来,并且其中好多备份文件都无法正常使用。因此需采用第二套方案来恢复尚未恢复的数据库文件。根据SQL Server数据库的结构去自由空间中找到数据库的开始位置。在数据库的结构中,数据库的第9个页会记录本数据库的数据库名。因此根据这个特征可以核对此数据库的头部页是否是正在查找的。并且数据库的每个页中都会记录数据库页编号以及文件号,所以根据这些特征编写数据库扫描程序,然后利用程序去底层扫描所有符合数据库页的数据碎片。接着将扫描出来的碎片按顺序重组成一个完整MDF文件,再通过MDF校验程序检测整个MDF文件是否完整。在整个校验过程中,只有cl_system3.dbf和erp42_jck.dbf因有部分碎片没有找到外,其余数据库均校验成功。
校验完的MDF文件如下图五:

cl_system3.dbf和erp42_jck.dbf因底层有很多碎片没有找不到(初步怀疑可能被覆盖),因此校验不通过。如下是cl_system3.dbf文件中某个碎片丢失的区域:
图六

5、实施过程三
由于上述两个方向实施完后,并没有将所有的数据库文件全部恢复出来,还有cl_system3.dbf和erp42_jck.dbf这里个文件因缺失部分页导致其无法正常使用。因此需要采用备份来恢复这两个数据库文件,但是在检查完这两个文件的备份后发现cl_system3.dbf的3月30号全部备份因备份机制故障导致没有备份出来,而erp42_jck.dbf的3月份备份全部没有,只有4月份的全部增量备份,如下图七:

由于erp42_jck.dbf文件中只缺失少量的页,因此可以根据缺失的页号在增量备份中查找,再将找到的页补到erp42_jck.dbf文件中,这样可以恢复一部分丢失的数据库页。最终补完后还是缺失部分页,无法正常使用。但是可以通过自主开发的数据库解析程序将erp42_jck.dbf文件中用户比较重要的几十张表成功导出,并成功导入到新建的数据库中。
6、验证数据
在本地服务器中搭建和原始环境一样的数据库环境(SQL Server 2008),由客户通过Teamviewer远程工具连接到验证服务器,并安装上层宏桥应用软件。再由客户安排工程验证数据库是否完整,经过仔细的验证后,数据库恢复基本没问题。上层应用可以正常运行,数据记录也都基本没有缺失,数据库成功挂载,如下图八:

VMware虚拟机误删除vmdk文件后如何恢复?的更多相关文章
- VMware Authorization Service不能启动 VMware虚拟机状态已挂起无法恢复解决方案
在网上看说在服务里面启动 但也是不能用 电脑上说是WINDOWS无法启动VMware Authorization Service服务(位于本地计算机上)错误:1068 依赖服务或组无法启动 这个很简单 ...
- VMware虚拟机提示“锁定文件失败 打不开磁盘”解决方法
VMware虚拟机提示“锁定文件失败 打不开磁盘”解决方法 摘自: http://www.xitongcheng.com/jiaocheng/xtazjc_article_40299.html 发布时 ...
- Oracle误删除表数据后的恢复具体解释
Oracle误删除表数据后的恢复具体解释 測试环境: SYSTEM:IBM AIX 5L Oracle Version:10gR2 1. undo_re ...
- VMware虚拟机磁盘文件vmdk单文件转多文件相互转换
设置环境变量 set PATH=%PATH%;D:\Program Files (x86)\VMware\VMware Workstation echo %PATH% C:\Users\Admi ...
- vmware下载存储vmdk文件后缀变-flat处理方式
将vmware存储中的虚拟机vmdk文件下载到本地,下载完成后,下载了2个vmdk文件 一份为:xx.vmdk (通常1KB左右) 一份为:xx-flat.vmdk (此为源文件正常大小) ...
- 导出无法正常启动的VMware虚拟机中的文件
为了使用网银,在MacBook中用VMware虚拟机跑Windows 8.今天在使用Windows 8时,Windows Update自动安装了更新并自动重启,结果怎么也启动不起来了.不是停在&quo ...
- vmware虚拟机安装Windows 7后虚拟机自动挂起
vmware虚拟机安装windows7后在一段时间中没有操作,虚拟机会自动挂起,是因为windows7中的设置的自动睡眠,打开[控制面板]=>[电源选项]=>[选择关闭显示器时间]将下面两 ...
- VMware虚拟机克隆CentOS6.5后修改网卡
在学习zk伪分布式集群对的时候,第一次注意到克隆虚拟机后修改eth的ip地址,发现ip不是自己修改的ip,进而在询问下发现,当我们第一次登陆查看我们克隆的虚拟机ip时:我们看到的ip不是et ...
- VMware加载vmdk文件
VMware软件文件菜单选择---映射虚拟磁盘选项,如图1所示
随机推荐
- 【BZOJ1207】【HNOI2004】打鼹鼠(动态规划)
[BZOJ1207][HNOI2004]打鼹鼠 题面 BZOJ题面 题解 考虑到m的范围只有10000 O(m^2)的复杂度是可以接受的 所以直接暴力DP 每次枚举前面出现的鼹鼠 检查是否能够转移过来 ...
- Python可视化库-Matplotlib使用总结
在做完数据分析后,有时候需要将分析结果一目了然地展示出来,此时便离不开Python可视化工具,Matplotlib是Python中的一个2D绘图工具,是另外一个绘图工具seaborn的基础包 先总结下 ...
- webstorm修改工具栏主题
** 操作如图所示 **
- gulp详细入门
gulp是基于Nodejs的自动任务运行器, 她能自动化地完成 javascript/coffee/sass/less/html/image/css 等文件的的测试.检查.合并.压缩.格式化.浏览器自 ...
- MySQL多数据源笔记1-MySQL主从复制
1.为什么要做主从复制? 1.在业务复杂的系统中,有这么一个情景,有一句sql语句需要锁表,导致暂时不能使用读的服务,那么就很影响运行中的业务,使用主从复制,让主库负责写,从库负责读,这样,即使主库出 ...
- Injection of autowired dependencies failed
error:org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mainCo ...
- Eclipse Web项目配置
1.每次重开workspace都要重新配置一次 2.new web project之前配置 3.Windows-Preferences-(所有都要记得Apply) General Maven P. ...
- Nginx实现集群的负载均衡配置过程详解
Nginx 的负载均衡功能,其实实际上和 nginx 的代理是同一个功能,只是把代理一台机器改为多台机器而已. Nginx 的负载均衡和 lvs 相比,nginx属于更高级的应用层,不牵扯到 ip 和 ...
- Prototype模式
浅克隆:对值类型的成员变量进行值的复制,对引用类型的成员变量只复制引用,不复制引用的对象.深克隆:对值类型的成员变量进行值的复制,对引用类型的成员变量也进行引用对象的复制. /** * Created ...
- 利用CDLinux里面的水滴破解路由器密码的教程
工具: 1.CDLinux系统镜像(网上有很多,这里我提供一个我使用的:http://yunpan.cn/cFgIifL8s6zUF 访问密码 a0ef) 2.U盘一个,不需要很大.(可以使用虚拟机安 ...