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
- Musisz mieć dostęp „ssh” do obu komputerów (źródłowego i docelowego) dla swojego użytkownika.
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
- Maszyna wirtualna znajduje się na hoście dom0 o nazwie chewie
- Miejsce docelowe pożądane na hoście dom0, znane jako darth, i miało tutaj wewnętrzny adres IP 10.10.10.38 (dla naszego przykładu)
- W naszym przypadku używamy centos 7 jako systemu operacyjnego dom0 na obu komputerach
- Maszyna WIRTUALNA w tym przypadku, w którym się poruszamy, nazywa się LARRY
- Użytkownik wykonujący akcję to USER (który będzie Twoim imieniem)
- DOM0 oznacza rzeczywisty serwer fizyczny
Procedura
Pierwsze kroki na hoście źródłowym
- Zaloguj się do hosta dom0, który obecnie ma maszynę (host „źródłowy”), np .:
ssh użytkownik@chewie.domainname.com.au
- Pozostań jako użytkownik, więc nie zostań użytkownikiem sudo * Wyświetl listę maszyn z
sudo virsh --all
- Zrzuć definicję komputera, używając np .:
sudo virsh dumpxml larry> larry.xml
Skopiuj zrzuconą definicję na nowy komputer (host „docelowy”), np .:
scp -p larry.xml 10.10.10.38:larry.xml
możesz zmienić wewnętrzny adres IP na docelową nazwę serwera dom0 ** Uwaga: najlepiej jest użyć adresu IP dla celu, np .: scp -p larry.xml użytkownik@10.10.10.38: larry.xml
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ą
sudo lvs --units B
.
** 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
LV VG Attr LSize Pula Pochodzenie Dane% Meta% Przenieś Log Cpy% Synchronizacja Konwertuj
lv_root vg1 -wi-ao ---- 53687091200B
lv_swap vg1 -wi-ao ---- 17179869184B
vm_vsrv1 vg1 -wi-ao ---- 193273528320B
vm_vsrv10 vg1 -wi-ao ---- 64424509440B
vm_vsrv11 vg1 -wi-ao ---- 161061273600B
vm_vsrv12 vg1 -wi-ao ---- 204010946560B
vm_vsrv2 vg1 -wi-ao ---- 140110725120B
vm_vsrv3 vg1 -wi-ao ---- 128849018880B
vm_larry vg1 -wi-ao ---- 69793218560B
vm_vsrv5 vg1 -wi-ao ---- 257698037760B
vm_vsrv6 vg1 -wi-ao ---- 64424509440B
vm_vsrv7 vg1 -wi-ao ---- 161061273600B
vm_vsrv8 vg1 -wi-ao ---- 64424509440B
vm_vsrv9 vg1 -wi-ao ---- 214748364800B
Pierwsze kroki na hoście docelowym
- Zaloguj się do hosta docelowego, np
ssh użytkownik@darth.domainname.com.au
- Pozostań jako własny użytkownik. tj. nie rootuj.
Utwórz plik definicji woluminu, np .:
vi larry.domainname.com.au-vol.xml
lub nano larry.domainname.com.au-vol.xml
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 B
<volume type='block'>
<name>larry.domainname.com.au</name>
<capacity unit='bytes'>69793218560</capacity>
<allocation unit='bytes'>69793218560</allocation>
<target>
<path>/dev/centos/larry.domainname.com.au</path>
<permissions>
<mode>0600</mode>
<owner>0</owner>
<group>6</group>
<label>system_u:object_r:fixed_disk_device_t:s0</label>
</permissions>
</target>
</volume>
Uwaga: 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
sudo virsh vol-create --pool centos larry.domainname.com.au-vol.xml
wyświetli Vol larry.domainname.com.au utworzony z larry.domainname.com.au-vol.xml
Udostępnij plik urządzenia dyskowego:
sudo chgrp wheel /dev/mapper/centos-larry.domainname.com.au
sudo chmod g + rw /dev/mapper/centos-larry.domainname.com.au
Edytuj skopiowaną definicję xml, np .:
vi larry.xml
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
ssh użytkownik@chewie.domainname.com.au
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.
- Jeśli nie ma go jeszcze na hoście docelowym, skopiuj go tam, np .:
scp -p blocksync.py użytkownik@10.10.10.38: blocksync.py
- Użyj go, aby skopiować dysk źródłowy na dysk docelowy, np
Polecenie wykonujące kopiowanie
sudo -E python blocksync.py / dev / vg1 / vm_larry użytkownik@10.10.10.38 /dev/mapper/centos-larry.domainname.com.au -b 4194304
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
- Zaloguj się do hosta docelowego, np
ssh użytkownik@darth.domainname.com.au
- Utwórz maszynę wirtualną, np .:
virsh zdefiniuj larry.xml
- Uruchom nowo zdefiniowaną maszynę, np .:
Sudo Virsh rozpocząć Larry
- Zaznacz, aby rozpocząć przy rozruchu hosta, np .:
Sudo Virsh Autostart Larry
Uwaga: może być konieczna zmiana szczegółów maszyny wirtualnej w celu dopasowania do nowego środowiska.