Kvm vm'yi oynatmanın doğru yolu


34

Herhangi bir paylaşılan depolama birimi kullanmadan VM'yi iki KVM sunucusu arasında taşımanın doğru yolunun ne olduğunu merak ediyorum.

Disk dosyalarını ve XML dökümünü kaynak KVM makinesinden hedefine kopyalamak yeterli olur mu? Öyleyse, hedef üzerindeki vm dosyasını almak için hangi komutların çalıştırılması gerekir?

İşletim sistemi hem Dom0 hem de DomU’da Ubuntu’dur.

Şimdiden teşekkürler

Yanıtlar:


41
  1. VM disklerini /var/lib/libvirt/imagessrc ana bilgisayarındaki hedef ana bilgisayardaki aynı dizine kopyala
  2. kaynak ana bilgisayarda çalıştırın virsh dumpxml VMNAME > domxml.xmlve bu xml'yi hedef ana bilgisayara kopyalayın
  3. hedef ana bilgisayar çalışmasında virsh define domxml.xml

VM'yi başlatın.

  • Disk konumu farklıysa, hedef ana bilgisayardaki görüntüyü göstermek için xml aygıtlarını / disk düğümünü düzenlemeniz gerekir.
  • VM özel tanımlı ağlara eklenmişse, onları hedef ana bilgisayardaki xml'den düzenlemelisiniz ya da yeniden tanımlamanız gerekir ( virsh net-dumpxml > netxml.xmlve virsh net-define netxml.xml && virsh net-start NETNAME & virsh net-autostart NETNAME).

ve eğer depolama yerine dosya yerine mantıksal birim kullanıyorsanız ... sanırım cihazla ilgili bir sorun
yaşayacağımı

2
Cihazı /dev/mapper/vgname-lvname
UUID'leri xml'den kaldırabilir

10

Henüz yorum yapamadığım için, bu eki Dyasny'nin bu şekilde cevabına göndermem gerekiyor.

VM'de korumak istediğiniz anlık görüntüler varsa, VM'deki anlık virsh snapshot-dumpxml $dom $name > file.xmlgörüntü listesindeki her anlık görüntü için kaynaktaki anlık görüntü xml dosyalarını atmanız gerekir virsh snapshot-list --name $dom.

Ardından hedefte virsh snapshot-create --redefine $dom file.xmlanlık görüntüleri taşımayı tamamlamak için kullanın .

Hangi anlık görüntünün geçerli olduğuna da dikkat ediyorsanız, ek olarak kaynak:
virsh snapshot-current --name $dom
ve hedef:
virsh snapshot-current $dom $name

Daha sonra virsh snapshot-delete --metadata $dom $name, kaynaktaki xml dosyalarını silmek için her bir anlık görüntü için kullanabilirsiniz veya yalnızca bunları silebilirsiniz./var/lib/libvirt/qemu/snapshots/$guestname


Kaynaklar:

  1. libvirt-users e-posta listesi

  2. http://kashyapc.com/2012/09/14/externaland-live-snapshots-with-libvirt/


Zaten bir yorum için çok uzun, endişelenmenize gerek yok. Katkılarınız için teşekkürler
HBruijn

Yorum yapma hakkını hakettiğin için :-) oy verildi
Onnonymous

3

Evet, sadece XML dosyasını ve sanal disk görüntülerini kopyalamak yeterlidir, ancak bu açıkça bir "canlı" geçişi engellemektedir. Bu prosedür sırasında VM kapatılmalıdır.

Hedefe kopyalandıktan sonra libvirtd, yeni XML dosyasını tanımak için yeniden yüklenmeli veya yeniden başlatılmalıdır.


Help.ubuntu.com/community/KVM/Virsh'a göre ve bir cevabı tamamlamak için komutların sıralanacağına inanıyorum: Kaynak Dom0: - virsh kapatma foo - virsh dumpxml foo> /tmp/foo.xml Sonra Hedef Dom0: - Disk dosyalarının üstüne kopyalayın ve bunları kaynak Dom0 ile aynı dizine yerleştirin - XML ​​dökümü üzerine kopyalayın - virsh create /tmp/foo.xml - virsh start foo
Onitlikesonic

Kullanırsanız yeterince makul virsh. Dosyaları doğrudan kopyalayıp yeniden yüklerdim libvirtd.
Michael Hampton

2

Blocksync.py kullanarak VM'leri Kopyalamaya İlişkin Ayrıntılı Talimatlar

Bu talimatlar LVM tarafından sağlanan bir diski kullanan bir VM için geçerlidir ve Python'un her ana bilgisayarda olduğunu varsayar.

Blocksync.py betiğini https://gist.github.com/rcoup/1338263 adresinden indirin ve / home / user klasörünüzdeki hem kaynak hem de hedef konağa yerleştirin.

