Migrace KVM virtuální stroje na OpenVZ container

Z Wiki UnArt Slavičín
Skočit na navigaciSkočit na vyhledávání

Následující návod popisuje jak za běhu přemigrovat KVM virtuál (ale lze aplikovat na virtuál na XENu čí fyzický stroj) na OpenVZ container.

Požadavky:

Nainstalovaný a vypnutý OpenVZ container se stejnou distribucí a verzí Linuxu.

1. Na fyzickém stroji, kde se nachází nový container, vytvořte soubor /tmp/exclude.txt obsahující výčet souborů, které se nebudou kopírovat.

Do něj vložte obsah:

/tmp
/boot
/lib/modules
/etc/blkid
/etc/mtab
/etc/lvm
/etc/fstab
/etc/udev

2. Pomocí rsync překopírujte obsah virtuálu (místo a.b.c.d si doplňte adresu současného virtuálu, místo 123 zase CTID containeru):

rsync -avz -H -X --one-file-system --numeric-ids --exclude-from=/tmp/exclude.txt -e ssh root@a.b.c.d:/ /var/lib/vz/private/123/

Pokud máte máte několik samostatných oddílů (např. pro /var, /boot, apod.), opakujte předchozí bod pro každý z nich:

rsync -avz -H -X --one-file-system --numeric-ids --exclude-from=/tmp/exclude.txt -e ssh root@a.b.c.d:/var/ /var/lib/vz/private/123/var/

3. Na virtuálu vypněte všechny služby, které mohou zapisovat na disk (obzvláště mysql, postgresql, cron, apache2, ne však ssh!):

/etc/init.d/mysql stop
/etc/init.d/postgresql stop
/etc/init.d/cron stop
/etc/init.d/apache2 stop
...

V tuto chvíli se se bude váš virtuál pro návštěvníky tvářit jako nedostupný!

4. Opakujte bod 2., tentokrát to však bude trvat o poznání kratší dobu.

5. Na containeru je třeba ještě upravit některé soubory, takže na fyzickém stroji s ním spusťte (opět si místo 123 doplňte vaše CTID):

sed -i -e 's/^[0-9].*getty.*tty/#&/g'  /var/lib/vz/private/123/etc/inittab
ln -sf /proc/mounts /var/lib/vz/private/123/etc/mtab
mv /var/lib/vz/private/123/etc/fstab /var/lib/vz/private/123/etc/fstab.old
egrep '/dev/pts|/dev/shm|/proc|/sys' /var/lib/vz/private/123/etc/fstab.old > /var/lib/vz/private/123/etc/fstab

6. Vypněte starý virtuál, spusťte container a pomocí konzole otestujte (opět si místo 123 doplňte vaše CTID):

vzctl start 123
vzctl enter 123

Nyní by mělo již všechno fungovat (otestujte pingem).

Jako jeden skript:

# ID containeru
export CTID=123
# Adresa puvodniho stroje
export HOST="a.b.c.d"

rsync -avz -H -X --one-file-system --numeric-ids --exclude-from=/tmp/exclude.txt -e ssh root@$HOST:/ /var/lib/vz/private/$CTID/
rsync -avz -H -X --one-file-system --numeric-ids --exclude-from=/tmp/exclude.txt -e ssh root@$HOST:/boot/ /var/lib/vz/private/$CTID/boot/
rsync -avz -H -X --one-file-system --numeric-ids --exclude-from=/tmp/exclude.txt -e ssh root@$HOST:/var/www/ /var/lib/vz/private/$CTID/var/www/

sed -i -e 's/^[0-9].*getty.*tty/#&/g'  /var/lib/vz/private/$CTID/etc/inittab
ln -sf /proc/mounts /var/lib/vz/private/$CTID/etc/mtab
mv /var/lib/vz/private/$CTID/etc/fstab /var/lib/vz/private/$CTID/etc/fstab.old
egrep '/dev/pts|/dev/shm|/proc|/sys' /var/lib/vz/private/$CTID/etc/fstab.old > /var/lib/vz/private/$CTID/etc/fstab

vzctl start $CTID
vzctl enter $CTID

Převzato z http://wiki.openvz.org/Physical_to_container