使用VI Java API修改虚拟磁盘大小
我想克隆VM,并且想更改磁盘容量。使用VI Java API修改虚拟磁盘大小
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
我不用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? –
遇到了类似的问题 – bopomofu
我已经找到了解决。您可以使用最少需要的硬盘创建映像,例如10 GB,然后您应该使用DiskManager扩展大小。所以我们只做扩展硬盘不收缩 –
你是指使用virtualDiskManager数据对象吗?你可以帮助详细说明如何做到这一点,我们甚至没有从VirtualDevice捕获DiskObjectId - 它返回NULL – bopomofu