öncü

  • Kullanıcınız için her iki makineye (kaynak ve hedef) 'ssh' erişiminiz olması gerekecektir.
  • Her iki makinede de 'root'a' sudo 'erişimine sahip olmanız gerekir.

  • Alternatif olarak, her şeyi root olarak yapabilirsiniz, ancak yalnızca ssh anahtarınız size en azından hedef makineye root erişimi sağlıyorsa. ** Bu durumda, kullanıcı adını komut satırlarından kaldırın.

Örnek Ayarlar

  • Sanal makine, chewie olarak bilinen dom0 sunucusunda
  • Dom0 sunucusunda arzu edilen hedef dördüncü olarak bilinir ve burada dahili bir IP vardır. 10.10.10.38 (örneğin)
  • Gerçek durumumuzda centos 7'yi her iki makinede dom0 işletim sistemi olarak kullanıyoruz
  • Bu örnekte VIRTUAL Makinesi'ne LARRY denir.
  • İşlemi yapan kullanıcı USER (adınız olacak)
  • DOM0 gerçek fiziksel sunucu anlamına gelir

prosedür

Kaynak ana bilgisayardaki ilk adımlar

  • Şu anda makineye sahip olan dom0 ana bilgisayarına giriş yapın ("kaynak" ana bilgisayarı), örneğin:
    ssh user@chewie.domainname.com.au
  • Kullanıcın olarak kal, bu yüzden sudo kullanıcısı olma *
    sudo virsh - tüm
  • Makine tanımını aşağıdaki gibi kullanarak boşaltın:
    sudo virsh dumpxml larry> larry.xml
  • Dökülmüş tanımı yeni makineye kopyalayın ("hedef" ana bilgisayar), örneğin:

    scp -p larry.xml 10.10.10.38:larry.xml
    iç ipi hedef dom0 sunucu adınızla değiştirebilirsiniz ** Not: Hedef için ip adresini kullanmak en iyisidir, örneğin:
    scp -p larry.xml kullanici@10.10.10.38: larry.xml

    Anahtarlar nedeniyle kopyalayamıyorsanız, cat larry.xml dosyasını kopyalayın ve kopyalayın. Sonra başka bir makineye ssh gönderebilir, dosya oluşturabilir ve yapıştırabilirsiniz.

  • Kullanarak VM diskinin boyutunu ve adını bulun

    sudo lvs - B birimleri
    .
    ** Yukarıdaki komut tam olarak bayt cinsinden gösterilmelidir. ** Makinenin disk adı listenin ilk sütununda, ikincideki birim grubunda ve sonda boyutundadır. ** Aygıt adını / dev // olarak belirle ** 'll' komutuyla kontrol edin Örneğin, bu çıktıda: vm_larry vg1 -wi-ao ---- 69793218560B

LV VG Attr LSize Havuz Menşei Verileri% Meta% Taşıma Günlüğü Cpy% Senk Dönüştürme
  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

  • Disk adı 'vm_larry', birim grubu 'vg1'.
  • Aygıt adı / dev / vg1 / vm_larry
  • Örneğin çıktı:
    ls -l / dev / vg1 / vm_larry
    is: lrwxrwxrwx. 1 kök kökü 8 Oca 31 13:57 / dev / vg1 / vm_larry -> ../dm-11

Hedef ana bilgisayardaki ilk adımlar

  • Hedef ana bilgisayara giriş yapın, örneğin
    ssh user@darth.domainname.com.au
  • Kendi kullanıcı olarak kal. yani kök olmayın.
  • Bir birim tanım dosyası oluşturun, örneğin:

    vi larry.domainname.com.au-vol.xml
    veya
    nano larry.domainname.com.au-vol.xml
    aşağıdaki satırlarla: NOT - Boyutu, orijinal VM'den bayt cinsinden almanız ve aşağıdaki betiğe koymanız gerekecektir. Kaynak makinenin büyüklüğü için komut sudo lvs - birim B idi.

    <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>
    

Not: Bu tanım VM larry için 69793218560 Bytes disk içindir, gerçek VM için gereken şekilde değiştirin.

Not: yolun adı ve son bölümü eşleşmeli ve yeni disk adı olarak kullanılacaktır.

Tanımdan yeni disk kullanarak

   sudo virsh vol-create --pool centos larry.domainname.com.au-vol.xml

Vol larry.domainname.com.au larry.domainname.com.au-vol.xml adresinden oluşturulduğunu söyler.

Disk aygıtı dosyasını erişilebilir duruma getirin:

sudo chgrp wheel /dev/mapper/centos-larry.domainname.com.au
sudo chmod g + rw /dev/mapper/centos-larry.domainname.com.au

Örneğin üzerine kopyalanan xml tanımını düzenleyin:

vi larry.xml

