Disk einer VM kopieren für eine andere VM

BeMei

New Member
Oct 20, 2024
18
6
3
Guten Tag zusammen,

ich versuche nun seit geraumer Zeit herauszufinden wie ich eine existierende Disk einer Virtuellen Maschine A (id=108) kopieren und dann einer virtuellen Maschine B (id=119) zur Verfügung stellen kann.

Ich habe für meine virtuellen Maschinen ein ZFS eingerichtet "vmpool", ein
Bash:
zpool status -v
liefert mir
Bash:
  pool: vmpool
 state: ONLINE
  scan: scrub repaired 0B in 00:27:21 with 0 errors on Sun Feb  9 00:51:23 2025
config:

        NAME                                                  STATE     READ WRITE CKSUM
        vmpool                                                ONLINE       0     0     0
          mirror-0                                            ONLINE       0     0     0
            nvme-SAMSUNG_MZQLB3T8HALS-00007_S<gekuerzt>       ONLINE       0     0     0
            nvme-SAMSUNG_MZQLB3T8HALS-00007_S<gekuerzt>       ONLINE       0     0     0

errors: No known data errors

Bash:
qm status 108
liefert:
Bash:
agent: 1,fstrim_cloned_disks=1
bios: seabios
boot: order=scsi0
cores: 2
cpu: x86-64-v2-AES
freeze: 0
machine: pc-i440fx-9.0
memory: 24576
meta: creation-qemu=9.0.2,ctime=1735204511
name: Windows TS
net0: e1000=00:50:56:92:99:b7,bridge=vmbr0
ostype: win10
scsi0: vmpool:vm-108-disk-0,size=100G
scsi1: vmpool:vm-108-disk-1,size=20G
scsi2: vmpool:vm-108-disk-2,size=20G
scsi3: vmpool:vm-108-disk-3,size=40G
scsihw: virtio-scsi-pci
smbios1: uuid=564df857-<gekuerzt>
sockets: 2
vmgenid: 1f72284f<gekuerzt>


Da müsste es doch einen Weg geben eine Disk zu kopieren?

Mein Workaround wäre es ein Backup von der Disk der VM A zu machen, bei VM B eine neue Disk anzulegen und dort das Backup wieder einzuspielen aber das ist ein wenig wie durch die Brust ins Auge. Ein einfaches robocopy auf die neue Disk wäre auch schwierig weil ich etliche Berechtigungen behalten möchte und sich die Daten der einzelnen Dateien wg. Änderung, letzter Zugriff etc. auch nicht ändern sollen.
Die VM B soll einmal die VM A ablösen aber ich muss erst einiges testen bevor ich die VM A in den vorzeitigen Ruhezustand schicke und die VM B als aktiv nutze.

Ich würde mich freuen wenn mir jemand helfen kann.
 
Der folgende Befehl macht eine Kopie der Disk die bei VM 108 als scsi0 konfiguriert ist und weist sie VM 119 zu:
Code:
qm disk move 108 scsi0 --target-vmid 119 --target-disk scsi0

Als Alternative gibt es auch qm clone <vmid> <newid> um eine VM zu klonen.
 
Last edited:
Vielen Dank für Deine Rückmeldung Filip. Das würde dann aber ja bedeuten wenn ich den qm disk move Befehl ausführe meine Laufwerke bei der Originalmaschine durcheinandergeraten weil die disk zwar bleibt aber unused ist. Kann ich das irgendwie verhindern?
Und wenn nicht, wie kann ich die disks denn wieder in die ursprüngliche Reihenfolge bringen?
 
Vielen Dank für Deine Rückmeldung Filip. Das würde dann aber ja bedeuten wenn ich den qm disk move Befehl ausführe meine Laufwerke bei der Originalmaschine durcheinandergeraten weil die disk zwar bleibt aber unused ist. Kann ich das irgendwie verhindern?
Und wenn nicht, wie kann ich die disks denn wieder in die ursprüngliche Reihenfolge bringen?
Also bei move wird die Disk ausgehängt und in die neue VM eingehängt.
Bei Clone wird ein Clone erzeugt. Die Reihenfolge der Disks legst du ja mit Vergabe der SCSI ID fest.
 
Normalerweise sollte sich an der ursprünglichen VM nichts ändern, solange qm disk move ohne --delete aufgerufen wird. Beim Kopieren zu einer anderen VM scheint das jedoch nicht der Fall zu sein – sieht nach einem Bug aus.

Stattdessen kann die VM-Disk mit folgendem Befehl kopiert werden:
Code:
zfs send vmpool/vm-108-disk-0 | zfs receive vmpool/vm-119-disk-<number>
Dabei muss <number> so gewählt werden, dass der Name nicht mit einer anderen VM-Disk kollidiert.

Damit der Ziel-VM die neue Disk auch zugeordnet wird, braucht sie noch eine Zeile in /etc/pve/qemu-server/119.conf:
Code:
scsi0: vmpool:vm-119-disk-0,size=100G
 
Vielen Dank, das zfs send ... probiere ich mal aus.

Es ist etwas komisch das es nur einen qm move Befehl gibt und keinen qm copy.
qm clone bezieht sich ja auf die komplette VM so wie ich das verstanden habe.
Als Neuling bei Proxmox irritierte mich das.
 
du kannst das pferd auch andersrum aufzaeumen - qm set XXX -scsi0 ZIELSTORAGE:0,import-from=QUELLVOLUME,ANDERE_OPTIONEN, z.b.: qm set 109 -scsi0 vmpool:0,import-from=vmpool:vm-108-disk-0,backup=1,discard=1,ssd=1. geht mit "qm create" genauso, wenn du die VM in einem rutsch erstellen und disks importieren willst. und natuerlich auch fuer andere disk "slots" als scsi0 ;)

die VM wo die disk gerade ist (die "quelle") darf allerdings nicht laufen!
 
Last edited:
Hi,
die VM wo die disk gerade ist (die "quelle") darf allerdings nicht laufen!
doch, die darf laufen ;) Es sollte allerdings der Guest Agent installiert und konfiguriert sein, damit die Integrität des Dateisystems beim Kopieren sichergestellt werden kann.

EDIT: Wenn es mehreren Disken sind, muss allerdings beachtet werden, dass die nicht voneinander abhängen (z.B. Mirror) weil die Disken werden sequentiell kopiert. In so einem Fall darf die Quell-VM wirklich nicht laufen.
 
Last edited:
mea culpa :) wir machen tatsaechlich ein online import wenn die VM laeuft ;)
 
Danke für die Ergänzungen. Ich könnte mir vorstellen, das der eine oder andere auch mal vor dem gleichen Problem steht wie ich.

@fabian evtl. könntest Du in Post #7 Deine Kommandos noch als Inline Code formatieren, dann hebt es sich besser vom Text ab. Ich vergesse leider auch immer wieder das Markdown hier nicht geht ;)
 
  • Like
Reactions: fabian