时光2020

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  117 随笔 :: 0 文章 :: 9 评论 :: 17万 阅读

重新创建缺少的 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 控制器的虚拟磁盘,因为虚拟机可能无法引导。

但是,如果使用半虚拟化 SCSI 控制器,也可以使用 ddb.adapterType = pvscsi 替换文件中的 ddb.adapterType = lsilogic 来更新新的描述符文件。

创建虚拟机磁盘描述符文件的步骤:

  1. 通过 SSH 或 DCUI 以 root 身份连接到 ESXi 主机。
  2. 使用以下命令导航到包含缺少描述符文件的虚拟机磁盘的目录:

    cd /vmfs/volumes/DATASTORE_NAME/VM_NAME

     
  3. 通过检查虚拟机配置文件 (.vmx) 来确定虚拟磁盘正在使用的 SCSI 控制器的类型。控制器由 scsi#.virtualDev 行标识,其中 # 是控制器编号。

    此示例使用 lsilogic :

    scsi0.present = “true”
    scsi0.sharedBus = “none”
    scsi1.present = “true”
    scsi1.sharedBus = “virtual”
    scsi1.virtualDev = “lsilogic”

     
  4. 使用以下命令识别并记录 -flat 文件的确切大小:

    ls -l vmdisk0-flat.vmdk

    -rw------- 1 root root 4294967296 Oct 11 12:30 vmdisk0-flat.vmdk

     
  5. 使用 vmkfstools 命令创建新的临时虚拟磁盘:

    # vmkfstools -c 4294967296 -d thin temp.vmdk

    该命令使用以下标记:
    • -c size
      这是虚拟磁盘的大小。
    • -d thin
      这将以精简配置格式创建磁盘。
因此,将创建 temp.vmdk 和 temp-flat.vmdk 文件。

注意:为了节省磁盘空间,我们使用 thin 类型以精简配置格式创建磁盘。但是,唯一的结果是,描述符文件包含一行额外的行,如果原始磁盘未进行精简配置,则必须在后续步骤中手动删除该行。
  1. 删除 temp-flat.vmdk,因为它不需要。运行以下命令:

    rm -i temp-flat.vmdk

     
  2. 将 temp.vmdk 重命名为与孤立的 -flat 文件(或本例中为 vmdisk0.vmdk)匹配所需的名称:

    mv -i temp.vmdk vmdisk0.vmdk

     
  3. 使用“vi”文本编辑器( 在本例中为 vi vmdisk0.vmdk)编辑描述符文件
     
    1. 在 Extent Description 部分下,
      • 使用命令 “Insert” 允许对描述符文件进行修改。
      • 找到并更改 -flat 文件的名称以匹配孤立的 -flat。 完成后 - 按“Esc”退出此模式
    2. 如果原始 .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”


      虚拟机现在已准备好开机。在启动虚拟机之前,请验证您的更改并确保磁盘链一致。

       
  4. 要检查磁盘链的一致性,请针对磁盘描述符文件运行以下命令:

    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 平面文件组成。


另请参阅

posted on   时光2020  阅读(199)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
点击右上角即可分享
微信分享提示