Crmgo Blog

Klonowanie KVM

Klonowanie KVM

Przed sklonowaniem upewnij się, że źródło zawiera wszystko, co jest potrzebne do przyszłych klonów. Jeśli właśnie zainstalowałeś system operacyjny, zastanów się, czy warto doinstalować mc, nano, traceroute, skonfigurować sieci, hostname, motd dla ssh, iptables i inne. Sprawdź działanie sieci, zainstaluj najnowsze…

Klonowanie KVM

Przed klonowaniem upewnij się, że obraz źródłowy zawiera wszystko, co jest potrzebne do przyszłych klonów. Jeśli właśnie zainstalowałeś system operacyjny, zastanów się, czy nie warto zainstalować dodatkowych narzędzi, takich jak mc, nano, traceroute, skonfigurować sieci, hostname, motd dla SSH, iptables itp. Sprawdź działanie sieci, zainstaluj najnowsze aktualizacje. A może warto też skonfigurować httpd i serwer pocztowy? Upewnij się, że oryginalny obraz do sklonowania nie wzbudza podejrzeń i działa stabilnie. Gotowi? Do dzieła!

Sprawdźmy listę maszyn wirtualnych:

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

Stworzymy kopię vm1 i nazwiemy ją vm2.

Najpierw zatrzymamy oryginał:

# virsh suspend vm1

lub go wyłączymy:

# virsh shutdown vm1

Następnie proponuję rozważyć dwa warianty:

1. Wariant: narzędzie 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.

Ponieważ polecenie zostało wykonane jako root, virt-clone utworzył klon dysku vm1.img o nazwie vm2.img z właścicielem root:root, a nie qemu:qemu. Nie ma to wpływu na prędkość. Ważne jest, aby upewnić się, że dysk został utworzony:

# 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

Podczas uruchamiania vm2 możesz zobaczyć taki komunikat:

# 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

Zwróć uwagę na domain-vm1 w tekście błędu. Popraw to (znajdź domain-vm1 i zamień na domain-vm2):

# virsh edit vm2 Domain vm2 XML configuration edited.

# virsh start vm2
Domain vm2 started

2. Wariant (ręcznie)

Ponieważ vm2 już istnieje, stwórzmy vm3 i porównajmy wyniki.

Wyłączamy oryginał:

# virsh shutdown vm1

Kopiujemy dysk:

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

Tworzymy dump xml od vm1:

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

Usuwamy UUID oryginału, libvirt doda nowe wartości:

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

Zmieniamy nazwy ze starej na nową:

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

Tworzymy nową vm3:

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

Ten wariant podpatrzyłem tutaj: http://unix.stackexchange.com/questions/8351/

Analiza wyników

Różnicę, którą zauważyłem, stanowi to, że w pierwszym przypadku rozmiar dysku vm2 znacznie różnił się od rozmiaru 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

Wydaje się, że virt-clone podczas tworzenia klonu kopiuje tylko faktycznie zajęte przez masę wirtualną miejsce. Rozmiar vm2.img jest tylko nieznacznie większy niż wyniki polecenia "df -h" wykonanego w vm1, vm2 lub vm3 (ponieważ między klonowaniami nie wykonywałem żadnych operacji na gościach, ich rozmiar nie zmienił się względem "rodzica" vm1).

Ogólnie rzecz biorąc, gdy po raz pierwszy spotykasz się z czymś nowym, staraj się analizować zmiany po każdym kroku. Wykonałeś "sed -i /uuid/d /tmp/vm3-template.xml" – sprawdź. Porównaj z oryginałem. Następnie sklonuj vm2, dla pewności sprawdź katalog, w którym przechowywane są dyski gości. Utworzono nową sieć – upewnij się, czy został utworzony plik konfiguracyjny sieci w /etc/libvirt/qemu/networks. I tak dalej.

Gdziekolwiek coś zobaczysz, staraj się wszystko, co Ci nieznane, sprawdzić przed wykonaniem w konsoli. Widziałeś w tym artykule przykład polecenia virt-clone, nie lenij się, zajrzyj do internetu i poszukaj, kto jeszcze tak proponuje, co pisze man.

Staraj się dokumentować, zapisywać, komentować wszystkie swoje działania, a wtedy otrzymasz własny how-to i będziesz go używać, gdy za rok będziesz musiał stworzyć jeszcze kilka gości. Jeśli nie tworzysz regularnie maszyn wirtualnych, to normalne, że zapomnisz składnię, a historia może zostać wyczyszczona lub wypełniona tak dużą ilością różnych poleceń, a nawet z literówkami, że będziesz musiał znów wszystko analizować od nowa.

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

Uwaga: wpis mógł powstać z pomocą AI i redakcji. Odpowiedzialny: Dmytro Lomaka, Kaltenkirchen.

Kategorie: KVM