Dosyadaki disk tanımını bulun ("source dev =" için arama yapın) ve cihazı yeni oluşturulanla değiştirin (vm'yi görmek için ls / dev / centos / yapabilirsiniz), örneğin: / dev / drbd4 -> / dev / centos / larry.domainname.com.au

Bu köprü değişimi bizim durumumuz için eşsizdi.

** Arabirim stanzalarındaki "br1" referanslarını bulun ve "br0" olarak değiştirin, örneğin kaynak köprüsünü değiştiriyorsunuz, böylece satır bu şekilde

Kaynak ana bilgisayarda son adımlar

  • Kaynak sunucuya giriş yapın, örn.

    ssh user@chewie.domainname.com.au

  • En iyi uygulama, son senkronizasyonu yapmadan önce kaynak ana bilgisayardaki VM'yi kapatmak olacaktır ancak yapılması gerekmez. (virsh kapatma NameOfMachine)

  • Zaten kaynak sunucuda değilse, blocksync.py betiğini https://gist.github.com/rcoup/1338263 adresinden indirin.

  • Kullanıcı adınız kullanıcı ise (örneğin) blocksync.py betiğini her iki makineye / home / user ve chown kullanıcısına kopyalayın: user ve chmod 755 betiğini.

  • Zaten hedef ana bilgisayarda değilse, oraya kopyalayın, örneğin:
scp -p blocksync.py kullanıcı@10.10.10.38: blocksync.py
  • Kaynak diski hedef diske kopyalamak için kullanın, örn.

Kopyalamayı yapan komut

sudo -E python blocksync.py / dev / vg1 / vm_larry user@10.10.10.38 /dev/mapper/centos-larry.domainname.com.au -b 4194304

Not: İlk aygıt adı 'lvs' komutundan belirlenen kaynak ana bilgisayar içindir; bu bir [[chewie]] kaynak ana bilgisayardan.

Not: Bu , hedef diskin içeriğini imha edecektir , /dev/mapper/centos-larry.domainname.com.au adresinin doğru olduğundan emin olun!

Not: senkronizasyon çok uzun sürecektir - gigabayt başına yaklaşık 100 saniye, yani: 60 gigabayt disk için 90 dakika.

Ancak, VM kullanımdayken bir senkronizasyon yapabilirsiniz; sonraki senkronizasyonlar yüzde 25 daha hızlı olabilir

Komut kullandığı parametreleri yazdıracak (kullanımdan kaldırılmış bir modül hakkında bir mesaj olabilir, bu sorun değil). Daha sonra, kullandığı ssh komutunu görüntüler ve çalıştırır (bunu yaparken yalnızca yetkili personelin mesajını göreceksiniz). Senkronizasyonu sırasında, kopyalanan toplam blok sayısını ve ortalama hızını gösterecektir. Sonunda, aldığı saniye sayısı ile bir tamamlama mesajı yazdırır.

Bilinecek şeyler

Senkronizasyonu CTRL C ile iptal edebilir ve komutu tekrar çalıştırarak daha sonra yeniden başlatabilirsiniz.

Hedef ana bilgisayarda son adımlar

  • Hedef ana bilgisayara giriş yapın, örneğin
     ssh user@darth.domainname.com.au
  • Sanal makineyi oluşturun, örneğin:
    virsh larry.xml tanımla
  • Yeni tanımlanan makineyi başlatın, örneğin:
    sudo virsh başlangıç ​​larry
  • Ana bilgisayar önyüklemesinde başlatmak için işaretleyin, örneğin:
    sudo virsh autostart larry

Not: Sanal Makinenin ayrıntılarını yeni ortama uyacak şekilde değiştirmek gerekebilir.


Bunu denemedim, ancak verilen ayrıntılı talimatlar için benim hakkımdaki oyu aldınız. Bunu yapma zamanı geldiğinde, büyük olasılıkla bunu deneyeceğim.
G Trawo

1

Birkaç eski KVM sunucumla bu sorunu yaşadım, ancak bu gerçekleştiğinde gerçekten can sıkıcı ve yüklü VM'lerin herhangi birinde sorunlara neden olabilir. Benim durumumda, disk alanım yavaşça tükenmek üzere düzenli olarak VM'lerimden birini sıfırlama durumuna getirdi. Aşağıdaki talimatlar KVM / Distro versiyonuna biraz duyarlıdır. Benim durumumda CentOS 7.5 var

CentOS Linux release 7.5.1804 (Core) and Qemu-KVM version 1.5.3

Varsayılan olarak KVM görüntüleri / var / lib / libvirt / images / konumunda bulunur

Bu kullanım listesi için VM'nin Adını bulmanız gerekir.

virsh list
 Id    Name                           State
----------------------------------------------------
 12    VM-Name                        paused

VM virsh durağını durdur VM Adı

Benim için önce taşımak yerine dosyayı kopyalarım. Qcow dosyasını yeni konuma kopyalayın

cp /var/lib/libvirt/images/VM-Name.qcow2 /home/VMImages/

VM adını değiştirerek yeni "kaynak dosya" konumuna atıfta bulunmak için VM xml dosyasını düzenleyin.

Bu dosyayı "kaynak dosya" değiştirmek isteyeceksiniz

Libvirtd hizmetini yeniden başlatın

service libvirtd restart

Ardından VM'yi yeniden başlatın ve gitmeniz iyi olur.

virsh start VM-Name
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.