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.

Składnia T3rr0r
źródło

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.

BillThor
źródło
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"
SingleNegationElimination
źródło
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>


Peter Teoh
źródło
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ł ...

Składnia T3rr0r
źródło
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
Vishu
źródło
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.

Wombat
źródło