最近一台存放重要文件的Windows7虚拟机磁盘文件被误删除,导致虚拟机无法启动,只留下两个文件,test-flat.vmdk和test-000001-delta.vmdk,启动虚拟机时报错,信息如下:the file specified is not a virtual disk。无法打开磁盘“/vmfs/volumes4db4f346-a928774c-50af-3c4a92731f32/test/,test-flat.vmdk”或其所依赖的快照磁盘之一。
看到此景,这可咋办,上网查阅相关资料,终于找到了解决办法.
flat.vmdk文件:这是个默认虚拟磁盘数据文件,创建于你添加虚拟硬盘驱动到虚拟机时,而不是RDM。当使用厚磁盘时,这个文件的大小相当于你创建虚拟硬盘驱动时所指定的大小。
delta.vmdk文件:这个虚拟磁盘数据文件只用于创建虚拟机快照时。当创建了快照,对原始flat.vmdk的所有写入都停止,并变成只读;然后这些对虚拟磁盘的更改将写入delta文件。这些文件的初始大小是16MB,然后随着对虚拟机虚拟硬盘的更改需要而以16MB的速度增长。因为这些文件是虚拟磁盘所作更改的位图,一个单一delta.vmdk文件不能超过原始flat.vmdk文件的大小。每为虚拟机创建一个快照就会生成一个delta文件,并且它们的文件名以数字递增(如test-000001-delta.vmdk, test-000002-delta.vmdk)。当快照融合到原始–flat.vmdk文件后再删除时,这些文件将自动删除。
综上所述,可以确定数据都还在,开始进行数据恢复工作,步骤如下:
1.创建一台同样配置的虚拟机,不创建磁盘,命名虚拟机名字为test1.
2.ssh登录到esxi宿主机,默认ssh服务没开启,首先开启ssh服务,具体方法可从网络上搜索,ssh登录,结果悲剧了,不能密码登录,被前任负责人设置了秘钥登录,找不到秘钥了,唉!!!!算了,秘钥问题等过后在解决,先使用client工具登录vcenter服务器,转移test-flat.vmdk和test-000001-delta.vmdk至另外一台esxi服务器的一台新建虚拟机(创建时不创建磁盘)中.
3.开启ssh服务,登录至此esxi宿主机,查找test-flat.vmdk所在的目录并进入其所在目录中
# find / -name 'test-flat.vmdk
# ls -la *vmdk 查看vmdk文件大小,下面要用到(FILE_SIZE)
# vmkfstools -c FILE_SIZE -a lsilogic test1-flat.vmdk
启动虚拟机,ok,成功启动,进去查看要找的重要文件,发现是7月份的,不是最新的,7月份做过一次快照,此时的文件内容就是做快照之前的内容,做快照之后到故障期间的文件内容还没找回来,好在存在test-000001-delta.vmdk,这个文件内存储了快照之后的变化的文件内容,查看大小在5G左右
虚拟机关机,新创建一个快照,将test-000001-delta.vmdk重命名,覆盖新创建的快照的数据文件(delta.vmdk.文件)
开机启动虚拟机,发现要找的文件都在,已经成功全部恢复