【问题标题】:Modify Virtual disk size using VI Java API使用 VI Java API 修改虚拟磁盘大小
【发布时间】:2016-08-23 16:58:05
【问题描述】:

我正在尝试克隆 VM,并且我想更改磁盘容量。

    int virtualDisksCount = 0;
    VirtualDisk virtualDisk = null;
    for (VirtualDevice virtualDevice : virtualHardware.getDevice()) {
        if (virtualDevice instanceof VirtualDisk) {
            virtualDisksCount++;
            virtualDisk = (VirtualDisk) virtualDevice;
        }
    }
    if (virtualDisksCount == 1) {
        VirtualDeviceConfigSpec discSpec = new VirtualDeviceConfigSpec();
        discSpec.setOperation(VirtualDeviceConfigSpecOperation.EDIT);

        virtualDisk.setCapacityInBytes(155500000000l);
        virtualDisk.setCapacityInKB(155500000000000000l);


        discSpec.setDevice(virtualDisk);

       return discSpec;
    } 

代码抛出异常:设备“0”的操作无效。 我在 CloneVm_Task 和 ReconfigureVM_Task 中传递了这些参数,发生同样的错误

如何更改虚拟磁盘容量?使用 Vsphere 5.5

【问题讨论】:

  • 遇到类似问题
  • 我找到了解决办法。您可以使用最少需要的 HDD 创建映像,例如 10 GB,然后您应该使用 DiskManager 来扩展大小。所以我们只扩展硬盘而不收缩
  • 你指的是使用 virtualDiskManager 数据对象吗?你能帮忙详细说明如何做到这一点,我们甚至没有从 VirtualDevice 捕获 DiskObjectId - 它返回 NULL

标签: api virtual-machine vmware vsphere


【解决方案1】:

我不会用 Java 编写代码,但它与 C# 非常接近,我可以提供帮助。首先,您需要获取磁盘信息,然后提取 virtualdeviceconfigspec,对其进行更改,然后将其添加回磁盘。您正在创建一个新规范,然后设置属性。另外,你为什么要设置字节大小然后是kb???

这就是我能收集到的所有 Java...

myDisk.setCapacityInKB(Long.parseLong(50)*1024*1024);
VirtualDeviceConfigSpec vdConfigSpec = new VirtualDeviceConfigSpec();
vdConfigSpec.setDevice(myDisk);
vdConfigSpec.setOperation(VirtualDeviceConfigSpecOperation.edit);
VirtualMachineConfigSpec vmConfigSpec = new VirtualMachineConfigSpec();
vmConfigSpec.setDeviceChange(new VirtualDeviceConfigSpec[]{vdConfigSpec});
Task task = vm.reconfigVM_Task(vmConfigSpec);

【讨论】:

  • 我不会发布我的代码,因为它太长而且是 C#。这是我在 Java 中能收集到的最好的代码(自从我使用 Java 以来已经有好几年了)。获得要更改的磁盘后,这就是您需要的代码。我将磁盘标记为“myDisk”。我在上面的答案中添加了代码。我希望它有所帮助。如果您有任何问题,请告诉我。
  • 我也试过了,但是说不允许操作编辑。我尝试使用 DiskManager API 并且它有效。您使用什么版本的 vsphere?
  • 这很奇怪,当我这样做时它会起作用。我正在使用 vSphere 5.5。
猜你喜欢
  • 2014-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-28
  • 1970-01-01
  • 1970-01-01
  • 2018-08-02
相关资源
最近更新 更多