重新创建缺少的 VMware 虚拟机磁盘描述符文件 (.vmdk)
更新于: 10-25-2024
产品
VMware vSphere ESXi的
问题/介绍
本文提供了重新创建丢失的虚拟磁盘描述符文件 (.vmdk) 的步骤。在以下情况下,您可能需要重新创建缺少的标题/描述符文件:
- 数据存储浏览器中列出的虚拟机磁盘文件是虚拟机的平面文件,没有图标。
- 打开虚拟机电源时,您会看到 File not found 错误。
- 查看虚拟机的目录时,平面文件存在。
- 虚拟机磁盘的磁盘描述符文件不存在或已损坏。
环境
VMware vSphere ESXi 6.x
VMware vSphere ESXi 7.x
VMware vSphere ESXi 8.x
VMware vSphere ESXi 6.5
VMware vSphere ESXi 6.7
分辨率
如何重新创建丢失/缺失的虚拟磁盘描述符文件 (.vmdk):
重新创建缺少的虚拟磁盘描述符文件 (.vmdk) 的视频教程:注意:在视频中,使用了 vmkfstools -a 选项。从 ESXi 6.5 版本及更高版本开始,此选项已弃用,将被忽略,并显示以下消息:“--adaptertype 已弃用,因此将被忽略”。
重要提示:
- VMware 建议定期对关键虚拟机进行完整映像备份,以便在此类情况下轻松还原。
- VMware 还建议尝试从备份中恢复缺少的描述符文件。此方法不能用于重新创建加密的磁盘描述符文件。
- 如果受影响的虚拟机没有完整备份,请确保将平面文件复制或备份到单独的位置。
- 本文的可用性仅侧重于为虚拟机重新创建描述符文件,请勿编辑或更改平面文件的内容,因为这可能会导致数据丢失。
注意:此过程不适用于在虚拟机中配置了半虚拟化 SCSI 控制器的虚拟磁盘,因为虚拟机可能无法引导。
但是,如果使用半虚拟化 SCSI 控制器,也可以使用 ddb.adapterType = pvscsi 替换文件中的 ddb.adapterType = lsilogic 来更新新的描述符文件。
注意:为了节省磁盘空间,我们使用 thin 类型以精简配置格式创建磁盘。但是,唯一的结果是,描述符文件包含一行额外的行,如果原始磁盘未进行精简配置,则必须在后续步骤中手动删除该行。
 
但是,如果使用半虚拟化 SCSI 控制器,也可以使用 ddb.adapterType = pvscsi 替换文件中的 ddb.adapterType = lsilogic 来更新新的描述符文件。
创建虚拟机磁盘描述符文件的步骤:
- 通过 SSH 或 DCUI 以 root 身份连接到 ESXi 主机。
- 使用以下命令导航到包含缺少描述符文件的虚拟机磁盘的目录:
 cd /vmfs/volumes/DATASTORE_NAME/VM_NAME
 
- 通过检查虚拟机配置文件 (.vmx) 来确定虚拟磁盘正在使用的 SCSI 控制器的类型。控制器由 scsi#.virtualDev 行标识,其中 # 是控制器编号。
 此示例使用 lsilogic :
 scsi0.present = “true”
 scsi0.sharedBus = “none”
 scsi1.present = “true”
 scsi1.sharedBus = “virtual”
 scsi1.virtualDev = “lsilogic”
 
- 使用以下命令识别并记录 -flat 文件的确切大小:
 ls -l vmdisk0-flat.vmdk
 -rw------- 1 root root 4294967296 Oct 11 12:30 vmdisk0-flat.vmdk
 
- 使用 vmkfstools 命令创建新的临时虚拟磁盘:
 # vmkfstools -c 4294967296 -d thin temp.vmdk
 该命令使用以下标记:- -c size
 这是虚拟磁盘的大小。
- -d thin
 这将以精简配置格式创建磁盘。
 
- -c size
因此,将创建 temp.vmdk 和 temp-flat.vmdk 文件。
注意:为了节省磁盘空间,我们使用 thin 类型以精简配置格式创建磁盘。但是,唯一的结果是,描述符文件包含一行额外的行,如果原始磁盘未进行精简配置,则必须在后续步骤中手动删除该行。
- 删除 temp-flat.vmdk,因为它不需要。运行以下命令:
 rm -i temp-flat.vmdk
 
- 将 temp.vmdk 重命名为与孤立的 -flat 文件(或本例中为 vmdisk0.vmdk)匹配所需的名称:
 mv -i temp.vmdk vmdisk0.vmdk
 
- 使用“vi”文本编辑器( 在本例中为 vi vmdisk0.vmdk)编辑描述符文件
 - 在 Extent Description 部分下,
- 使用命令 “Insert” 允许对描述符文件进行修改。
- 找到并更改 -flat 文件的名称以匹配孤立的 -flat。 完成后 - 按“Esc”退出此模式。
 
- 如果原始 .vmdk 不是精简磁盘,请查找并删除行 ddb.thinProvisioned = “1”。如果是,请保留此行。使用命令 “:wq!” 保存并退出 “vi” 编辑器。
 示例
 # 磁盘描述符文件
 version=1
 CID=fb183c20
 parentCID=ffffffff
 createType=“vmfs”
 # 范围描述
 RW 8388608 VMFS “vmdisk0-flat.vmdk”
 # 磁盘数据库
 #DDB
 ddb.virtualHWVersion = “4”
 ddb.geometry.cylinders = “522”
 ddb.geometry.heads = “255”
 ddb.geometry.sectors = “63”
 ddb.adapterType = “lsilogic”
 ddb.thinProvisioned = “1”
 虚拟机现在已准备好开机。在启动虚拟机之前,请验证您的更改并确保磁盘链一致。
 
 
- 在 Extent Description 部分下,
- 要检查磁盘链的一致性,请针对磁盘描述符文件运行以下命令:
 vmkfstools -e filename.vmdk
 对于完整链,您会看到类似于以下内容的输出:
 Disk chain is consistent。
 对于断开的链,您会看到快照链的摘要,然后是类似于以下内容的输出:
 Disk chain is not consistent : 父虚拟磁盘自创建子虚拟磁盘以来已被修改。父虚拟磁盘的内容 ID 与子虚拟磁盘中的相应父内容 ID 不匹配 (18)。
其他信息
其他信息
虚拟机的每个磁盘驱动器都由一对 .vmdk 文件组成。一个是包含有关虚拟硬盘的描述性数据的文本文件,另一个是该磁盘的实际内容。例如,名为 examplevm 的虚拟机连接了一个 10GB 的磁盘。此磁盘由一个小于 1 KB 的 examplevm.vmdk 描述符文件和一个包含虚拟机内容的 10 GB 的 examplevm-flat.vmdk 平面文件组成。
 
                    
                     
                    
                 
                    
                 
 
         
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号