MENU

利用-flat.vmdk文件的恢复vSphere虚拟机vmdk文件

August 3, 2021 • Read: 369 • 默认分类

错误描述

在vSphere上,一次重启虚拟服务器时出现启动不了,提示找不到vmdk虚拟磁盘文件

原因分析

查看这台虚拟服务器的摘要信息,对比datastore上其他可用的虚拟机,发现损坏的服务器上确实缺少一个vmdk磁盘文件,但是可以看见一个50G的xxx-flat.vmdk文件;而正常的服务器只有xxx.vmdk,没有xxx-flat.vmdk,关机之后两个文件都存在,而且真实的磁盘容量从vmdk转移到了xxx-flat.vmdk。
虚拟主机在运行的时候,实际在使用的是xxx-flat.vmdk,然而xxx.vmdk是可以同时被删除的,才导致了问题。
这里需要说明,虚拟机的每个磁盘驱动器都包含了一对.vmdk文件。一个是文本文件,包含了关于虚拟硬盘的描述数据;另外一个是磁盘的实际内容。例如,一个名为examplevm的虚拟机连接有一个硬盘。这个磁盘由如下两个文件构成:一个小于 1KB 的examplevm.vmdk描述文件和一个10GB大小的examplevm- flat.vmdk平面(数据)文件,该文件包含虚拟机的实际数据,而这些数据又是以二进制的形式存放在物理磁盘上,examplevm.vmdk描述文件就是描述这种映射关系的。

解决办法

1、用ssh登录vsphere主机,查找xxx-flat.vmdk文件所在的位置以及目录,并记录文件的大小

find / -name "新建虚拟机-flat.vmdk"

/vmfs/volumes/50a98441-ab02c8b7-e60a-001517712dce/新建虚拟机/新建虚拟机-flat.vmdk

ls -l /vmfs/volumes/50a98441-ab02c8b7-e60a-001517712dce/新建虚拟机/新建虚拟机-flat.vmdk

-rw-------   1 root    root    53687091200 Apr 21 09:13 /vmfs/volumes/50a98441-ab02c8b7-e60a-001517712dce/

新建虚拟机/新建虚拟机-flat.vmdk

注意,ESXi默认没有开启ssh,需要通过vsphere client登录服务器,【配置】【安全配置文件】【服务-属性】手动开启。

2、重命名xxx-flat.vmdk文件

cd /vmfs/volumes/50a98441-ab02c8b7-e60a-001517712dce/新建虚拟机/
mv 新建虚拟机-flat.vmdk tmp_新建虚拟机-flat.vmdk
ls -la

drwxr-xr-x   1 root    root         1680 Apr 21 05:47 .
drwxr-xr-t    1 root    root         2660 Apr 18 03:16 ..
-rw-r--r--   1 root    root       102076 Apr 18 10:05 vmware.log
-rw-------   1 root    root     96468992 Apr 18 05:43 vmx-新建虚拟机-578288005-1.vswp
-rw-------   1 root    root    2147483648 Apr 18 05:43 新建虚拟机-2277f985.vswp
-rw-------   1 root    root    53687091200 Apr 21 05:47 新建虚拟机-flat.vmdk
-rw-------   1 root    root         8684 Apr 21 05:47 新建虚拟机.nvram
-rw-------   1 root    root          503 Apr 18 05:44 新建虚拟机.vmdk
-rw-r--r--   1 root    root            0 Apr 16 09:13 新建虚拟机.vmsd
-rwxr-xr--   1 root    root         3690 Apr 18 05:43 新建虚拟机.vmx
-rw-------   1 root    root            0 Apr 18 05:43 新建虚拟机.vmx.lck
-rwxr-xr--   1 root    root         3690 Apr 18 05:43 新建虚拟机.vmx~

3、在虚拟机目录下创建xxx.vmdk文件,大小要和xxx-flat.vmdk一样大

vmkfstools -c 53687091200 -a lsilogic 新建虚拟机.vmdk

Create: 100% done.
/vmfs/volumes/50a98441-ab02c8b7-e60a-001517712dce/新建虚拟机 # ls -la *vmdk
-rw-------   1 root    root    53687091200 Apr 21 05:49 新建虚拟机-flat.vmdk
-rw-------   1 root    root          503 Apr 18 05:44 新建虚拟机.vmdk

4、将原来的(tmp_)xxx-flat.vmdk覆盖掉刚创建的同样大小的xxx-flat.vmdk

mv tmp_新建虚拟机-flat.vmdk 新建虚拟机-flat.vmdk

重命名操作很快完成,启动虚拟机既可以恢复。(改完名后新建虚拟机-flat.vmdk文件就不见了)

总结

相比重新创建一个同名虚拟机,然后mv原来的xxx-flat.vmdk硬盘文件到新的虚拟机,更节省时间;此外也无需再次配置网卡地址。
xxx.vmdk本身是一个不到1k的文本文件,通过vi编辑查看可知真正存放数据的是xxx-flat.vmdk磁盘文件,所以只要这个文件还存在,就可以恢复。

- - - The END - - -
  • 文章作者:谭先生
  • 版权所有:文章转载时,注明出处即可!
  • 本站部分资源收集于网络,纯个人收藏,无商业用途,如有侵权请及时告知!
  • Archives QR Code Tip
    QR Code for this page
    Tipping QR Code
    阅读:369