# VM im LVM/ qcow2 format auf anderen Host in ein RBD migrieren ohne zwischenspeicher via SSH

### Beschreibung

Es gibt Situationen, da möchte man eine VM auf eine andere umziehen lassen. Hat aber kein USB Datenträger bzw. dieser ist zu langsam, bzw man muss vorgänge ausführen, draufkopieren wieder runterkoiperen. Auch doppelte Zeit, oder oder oder...

Es gibt die Möglichtkeit mit screen und ssh dieses zu bewältigen.

### Vorraussetzungen:

Das die zu kopierende VM natürlich NICHT läuft  
Auf dem Zielsystem ist das Ceph soweit vorhanden und auch eingerichtet.  
Auf dem Quellsystem ist screen installiert. Befehl dazu

```
apt install screen
```

Quellsystem kann sich per ssh auf dem Zielsystem einloggen.

### Vorgang

#### Auf dem Quellsystem Infos holen  


Auf dem Quellsystem herausfinden wo unsere LVM Image liegen.  
Dazu den Befehl lvs verwenden

Das LV ist sind die Diskimage und das VG die Volumegroup.  
Somit wäre der Pfad im Dateisystem als Beispiel für vm-100-disk-1. Diese Disk nehmen wir auch für unserer Beispiel

```
/dev/datenppol/vm-100-disk-1
```

<details id="bkmrk-ausgabe-root%40vmserv%3A"><summary>Ausgabe</summary>

root@vmserv:~# lvs  
 LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert  
 vm-100-disk-1 datenpool -wi-a----- 200.00g   
 vm-101-disk-2 datenpool -wi-ao---- 500.00g   
 vm-101-disk-3 datenpool -wi-ao---- 500.00g   
 vm-101-disk-4 datenpool -wi-ao---- 500.00g   
 vm-101-disk-5 datenpool -wi-ao---- 500.00g   
 vm-101-disk-6 datenpool -wi-ao---- 500.00g   
 vm-101-disk-7 datenpool -wi-ao---- 500.00g   
 vm-101-disk-8 datenpool -wi-ao---- 500.00g   
 vm-102-disk-1 datenpool -wi-a----- 260.00g   
 vm-102-disk-2 datenpool -wi-a----- 650.00g   
 vm-103-disk-1 datenpool -wi-a----- 100.00g   
 vm-104-disk-1 datenpool -wi-a----- 32.00g   
 vm-105-disk-1 datenpool -wi-a----- 250.00g   
 vm-105-disk-2 datenpool -wi-a----- 250.00g   
 vm-106-disk-1 datenpool -wi-a----- 50.00g   
 vm-107-disk-1 datenpool -wi-a----- 100.00g   
 vm-108-disk-1 datenpool -wi-a----- 100.00g   
 vm-111-disk-1 datenpool -wi-a----- 100.00g   
 vm-112-disk-1 datenpool -wi-ao---- 500.00g   
 vm-112-disk-2 datenpool -wi-a----- 1000.00g   
 vm-113-disk-0 datenpool -wi-a----- 50.00g   
 vm-114-disk-0 datenpool -wi-a----- 50.00g   
 vm-116-disk-0 datenpool -wi-a----- 32.00g   
 vm-117-disk-0 datenpool -wi-a----- 16.00g   
 vm-118-disk-0 datenpool -wi-a----- 32.00g   
 vm-119-disk-0 datenpool -wi-a----- 250.00g   
 vm-119-disk-1 datenpool -wi-a----- 250.00g   
 vm-120-disk-0 datenpool -wi-a----- 128.00g   
 vm-121-disk-0 datenpool -wi-a----- 20.00g   
 medavol media -wi-a----- 3.42t   
 data pve -wi-ao---- 63.99g   
 root pve -wi-ao---- 31.75g   
 swap pve -wi-ao---- 15.88g

</details>#### Auf dem Zielsystem Infos holen

Nun auf dem Zielserver den Pool heruasfinden wo die Images hinsollen.  
Dazu auf den Zielserver einloggen und den Befehl eingeben:

```
ceph osd pool ls
```

Ausgabe, in userem Beispiel nehmen wir den rbd pool

```
device_health_metrics
rbd
rbd_hdd
cephfs_data
cephfs_metadata
```

Auf dem Zielsystem die nächste freie VMID ermitteln, mittels

```
pvesh get /cluster/nextid

Ausgabe:
111
```

Somit wird die 111 die neue VM ID auf dem Zielsystem.

#### VM Image kopieren

Nun per ssh auf den Quellserver einloggen oder direkt am Server das ist egal.  
nun einen neuen Screenauf machen

```
Parameter
screen -S <namedersession>

Beispiel
screen -S migrate
```

Nun sind wir in einer Screensitzung, damit wir zum Beispiel unseren Laptop auch ausschalten dürfen.  
Denn der Kopierbefehl läuft auf dem Quellsystem jetzt in einer eigenen Session.

##### Jetzt den Kopierbefehl ausführen für LVM  


```
Parameter
ssh root@<zielsystem> "rbd import --image-format 2 - <ceph_rbd_pool>/vm-<NEUE_VMIDAUF_Zielsystem>-disk-<DISKNUMMER>" < /dev/<volumegroup_von_quellsystem>/<locicalvolume_von_quellsystem>

ssh root@192.168.178.240 "rbd import --image-format 2 - rbd/vm-111-disk-0" < /dev/datenpool/vm-100-disk-1

Hinweis:
--image-format 2 ist das RAW Format
```

##### Jetzt den Kopiervorgang ausführen für qcow2

