LXC klonen

Manchmal kommt es vor, dass ein LXC von einem Host auf einen anderen übertragen werden muss. Wenn die Übertragung per tarball geschehen soll, sind ein paar kleine Gegebenheiten zu beachten, damit das funktioniert.

Tarball erstellen

Die UIDs des Quellsystems, von dem der LXC kommt, können sich unter Umständen von den UIDs auf dem Zielsystem unterscheiden. Damit der tarball dadurch nicht die Eigentümer der Dateien durcheinander wirft, muss der tarball mit der Option --numeric-owner erzeugt werden. Ausserdem sollte mit --preserve-permissions (oder -p) dafür gesorgt werden, dass die Berechtigungen beim Entpacken wieder korrekt hergestellt werden und nicht etwa durch die umask des Entpackenden beeinflusst werden:

root@lxc_src_host:~# tar --numeric-owner -pczf lxc.tgz /var/lib/lxc/srclxc/

Auf dem Zielsystem kann der tarball dann wie folgt entpackt werden:

root@lxc_dst_host:# tar -C / -xzf lxc.tgz

Fehlermeldungen

Möglicherweise treten beim Erstellen des tarballs Fehlermeldungen auf. Falls Meldungen erscheinen, dass Sockets ignoriert werden, ist das harmlos:

tar: /var/lib/lxc/srclxc/rootfs/run/mysqld/mysqld.sock: Socket ignoriert
tar: /var/lib/lxc/srclxc/rootfs/dev/log: Socket ignoriert
tar: /var/lib/lxc/srclxc/rootfs/var/lib/icinga/ido.sock: Socket ignoriert

In der Regel werden die Sockets von der entsprechenden Software (zum Beispiel MySQL) beim ersten Starten neu erzeugt.

Auf dem Zielsystem

Auf dem Zielsystem sollte die Konfigurationsdatei /var/lib/lxc/srclxc/config überprüft werden. Möglicherweise bietet der neue Host eine andere Netzwerkkonfiguration, so dass die Netzwerkeinträge der Datei angepasst werden müssten.

Am besten wird der Container beim ersten Start im Vordergrund gestartet, um zu sehen, ob er fehlerfrei hochfährt:

lxc-start -n srclxc

Wenn alles funktioniert, noch den SymLink für das automatische Starten setzen:

ln -s /var/lib/lxc/srclxc/config /etc/lxc/auto/monitor

Fertig.