Nach sowas suche ich schon länger und hab den GNU/Linux Machine to Proxmox LXC Container Converter auf GitHub gefunden.
Ein kleines Skript was eine VM (und auch andere Linux Server) in einen LXC Container konvertiert. Und es funktioniert!
17.05.2024 - Anleitung aktualisiert (GitHub Repo, Skript update) 16.09.2023 - Anleitung aktualisiert (Parameter -P im Skript hinzugekommen)
Denke aber die sauberste Lösung ist immer einen neuen Container aufzusetzen und diesen dann entsprechend einzurichten.
Habs zuerst mit einer Debian 11 Test-VM probiert und danach mit einer Debian 10 BackupPC-VM. Beide wurden erfolgreich konvertiert!
Aktuell getestet mit: Proxmox 8.0.4 und einer Debian 11.7 VM.
konvertieren
In der VM, die konvertiert werden soll, muss der SSH Zugang für root erlaubt sein. In der /etc/ssh/sshd_config freischalten.
PermitRootLogin yes
Auf dem Proxmox Host das Repository klonen und die beiden Skripte ausführbar machen.
$ git clone https://github.com/mathewalves/machine-to-proxmox-lxc-ct-converter.git $ cd machine-to-proxmox-lxc-ct-converter $ chmod +x convert.sh bashconvert
Die Parameter die angegeben werden müssen.
$ ./bashconvert --help -n|--name [lxc container name] # neuer Container Name -t|--target [target machine ssh uri] # IP Adresse der zu konvertierenden VM -P|--port [target port ssh] # SSH Port der zu konvertierenden VM -i|--id [proxmox container id] # neuer Container ID -s|--root-size [rootfs size in GB] # neuer Container Größe der Festplatte -a|--ip [target container ip] # neuer Container IP Adresse -b|--bridge [bridge interface] # neuer Container Bridge Interface -g|--gateway [gateway ip] # neuer Container Gateway IP -m|--memory [memory in mb] # neuer Container Größe des Arbeitsspeichers -d|--disk-storage [target proxmox storage pool] # neuer Container Storage Pool auf dem Proxmox Server -p|--password [root password for container (min. 5 chars)] # neuer Container root password
Der Befehl mit den gewünschten Parametern auf dem Proxmox Host (als root) ausführen. (konvertiert meine BackupPC-VM in einen LXC Container)
$ ./bashconvert \ -n backuppc \ -t 192.168.50.44 \ -P 22 \ -i 312 \ -s 15 \ -a 192.168.50.44 \ -b vmbr0 \ -g 192.168.50.1 \ -m 1024 \ -d local-lvm \ -p CT-PASSWORT
Je nach Füllstand der VM dauert das natürlich etwas. Man sollte auch den Speicherbedarf der temporären Archivdatei berücksichtigen.
das Skript
- erstellt von dem zu konvertierenden System über SSH ein TAR Archiv des Dateisystems nach /tmp/containername.tar.gz
- aus dem TAR Archiv wird dann mit pct create ein neuer Container mit den übergebenen Parametern erstellt
- /tmp/containername.tar.gz wird wieder gelöscht
Das Skript funktioniert gut, kann aber bestimmt noch etwas optimiert werden. ;)
Hat man eine kleine pve-root Partition, kann diese schnell voll werden, da das Archiv in /tmp erstellt wird!
Problemchen
In beiden konvertierten Containern dürfen andere user keinen ping mehr ausführen!?
backup@backuppc:/$ ping heise.de ping: socket: Operation not permitted
Die Lösung war ein reinstall des iputils-ping Paketes, danach dürfen auch alle wieder pingen.
$ apt install iputils-ping --reinstall
Hallo, ich brauche etwas Hilfe bei diesem Thema, ich verstehe nicht sehr gut, wo ich die Parameter zum Konvertieren der VM, im Hilfeteil angeben soll??, helfen Sie mir bitte, ich habe Angst, mein Proxmox zu beschädigen, Grüße
Stimmt, ist vielleicht nicht ganz eindeutig wo was hin muss.
Hab die –help Auflistung erweitert.
Hallo, vielen Dank für die Klarstellung, ich habe es geschafft, das Skript zum Laufen zu bringen, aber ohne Erfolg, ich hatte die folgende Ausgabe:
Unbekannte Option: Funktionen
400 Option kann nicht analysiert werden
Irgendwelche Ideen??
Gib mal alles in einer Zeile ein, vielleicht irgendwo ein Leerzeichen vergessen?
./convert.sh -n backuppc -t 192.168.50.44 etc.
Hallo, wie lange kann das dauern bei einem 80GB Container? Sehe ich irgendwo einen Status? Danke. Gruß Jay
Der Status wird auf der Konsole ausgegeben.
Kopier mal 80GB von A nach B, solange wird das dann ca. dauern.
VORSICHT: Per default wird das TAR Archiv nach /tmp gespeichert.
Nicht das dein Proxmox Host voll läuft!
neue Option im Skript: -P /ssh Port angeben/
Danke, Anleitung aktualisiert.