```
Parameter
ssh root@<zielsystem> 'rbd import --dest-pool  <ceph_rbd_pool> --image-format 2 - vm-<NEUE_VMIDAUF_Zielsystem>-disk-<DISKNUMMER>' < </pfad/zur/image.qcow2>


ssh root@192.168.178.240 'rbd import --dest-pool rbd_hdd --image-format 2 - vm-116-disk-2' < /mnt/backup/images/105/vm-105-disk-0.qcow2



WICHTIG!!!!!! Hierzu auf dem Zielserver einloggen, denn wir holen uns dann vom quellsystem das image. 
Einfach aus dem screen heraus!
WICHTIG!!!!!

Parameter
ssh root@<quellsystem>  'cat </pfad/zur/image.qcow2>' | rbd import - <ceph_rbd_pool>/vm-<NEUE_VMIDAUF_Zielsystem>-disk-<DISKNUMMER> --image-feature layering
Beispiel
ssh root@192.168.178.2 'cat /mnt/backup/images/105/vm-105-disk-0.qcow2' | rbd import - rbd_hdd/vm-116-disk-2 --image-feature layering

```

Nun läuft der kopiervorgang und wir können uns nun mit STRG+A gedrückt halten und dann +D von der Sitzung trennen

Ausgabe:

```
detached from 7763.migrate]
root@vmserv:~#
```

Um uns wieder mit der Sitzung zu verbinden. Wenn wir noch keine neue Promt sehen für den nächsten Befehl, kopiert er noch.

```
screen -r migrate

Augabe:
root@192.168.178.240's password:

```

Nun wieder trennen. (STRG+A gedrückt halten dann +D) zum trennen.  
Ab un zu mal schauen wie weit er ist.

Ist der Vorgang abgeschlossen, gibt es diese Fertig Meldung.

```
Importing image: 100% complete...done.

```

Sollte die VM mehrere Disks haben. Den vorgang wiederholen für die nächste DISK.   
Im unseren Beispiel hat die VM aber nur eine DISK.

#### Die VM Config Datei übertragen

per scp kann die VM Config übertragen werden.  
Die Dateien werden so benannt&lt;VMID&gt;.conf  
Egal ob es KVM VMs sind oder LXC Conateiner  
  
 Die conf Dateien für KVM VMs in das Verzeichnis

```
/etc/pve/qemu-server/
```

und für LXC Conateiner in

```
/etc/pve/lxc/
```

Hat man ein Cluster kopiert man diese Datei auf den jeweiligen node, wo die VM dann hin soll.  
Auf dem Quellsystem einloggen.  
Nun der Befehl zum kopieren. In unserem Beispiel ist die vm 100 eine KVM VM

```
Parameter
scp /etc/pve/qemu-server/<altevmid>.conf root@<zielsystem:/etc/pve/qemu-server/<neue_vmid>.conf

Beispiel:
scp /etc/pve/qemu-server/100.conf root@<zielsystem:/etc/pve/qemu-server/111.conf
```

#### VM Conf bearbeiten

Nun ausloggen und auf dem Zielsystem einloggen und die Conf Datei bearbeiten. In unserem Beispiel die VM 111

```
nano /etc/pve/qemu-server/111.conf
```

Ausgabe:

<details id="bkmrk-111.conf-%23ip%253a192.1"><summary>111.conf</summary>

\#IP%3A192.168.2.112  
boot: cdn  
bootdisk: virtio0  
cores: 16  
memory: 32768  
name: Terminal  
net0: e1000=12:4E:C7:A9:77:DD,bridge=vmbr0  
numa: 0  
onboot: 0  
ostype: win7  
sata2: local:iso/Windows10\_x64\_1909.iso,media=cdrom,size=4091M  
sata3: local:iso/virtio-win-0.1.149.iso,media=cdrom,size=316634K  
scsihw: virtio-scsi-pci  
sockets: 1  
virtio0: vms:vm-112-disk-1,cache=writeback,size=500G  
virtio1: vms:vm-112-disk-2,cache=writeback,size=1000G

</details>Nun den Abschnitt mit den Festplatten

```
...
virtio0: vms:vm-112-disk-1,cache=writeback,size=500G
...
```

auf unseren neuen Datastore abändern. Wir ändern hier den alten Datastore vms zu unserem neuen Datastore rbd ab

```
Parameter
virtio0: <neuer_datastore>:vm-<neuevmid>-disk-<disknummer>,cache=writeback,size=500G

...
virtio0: rbd:vm-111-disk-0,cache=writeback,size=500G
...
```

Sollten mehrere Disks vorhanden sein, dann dieses natürlich für alle Disk wiederholen. Nicht vergessen auch die Disk Nummer am ende ggf anzupassen

Den Abschnitt mit den ISOs äbaändern so das keine mher drin sind.

Vorher

```
...
sata2: local:iso/Windows10_x64_1909.iso,media=cdrom,size=4091M
...
```

Nachher

```
...
sata2: none,media=cdrom
...
```

Falls die Netzwerkbrücke noch geändert werden muss einfach die vmbr Nummer eingeben. Muss noch ein VLAN hinzugefügt werden. dann sieht das so aus, ansonsten nur die vmbr-ID ändern

Von

```
...
net0: e1000=12:4E:C7:A9:77:DD,bridge=vmbr0
...
```

Nach

```
Parameter
net0: e1000=12:4E:C7:A9:77:DD,bridge=vmbr<ID>,tag=<VLAN_TAG>

...
net0: e1000=12:4E:C7:A9:77:DD,bridge=vmbr0,tag=102
...
```

#### Fertig

VM Starten glücklich sein.

```
qm start 111
```