本文主要介绍如何重建VMDK文件所丢失的头/描述文件 以下情况需要我们重建一个VMDK文件丢失的头/描述文件:

1、通过Datastore浏览VMFS目录时找不到虚拟机的VMDK文件;

2、当利用命令行界面查看时无法找到-flat.vmdk文件存在;

3、*.vmdk的描述文件不存在或被损坏了;

4、开启虚拟机时,会提示文件无法找到(File not found)的错误:

虚拟机的磁盘驱动器是由一对*.vmdk文件组成。1个小文件,包含了磁盘的描述性数据,1个大文件是实际数据存储地点。

比如,1个10G的磁盘有一个10G的.vmdk文件。它的内容包括temp-flat.vmdk和temp.vmdk文件。

 

解决方案 大致步骤如下: 创一个新的虚拟磁盘头文件:

1、确认-flat文件的大小;

2、建立一个同等大小的新的磁盘文件; 备注:这步很关键

3、重命名新的磁盘描述文件,用以匹配待修复的磁盘名称;

4、根据-flat文件名做参考来编辑新文件的描述信息;

5、完成之后即可删除掉临时-flat文件了。

 

详细步骤如下:

1、登录到ESX主机的控制台界面;

2、切换到问题磁盘所在目录:

cd /vmfs/volumes/xxxxvolume/xxxx

3、确认当前虚拟磁盘所用的SCSI控制器

less *.vmx,查找到类似scsi1.virtualDev="lsilogic"的内容

4、运行如下命令查阅欲修复磁盘的具体尺寸:

ls -ltr vmdisk0-flat.vmdk 
4294967296

5、执行vmkfstools命令创建一个新磁盘:

vmkfstools -c 4294967296 -a lsilogic -d thin temp.vmdk
-c:磁盘大小
-a:磁盘控制器类型(BusLogic 或者 LSILogic)
-d:磁盘类型 当执行如上命令之后,temp-flat.vmdk文件也就相应的跟着被建立起来了

6、由于temp-flat.vmdk文件已经没有存在价值,所以可以使用如下命令删除掉:

rm -rf temp-flat.vmdk

7、将temp.vmdk重命名让它能够匹配-flat文件,比如:

vmdisk0.vmdk/vmdisk0-flat.vmdk; 
mv temp.vmdk vmdisk0.vmdk

8、利用文本编辑软体编辑这个temp.vmdk的描述信息:

找到ddb.thinProvisioned,(如果选用了-d thin参数,但是磁盘本身并非瘦磁盘模式)并且删除掉他:

-------------------------------------
# Disk DescriptorFile
version=1
CID=fb183c20
parentCID=ffffffff
createType="vmfs"
# Extent description
RW 8388608 VMFS "vmdisk0-flat.vmdk"
# The Disk Data Base
# DDB
ddb.virtualHWVersion = "4"
ddb.geometry.cylinders = "522"
ddb.geometry.heads = "255"
ddb.geometry.sectors = "63"
ddb.adapterType = "lsilogic"
ddb.thinProvisioned = "1"
-------------------------------------

备注:将其中紫色部分修改为和-flat.vmdk相匹配的名字

9、此时即可重新启动这个VM了。

转载于:https://blog.51cto.com/hujizhou/1138850