重新创建缺少的 VMware 虚拟机磁盘描述符文件 (.vmdk)
原文 为增量磁盘重新创建缺少的虚拟磁盘 (VMDK) 描述符文件文章 ID: 321422
calendar_today更新于: 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 控制器,也可以使用 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
注意:为了节省磁盘空间,我们使用 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 平面文件组成。
另请参阅
- 适用于 vSphere 的 VMware Skyline 运行状况诊断 - 常见问题解答
- 编辑 .vmx 文件的提示
- 为增量磁盘重新创建缺少的虚拟磁盘 (VMDK) 描述符文件
- 对无法打开电源的虚拟机进行故障排除