Zastanawiam się, jaki jest właściwy sposób przenoszenia maszyny wirtualnej między dwoma hostami KVM bez korzystania z jakiejkolwiek pamięci współdzielonej
Czy wystarczy skopiować pliki dyskowe i zrzut XML ze źródłowej maszyny KVM na docelową? Jeśli tak, jakie polecenia należy uruchomić, aby zaimportować maszynę wirtualną w miejscu docelowym?
System operacyjny to Ubuntu zarówno na Dom0, jak i DomU.
Z góry dziękuję
kvm-virtualization
ubuntu-12.04
Onitlikesonic
źródło
źródło
/dev/mapper/vgname-lvname
tam ścieżkęPonieważ nie mogę jeszcze komentować, muszę w ten sposób opublikować ten dodatek do odpowiedzi dyasny.
Jeśli maszyna wirtualna ma migawki, które chcesz zachować, należy zrzucić pliki xml migawki w źródle
virsh snapshot-dumpxml $dom $name > file.xml
dla każdej migawki na liście migawek maszyny wirtualnejvirsh snapshot-list --name $dom
.Następnie użyj miejsca docelowego,
virsh snapshot-create --redefine $dom file.xml
aby zakończyć migrację migawek.Jeśli zależy Ci również na tym, która migawka jest aktualna, wykonaj dodatkowo na źródłowym:
virsh snapshot-current --name $dom
i docelowym:
virsh snapshot-current $dom $name
Następnie możesz użyć
virsh snapshot-delete --metadata $dom $name
dla każdej migawki, aby usunąć pliki XML ze źródła, lub możesz po prostu usunąć je/var/lib/libvirt/qemu/snapshots/$guestname
Źródła:
lista mailingowa użytkowników libvirt
http://kashyapc.com/2012/09/14/externaland-live-snapshots-with-libvirt/
źródło
Tak, wystarczy skopiować plik XML i obrazy dysku wirtualnego, ale oczywiście wyklucza to migrację „na żywo”. Maszyna wirtualna musi zostać wyłączona podczas tej procedury.
Po skopiowaniu do miejsca docelowego
libvirtd
należy go ponownie załadować lub uruchomić ponownie, aby rozpoznać nowy plik XML.źródło
virsh
. Po prostu skopiowałbym pliki bezpośrednio i załadowałem ponownielibvirtd
.Szczegółowe instrukcje dotyczące kopiowania maszyn wirtualnych za pomocą blockync.py
Te instrukcje dotyczą maszyny wirtualnej korzystającej z dysku dostarczonego przez LVM i zakładają, że Python znajduje się na każdym z hostów
Pobierz skrypt blockync.py ze strony https://gist.github.com/rcoup/1338263 i umieść host źródłowy i docelowy w folderze / home / user.
Prekursor
Będziesz także musiał mieć dostęp „sudo” do „root” na obu komputerach.
Alternatywnie możesz zrobić wszystko jako root, ale tylko jeśli twój klucz ssh daje ci dostęp do roota przynajmniej do maszyny docelowej. ** W takim przypadku usuń nazwę użytkownika z wiersza poleceń.
Przykładowe ustawienia
Procedura
Pierwsze kroki na hoście źródłowym
Skopiuj zrzuconą definicję na nowy komputer (host „docelowy”), np .:
możesz zmienić wewnętrzny adres IP na docelową nazwę serwera dom0 ** Uwaga: najlepiej jest użyć adresu IP dla celu, np .:Jeśli nie możesz skopiować z powodu kluczy, plik cat larry.xml i skopiuj go. Następnie możesz ssh na innym komputerze, utworzyć plik i wkleić go.
Znajdź rozmiar i nazwę dysku maszyny wirtualnej za pomocą
.** Powyższe polecenie powinno pokazywać rozmiar dokładnie w bajtach. ** Nazwa dysku komputera znajduje się w pierwszej kolumnie listy, jego grupa woluminów w drugiej, a rozmiar w ostatniej. ** Określ nazwę urządzenia jako / dev // ** Sprawdź ją za pomocą polecenia „ll” Na przykład w tym wyniku: vm_larry vg1 -wi-ao ---- 69793218560B
Pierwsze kroki na hoście docelowym
Utwórz plik definicji woluminu, np .:
lub z następującymi wierszami: UWAGA - Musisz pobrać rozmiar w bajtach z oryginalnej maszyny wirtualnej i umieścić w poniższym skrypcie. Poleceniem na maszynie źródłowej dla rozmiaru było sudo lvs - jednostki BUwaga: ta definicja dotyczy 69793218560 bajtów dysku dla maszyny wirtualnej VM, w razie potrzeby zmień ją dla rzeczywistej maszyny wirtualnej.
Uwaga: nazwa i ostatnia część ścieżki powinny być zgodne i będą używane jako nazwa nowego dysku.
Utwórz nowy dysk z definicji, używając
wyświetli Vol larry.domainname.com.au utworzony z larry.domainname.com.au-vol.xml
Udostępnij plik urządzenia dyskowego:
Edytuj skopiowaną definicję xml, np .:
Znajdź definicję dysku w pliku (wyszukaj „source dev =”) i zamień urządzenie na właśnie utworzone (możesz ls / dev / centos /, aby zobaczyć vm), np .: / dev / drbd4 -> / dev / centos / larry.domainname.com.au
Ta zmiana mostu była wyjątkowa w naszej sytuacji.
** Znajdź wszelkie odniesienia do „br1” w sekcjach interfejsu i zmień je na „br0”, np. Zmieniasz most źródłowy, więc linia wygląda tak
Ostatnie kroki na hoście źródłowym
Zaloguj się do hosta źródłowego, np
Najlepszą praktyką byłoby zamknięcie maszyny wirtualnej na hoście źródłowym przed wykonaniem ostatecznej synchronizacji, ale nie trzeba tego robić. (zamknięcie systemu Virsh NameOfMachine)
Jeśli nie masz jeszcze hosta źródłowego, pobierz skrypt blockync.py ze strony https://gist.github.com/rcoup/1338263
Jeśli twoja nazwa użytkownika to użytkownik (na przykład), skopiuj skrypt blockync.py na oba komputery do / home / user i użytkownik chown: user i skrypt chmod 755.
Polecenie wykonujące kopiowanie
Uwaga: pierwsza nazwa urządzenia jest dla hosta źródłowego, jak określono w poleceniu „lvs”; ten jest z hosta źródłowego [[chewie]].
Uwaga: spowoduje to zniszczenie zawartości dysku docelowego, upewnij się, że /dev/mapper/centos-larry.domainname.com.au jest poprawny!
Uwaga: synchronizacja zajmie dużo czasu - około 100 sekund na gigabajt, tj .: 90 minut na dysk 60 gigabajtów.
Można jednak wykonać synchronizację, gdy maszyna wirtualna jest używana; kolejne synchronizacje mogą być do 25 procent szybsze
Skrypt wydrukuje parametry, których używa (może pojawić się komunikat o przestarzałym module, to jest w porządku). Następnie wyświetla komendę ssh, której używa i uruchamia ją (wtedy zobaczysz komunikat tylko dla autoryzowanego personelu). Podczas synchronizacji wyświetli całkowitą liczbę skopiowanych bloków i średnią prędkość. Na koniec wyświetla komunikat o zakończeniu z liczbą sekund, które zajęło.
Rzeczy, które warto wiedzieć
Możesz anulować synchronizację za pomocą CTRL C i zrestartować ją później, ponownie uruchamiając polecenie
Ostatnie kroki na hoście docelowym
Uwaga: może być konieczna zmiana szczegółów maszyny wirtualnej w celu dopasowania do nowego środowiska.
źródło
Wystąpił ten problem z kilkoma moimi starszymi serwerami KVM, ale jest to naprawdę denerwujące, kiedy to się dzieje, i może powodować problemy z dowolną z zainstalowanych maszyn wirtualnych. W moim przypadku regularnie spychał jedną z moich maszyn wirtualnych do stanu resetowania, ponieważ miejsce na dysku było powoli wyczerpane. Poniższe instrukcje są nieco wrażliwe na wersję KVM / Distro. W moim przypadku mam CentOS 7.5
Domyślnie obrazy KVM znajdują się w lokalizacji / var / lib / libvirt / images /
Musisz znaleźć nazwę maszyny wirtualnej, w tym celu użyj listy virsh
Zatrzymaj VM virsh stop VM-Name
Dla mnie najpierw kopiuję plik, a nie ruszam się. Skopiuj plik qcow do nowej lokalizacji
Edytuj plik XML VM, aby odwoływał się do nowej lokalizacji pliku źródłowego. Edytuj VM-Name
Będziesz chciał zmienić „plik źródłowy” tego pliku
Uruchom ponownie usługę libvirtd
Następnie uruchom ponownie maszynę wirtualną i powinieneś już iść.
źródło