如何在 vSphere 5.5 java API 中获取 VirtualDisk 的 UUID



在虚拟磁盘对象中,我可以找到diskObjectId,它是持久且不可变的标识符(根据VMware文档:https://pubs.vmware.com/vsphere-55/index.jsp?topic=%2Fcom.vmware.wssdk.apiref.doc%2Fvim.vm.device.VirtualDisk.html(。但是,如果我分离虚拟硬盘并将其再次附加到实例,则该虚拟硬盘的 diskObjectId 也与分离前相同。例如,diskObjectId 是"2086-2001",即使在分离硬盘后,我也创建了一个新硬盘,并为其分配了相同的 diskObjectId("2086-2001"(。

我想使用唯一标识符 (uuid( 标识虚拟硬盘。如何获取虚拟磁盘的 uuid?

虚拟磁盘对象有 2 个标识符(vmware 文档(:

  • diskObjectId :虚拟磁盘持久且不可变的标识符。虚拟磁盘有一个 UUID 字段,但可以通过 VirtualDiskManager API 进行设置。此标识符是不可设置的通用唯一标识符。即使虚拟磁盘未与虚拟机关联,它也可以保持存在。
  • uuid

但是由于上述原因,我更喜欢使用"diskObjectId"。

我通过以下方式获得唯一标识符:

    VirtualMachineConfigInfo vmConfig = vm.getConfig();
    VirtualDevice[] vds = vmConfig.getHardware().getDevice();
    for(VirtualDevice vd : vds){
        if(vd instanceof VirtualDisk){
            System.out.println(vd.getDiskObjectId());
        }
    }

以下是我获取硬盘详细信息的方式

首先获取 VM 的所有设备

     VirtualDevice[] device=vm.getConfig().getHardware().getDevice();

然后在获取的设备中找到硬盘,找到它们的备份信息并从那里获取UUID

示例代码

VirtualDevice[] device=vm.getConfig().getHardware().getDevice();

        for (VirtualDevice disk : device)
        {
            if(disk.getDeviceInfo().getLabel().contains("Hard disk"))
            {
                 VirtualDiskFlatVer2BackingInfo backing = (VirtualDiskFlatVer2BackingInfo) disk.getBacking();
                System.out.println(backing.uuid);
            }
        }

最新更新