Jak utworzyć duplikat maszyny wirtualnej KVM / libvirt / virt-manager?


13

Jestem trochę zagubiony w virt-manager / libvirt / KVM.

Mam działającą maszynę wirtualną KVM (Windows XP), która działa dobrze.

Maszyna wirtualna jest zabezpieczona przez plik o wielkości około 4 GB (a .img ).

Teraz chcę zrobić coś bardzo prostego: chcę zduplikować moją maszynę wirtualną.

Pomyślałem „OK, nie ma problemu, skopiujmy plik 4 GB i skopiuj plik XML” .

Ale wtedy często zadawane pytania dotyczące libvirt napisane są wielkimi literami: „NIE POWINNO ZADBAĆ O GDZIE JEST PRZECHOWYWANY XML”

libvirt FAQ

OK, dobrze, nie powinno mnie to obchodzić. Ale jak mogę zduplikować moją maszynę wirtualną?

Chcę utworzyć nową maszynę wirtualną, która jest kopią tej maszyny wirtualnej.

Odpowiedzi:


4

virshpozwoli ci edytować, eksportować i importować definicję XML dla twoich serwerów. Użyłbym virt-clonedo wygenerowania sklonowanego pliku obrazu i wyeksportowania pliku XML. Dla bezpieczeństwa usunę konfigurację klonowania z oryginalnego serwera.


42

Najwygodniejszy jest po prostu:

# virt-clone --connect=qemu://example.com/system -o this-vm -n that-vm --auto-clone

Który utworzy kopię this-vm, nazwie that-vmi zajmie się duplikowaniem urządzeń pamięci masowej. Nic nowego tutaj oprócz szczegółów.

Co więcej, FAQ mówi, że opisów domen XML nie można edytować bezpośrednio, musisz przejść przez libvirt. Aby wykonać kroki wykonane przez virt-clonepolecenie, możesz:

source_vm=vm_name
new_vm=new_vm_name

# You cannot "clone" a running vm, stop it.  suspend and destroy
# are also valid options for less graceful cloning
virsh shutdown "$source_vm"

# copy the storage.
cp /var/lib/libvirt/images/{"$source_vm","$new_vm"}.img

# dump the xml for the original
virsh dumpxml "$source_vm" > "/tmp/$new_vm.xml"

# hardware addresses need to be removed, libvirt will assign
# new addresses automatically
sed -i /uuid/d "/tmp/$new_vm.xml"
sed -i '/mac address/d' "/tmp/$new_vm.xml"

# and actually rename the vm: (this also updates the storage path)
sed -i "s/$source_vm/$new_vm" "/tmp/$new_vm.xml"

# finally, create the new vm
virsh define "/tmp/$new_vm.xml"
virsh start "$source_vm"
virsh start "$new_vm"

Działa to również w przypadku kopiowania przez maszynę wirtualną na inny host: użyj sftp zamiast cp, (możliwe) zmień ścieżkę obrazu przed „zdefiniowaniem” nowego vm i sftp również that-vm.xml na innym hoście.
Andreas Florath

Dzięki za to, zaoszczędziłem sporo czasu. Problemem było klonowanie w porównaniu do tworzenia nowego, ponieważ jeśli utworzę nowy węzeł, wersje pakietu nie byłyby zsynchronizowane z innymi węzłami, które korzystały z lokalnego serwera lustrzanego.
Mike Purcell,

Czy virt-clonepoprawnie obsługuje pełne szyfrowanie dysku? Czy to znaczy, że poprosi mnie o odszyfrowanie pw przed zrobieniem tego?
programista

Myślę, że sed -i "s/$source_vm/$new_vm" "/tmp/$new_vm.xml"powinienem przeczytać sed -i "s/$source_vm/$new_vm/" "/tmp/$new_vm.xml"lub przynajmniej na temat mojej pochodnej debian sed narzeka na brakujące końcowe /. Dzięki za informację, mój klon virsh po prostu w ogóle nie działał.
numer 9

3

Oprócz „virt-clone” możesz zduplikować maszynę wirtualną w ten sposób:

  1. Upewnij się, że istniejąca maszyna wirtualna (do zduplikowania) jest zamknięta.
  2. wykonaj „sudo virsh dumpxml <domid>” istniejącej maszyny wirtualnej i zapisz wyjściowy plik xml.
  3. Zmodyfikuj znacznik <name> pod znacznikiem <domain>.
  4. Użyj „uuidgen”, aby wygenerować nowy unikalny identyfikator, i użyj go, aby zmodyfikować istniejący tag <uuid>.
  5. Utwórz kopię istniejących obrazów wirtualnych qcow używanych przez maszynę wirtualną (zwykle przechowywanych w / var / lib / libvirt / images, ale dla pewności po prostu przeczytaj plik XML w celu uzyskania dokładnej lokalizacji). Polecenie to „sudo cp /var/lib/libvirt/images/xxx.qcow2 rrrr.qcow2” i wpisz nowy plik rrrr.qcow2 w pliku XML.
  6. Rozpocznij nowy vm: sudo virsh zdefiniuj nowy.xml
  7. Rozpocznij nowy domid: sudo virsh start <new_domid>



0

Najwyraźniej klon virt jest właściwą drogą.

Próbowałem powielić XML, ale nie pojawiłby się w virt-manager.

Nadal zastanawiam się, jak mogę przenieść XML + .img do nowego systemu, który powiedział ...


0

Następujące polecenie działało dla mnie (przed uruchomieniem polecenia należy zamknąć VSA / Vm)

# virt-clone --connect=qemu:///system -o present_vsa/vm_name -n vsa/vm_to_be_cloned_name --auto-clone

1
Oprócz pseudo-nazw maszyn wirtualnych jest to identyczne z poleceniem z trzyletniej odpowiedzi - ale brakuje w niej dodatkowych informacji.
G-Man mówi „Przywróć Monikę”

0

virt-clone - auto-klon nie wydaje się dobrze grać z LVM. Spodziewałem się, że utworzy migawkę i użyje jej, ale zamiast tego skopiuje wszystkie dane.

Lepiej zrobić dumpxml / zdefiniować trasę; i pamiętaj, aby zamontować główny system plików klonu i odpowiednio zmienić adresy IP i nazwę hosta przed rozpoczęciem oryginalnego i klonowania.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.