Пре клонирања уверите се да изворни систем садржи све неопходно за будуће клонове. Ако сте управо инсталирали оперативни систем, размислите да ли има смисла доинсталирати 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
