Crmgo Blog

Kloniranje KVM

Kloniranje KVM

Pre nego što klonirate, uverite se da izvorni sistem sadrži sve što je potrebno za buduće klonove. Ako ste upravo instalirali operativni sistem, razmislite o tome da li ima smisla dodatno instalirati mc, nano, traceroute, podesiti mrežu, hostname, motd za SSH, iptables i slično. Proverite rad mreže, instalirajte najnovije…

Kloniranje KVM

Пре клонирања уверите се да изворни систем садржи све неопходно за будуће клонове. Ако сте управо инсталирали оперативни систем, размислите да ли има смисла доинсталирати alate попут mc, nano, traceroute, подесити мрежу, hostname, motd за ssh, iptables итд. Проверите функционисање мреже, инсталирајте најновија ажурирања. Можда ћете желети да подесите и httpd са поштанским сервером. Уверите се да оригинални систем за клонирање не изазива сумње и да ради стабилно. Спремни? Хајде да кренемо!

Погледајмо листу виртуелних машина:

# virsh list --all
 Id    Name                           State
----------------------------------------------------
 4     vm1                            running

Креираћемо копију vm1 и назвати је vm2.

Прво ћемо зауставити оригинал:

# virsh suspend vm1

или га искључити:

# virsh shutdown vm1

Даље предлажем да размотримо два варианта:

1-ви вариант: алатка virt-clone:

# virt-clone -o vm1 -n vm2 -f /data/vms/vm2.img --connect=qemu:///system WARNING Setting the graphics device port to autoport, in order to avoid conflicting. Allocating 'vm2.img' | 20 GB 00:00:06

Clone 'vm2' created successfully.

Пошто смо команду извршили као root, virt-clone је креирао клон диска vm1.img под именом vm2.img са власништвом root:root, а не qemu:qemu. То не утиче на брзину. Најважније је уверити се да је диск креиран:

# ls -al /data/vms/ total 3104656 drwxr-xr-x. 2 root root 4096 Apr 27 06:17 . drwxr-xr-x. 5 root root 4096 Apr 19 17:45 .. -rw-r--r--. 1 qemu qemu 21478375424 Apr 27 06:17 vm1.img -rw-r--r--. 1 root root 1587609600 Apr 27 06:17 vm2.img

При покретању vm2 можете видети следећу поруку:

# virsh start vm2 error: Failed to start domain vm2 error: internal error: process exited while connecting to monitor: 2016-04-27T10:19:21.991952Z qemu-kvm: -chardev socket,id=charchannel0, path=/var/lib/libvirt/qemu/channel/target/domain-vm1/org.qemu.guest_agent.0,server,nowait: Failed to bind socket: Permission denied 2016-04-27T10:19:21.992122Z qemu-kvm: -chardev socket,id=charchannel0,path=/var/lib/libvirt/qemu/channel/target/domain-vm1/org.qemu.guest_agent.0, server,nowait: chardev: opening backend "socket" failed

Пазите на domain-vm1 у тексту грешке. Исправите ово (пронађите domain-vm1 и замените са domain-vm2):

# virsh edit vm2 Domain vm2 XML configuration edited.

# virsh start vm2
Domain vm2 started

2-ви вариант (ручно)

Пошто vm2 већ постоји, креираћемо vm3 и упоредити резултате.

Искључујемо оригинал:

# virsh shutdown vm1

Копирамо диск:

# cp /data/vms/{vm1,vm3}.img

Експортирамо xml из vm1:

# virsh dumpxml vm1 > /tmp/vm3-template.xml

Уклонимо UUID оригинала, libvirt ће додати нове вредности:

# sed -i /uuid/d /tmp/vm3-template.xml # sed -i '/mac address/d' /tmp/vm3-template.xml

Преименујемо имена са старог на ново:

# sed -i s/vm1/vm3/ /tmp/vm3-template.xml

Креирамо нову vm3:

# virsh define /tmp/vm3-template.xml # virsh start vm1 # virsh start vm3

Овај вариант сам видео овде: http://unix.stackexchange.com/questions/8351/

Анализа резултата

Оно у чему сам видео разлике је то што је у првом случају величина диска vm2 значајно одступала од величине vm3:

# ls -al --block-size=M /data/vms/ total 4550M drwxr-xr-x. 2 root root 1M Apr 27 06:44 . drwxr-xr-x. 5 root root 1M Apr 19 17:45 .. -rw-r--r--. 1 qemu qemu 20484M Apr 27 07:00 vm1.img -rw-r--r--. 1 qemu qemu 1515M Apr 27 07:00 vm2.img -rw-r--r--. 1 qemu qemu 20484M Apr 27 06:59 vm3.img

Izgleda da virt-clone prilikom kloniranja kopira samo stvarno zauzet prostor od strane virtuelne mašine. Veličina vm2.img je samo malo veća od onoga što pokazuje „df -h“ izvršen u vm1, vm2 ili vm3 (pošto između kloniranja nisam ništa radio sa gostujućim sistemima, njihova veličina se nije promenila u odnosu na „roditelja“ vm1).

Uopšteno, kada se prvi put suočite sa nečim, pokušajte da analizirate promene nakon svakog koraka. Napravili ste „sed -i /uuid/d /tmp/vm3-template.xml“ – proverite. Uporedite sa originalom. Zatim ste klonirali vm2, za svaki slučaj pogledajte direktorijum gde su vam smešteni diskovi gostujućih sistema. Napravili ste novu mrežu – proverite da li je kreiran fajl podešavanja mreže u /etc/libvirt/qemu/networks. I tako dalje.

Gde god da nešto vidite, pokušajte da sve što vam je nepoznato proverite pre izvršavanja u konzoli. Videli ste u ovom članku primer komande virt-clone, ne lenjite se, idite na internet i potražite ko još tako predlaže, šta piše u man stranici.

Pokušajte da dokumentujete, zapišete i komentarišete sve vaše akcije, i tada ćete dobiti svoj sopstveni how-to koji ćete koristiti kada budete morali da kreirate još nekoliko gostujućih sistema za godinu dana. Ako ne kreirate virtuelne mašine redovno, normalno je da zaboravite sintaksu, a istorija komandi može biti očišćena ili popunjena toliko raznih komandi, još i sa greškama u kucanju, da ćete ponovo morati da se snalazite ispočetka.

# virsh list --all
 Id    Name                           State
----------------------------------------------------
 7     vm2                            running
 9     vm1                            running
 10    vm3                            running

Napomena: tekst može biti uz pomoć AI uz ljudsku proveru. Odgovoran: Dmytro Lomaka, Kaltenkirchen.

Kategorije: KVM