2016-08-23 1 views
0

Ich versuche, VM zu klonen, und ich möchte die Festplattenkapazität ändern.Ändern Sie die Größe der virtuellen Festplatte mit 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; 
    } 

Der Code wirft Ausnahme: Ungültige Operation für Gerät '0'. Ich übergab diese Parameter in CloneVm_Task und in ReconfigureVM_Task, die gleichen Fehler passiert

Wie kann ich die Kapazität der virtuellen Festplatte ändern? Unter Verwendung von Vsphere 5.5

+1

Encountered ähnliches Problem – bopomofu

+0

ich ein Update gefunden habe. Sie können ein Image mit der minimal benötigten Festplatte erstellen, sagen Sie 10 GB, dann sollten Sie DiskManager verwenden, um die Größe zu erweitern. Also wir erweitern nur HDD kein Schrumpf –

+0

Beziehen Sie sich, um virtualDiskManager Datenobjekt zu verwenden? Können Sie uns dabei helfen, dies zu tun? Wir haben nicht einmal die DiskObjectId von VirtualDevice erfasst - sie hat NULL zurückgegeben – bopomofu

Antwort

1

Ich Code nicht in Java, aber es ist nah genug an C# für mich zu helfen. Als Erstes müssen Sie Ihre Festplatteninformationen abrufen und dann die VirtualDeviceConfigspec herausziehen, sie ändern und sie dann an die Festplatte anhängen. Sie erstellen eine neue Spezifikation und legen dann die Eigenschaften fest. Auch, warum stellst du die Größe in Bytes dann kb ???

Hier ist die ganze Java ich aufbringen konnte ...

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); 
+0

Können Sie bitte einen Teil Ihres Codes teilen? –

+0

Ich poste meinen Code nicht, weil er zu lang ist und C# ist. Dies ist der beste Code, den ich in Java erstellen konnte (es ist Jahre her, seit ich Java benutzt habe). Nachdem Sie die Festplatte, die Sie ändern möchten, erhalten, ist dies der Code, den Sie benötigen. Ich beschriftete die Diskette "myDisk". Ich habe den Code zu meiner Antwort oben hinzugefügt. Ich hoffe, es hilft. Lass es mich wissen, wenn du irgendwelche Fragen hast. –

+0

Ich habe das gleiche versucht, aber sagt die Operation bearbeiten ist nicht erlaubt. Ich habe versucht, DiskManager API zu verwenden, und es funktioniert. Welche Version von vsphere verwenden Sie? –

Verwandte Themen