本文主要介绍如何重建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
会显示如下类似信息 -rw------- 1 root root 4294967296 Oct 11 12:30 vmdisk0-flat.vmdk
 
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了。