KVM / qemu - LVM birimlerini görüntü dosyası olmadan doğrudan mı kullanıyorsunuz?


22

Bu soruyu nasıl ifade edeceğimi bilemiyorum (bu nedenle zayıf başlık), bu yüzden ne yapmaya çalıştığımın bir örneğini vereyim.

(Eski) Xen sunucumda LVM dosya sistemlerini doğrudan her konuğa sunabiliyorum. Bu dosya sistemleri aslında ana bilgisayarda oluşturulur ve biçimlendirilir ve doğrudan iletilir. Örneğin, ayrı bir tmp ve takas bölümleri kullanan ana bilgisayarlarımdan biri için depolamayı şu şekilde tanımlarım:

disk = [
'phy: / dev / vg1 / guest1 takas, sda1, w',
'phy: / dev / vg1 / guest1-disk, sda2, w',
'phy: / dev / vg1 / guest1-tmp, sda3 , w ',
]

Böylece, guest1-swap takas bölümü olarak biçimlendirilmiş, guest1-disk ve guest1-tmp ext4 ile biçimlendirilmiş ve konuk bakış açısına göre bunları / dev / sda altında üç biçimlendirilmiş bölüm olarak görüyor.

(Bu, çok fazla iş gibi gelebilir, ancak hemen hemen her şeyi otomatikleştiren harika xen araçları gibi hazırlayıcı komut dosyaları vardır ).

Bu, ikisi KVM için özellikle bulmak isteyen, gerçekten yararlı bazı yetenekler sağlar:

  • Konuk dosya sistemlerini ana bilgisayar işletim sisteminden bağlayın . Herhangi bir konuk dosya sisteminin salt okunur bir montajını, konuk çalışırken bile herhangi bir zamanda yapabilirim. Bu, konuk çalışırken mevcut herhangi bir birimin LVM anlık görüntülerini oluşturmama izin vermenin yan yararına sahiptir. Bu sayede, tüm konuklarımı ana bilgisayardan çalıştırırken merkezi olarak yedekleyebiliyorum.

  • Çevrimiçi hacim yeniden boyutlandırma . Birimler standart Linux dosya sistemlerini içerdiğinden, konuk dosya sistemlerimi yeniden çevrimiçi hale getirmek için bir lvextend ve resize2fs kombinasyonu kullanabilirim.

Şu anda, Xen ana bilgisayarının yerini alacak bir KVM ana bilgisayarı kuruyorum. Xen kurulumuna benzer şekilde, doğrudan dosya sistemine erişim sağlamak için LVM'den yararlanıyorum, ancak KVM / qemu , LVM biriminde bile, misafirler için her zaman bir görüntü dosyası oluşturduğu için farklı davranıyor . Konuğun bakış açısından bakıldığında, bunu bölümlenmemiş bir disk olarak görüyor ve bölümleme etiketi uygulamak ve ardından bölümleri ve dosya sistemlerini oluşturmak konuklara kalmış.

İyi bir konuk perspektifinden, ancak bir sunucu / yönetim perspektifinden, tanımladığım Xen kurulumundan çok daha az esnek görünüyor. Hala KVM'de yeniyim, o yüzden (umarım) bir şeyleri özlüyorum.

KVM ana bilgisayarına eski yedekleme çözümümü yeniden uygulamaya çalışırken bu konuyla karşılaştım ve konuğun dosya sistemlerinden birini takmaya çalışırken takılan komut takıldı. Öyleyse, bunu ele almak şu anki meselem ama aynı zamanda beni yeniden boyutlandırma konusunda da endişelendiriyor çünkü konunun da bir noktada ortaya çıkacağından eminim.

Sorularım işte burada:

  1. Kvm / qemu'nun LVM birim dosya sistemlerini Xen kurulumum için tanımladığım şekilde doğrudan kullanmasının bir yolu var mı? Bu fark yaratırsa libvirt'i yönetim için kullanırım.

  2. Olmazsa, KVM'de benzer montaj / yedekleme işlevi elde etmek için ne yapabilirim? Bunu yapmak için libguestfs w / FUSE kullanımı ile ilgili tartışmalar gördüm ama bu gerçekten en iyi seçenek miydi? Mümkünse, yerel bir dosya sistemi bağlantısına bağlı kalmayı tercih ederim.

  3. Ayrıca, KVM kapsamında yeniden boyutlandırılmış bir çevrimiçi dosya sistemi de yapılabilir mi? Bununla ilgili birkaç tartışma / howto buldum, ancak cevaplar her yerde açık ve kesin ve net çözümler olmadan görünüyor.

Uzun yazı için özür dilerim, açık olduğundan emin olmak istedim. Lütfen yardımcı olabilecek herhangi bir bilgi verebilirsem bana bildirin. Tartışma için bekliyorum. :-)


Ben sadece bu sorunun versiyonuna bir ödül vermek için giriş yaptım: serverfault.com/questions/409543/… . Bakalım bana 50 puan kazandırır mısın :)
Bittrance

Yanıtlar:


9
  1. qemu-kvm, LV'leri dosyalar yerine sanal diskler olarak kullanabilir. Bu aslında oldukça yaygın bir kullanım durumudur.
  2. libguestfs (ve sadece bir dizi virt-*araç arayın ) konuk dosya sistemlerine, her ikisi de mümkün olsa da, doğrudan ana bilgisayara bağladığınız her şeyden daha temiz bir şekilde erişim sağlayabilir.
  3. Çevrimiçi FS yeniden boyutlandırma, kvm'nin bir özelliği değildir ancak konuk işletim sisteminin yapması gereken bir şeydir. resize2fsFiziksel donanımda olduğu gibi bir VM'de de çalışacak, tek sorun boyut değişikliklerini tekrarlayan konuk olacaktır. Deneyin virt-resizestandart bir araç olarak, ama lvresizeve qemu-img(çevrimdışı modda, genellikle misafir yeniden başlatılmasını gerektiren olsa da) da kolayca kullanılabilir.

Bence lvresizebirlikte resize2fsaslında bir konuk yeniden başlatma olmadan çalışacaktır, ama henüz hiç denemedim


Yanıt için teşekkürler. "qemu-kvm, LV'leri dosyalar yerine sanal diskler olarak kullanabilir." Bunun libvirt / virsh için de geçerli olup olmadığını biliyor musunuz? Bunu qemu ile yapmanın çekici olduğu bazı şeyler gördüm (kesin bir şey olmasa da), ancak etki alanı yönetimi için kullandığım libvirt için hiçbir şey.
Jared,

1
qemu, sanal disk için destek deposu olarak bir engelleme aygıtı veya dosya sağlayıp sağlamadığınızı gerçekten umursamıyor. blok devs aslında daha iyidir çünkü bu yolla qemu gerçek bloklara bir dosya sisteminden geçmekten daha hızlı ulaşır. libvirt depolamayı yönetmede şaşırtıcı değildir, ancak ulaşması biraz zor virshancak yeterince kolay olan LVM tabanlı blok erişimini destekler virt-manager. RHEV / oVirt gibi daha ciddi sistemler aslında FC / iSCSI tabanlı depolama için
LVM'yi kullanıyor

@Jared: libvirt / virsh kesinlikle bunu destekliyor; Tüm VM depolama alanlarımız için kullanıyoruz.
womble

Dyasny, womble - yorumlarınız için teşekkür eder, ancak yine de çalışmasını sağlayamıyorum. Etki alanı yapılandırma XML'sini libvirt [ libvirt.org/formatdomain.html#elementsDisksruz(reference) temelli olarak el ile düzenlemeyi bile denedim , ancak makinenin tanımladığım gibi bir kök dosya sistemi kullanırken ön yükleme yapmasını sağlayamıyorum. Yaptığım en iyi şey attach-diskonu dinamik olarak bağlamaktır, ancak bu kalıcı değildir ve / için çalışamıyorum. Bunun için herhangi bir belgeye işaret edebilir veya özel ipuçları verebilir misiniz? Teşekkürler!
Jared

Hangi hataları görüyorsun? VM hiç açılmıyor mu? VM'ye canlı bir CD eklenmiş olarak başlayacağım ve ne gördüğünü ve ne görmeyeceğini araştıracağım, suçlu muhtemelen disk arayüzlerinin Xen / dev / xvdX biçimini kvm's / dev / vdX olarak değiştirdiği gerçeği etrafında. IDE kullanmayı seçtiniz ve sonra / dev /
hdX. Yaptıysanız

4

Qemu-kvm + libvirt'i tam olarak sorduğunuz yapılandırmada, listelediğiniz nedenlerden dolayı kullanıyorum ancak ek olarak , KVM sunucusunun dosya sistemi katmanı olmadan daha iyi performans elde ettiğim için kullanıyorum . VG'yi virt-manager'da 'depolama havuzu' olarak eklerseniz, kullanıcı dostu sihirbazını kullanarak bu VM'leri oluşturabilirsiniz. (Ancak bugünlerde XML'yi mevcut bir VM'yi şablon olarak kullanarak elle yazıyorum).

İşte misafirlerimden biri için 'virsh dumpxml' nin sterilize edilmiş çıktısı:

<domain type='kvm'>
  <name>somevm</name>
  <uuid>f173d3b5-704c-909e-b597-c5a823ad48c9</uuid>
  <description>Windows Server 2008 R2</description>
  <memory unit='KiB'>4194304</memory>
  <currentMemory unit='KiB'>4194304</currentMemory>
  <vcpu placement='static'>2</vcpu>
  <os>
    <type arch='x86_64' machine='pc-1.1'>hvm</type>
    <boot dev='hd'/>
  </os>
  <features>
    <acpi/>
    <apic/>
    <pae/>
  </features>
  <cpu mode='custom' match='exact'>
    <model fallback='allow'>Nehalem</model>
    <vendor>Intel</vendor>
    <feature policy='require' name='tm2'/>
    <feature policy='require' name='est'/>
    <feature policy='require' name='monitor'/>
    <feature policy='require' name='smx'/>
    <feature policy='require' name='ss'/>
    <feature policy='require' name='vme'/>
    <feature policy='require' name='dtes64'/>
    <feature policy='require' name='rdtscp'/>
    <feature policy='require' name='ht'/>
    <feature policy='require' name='ds'/>
    <feature policy='require' name='pbe'/>
    <feature policy='require' name='tm'/>
    <feature policy='require' name='pdcm'/>
    <feature policy='require' name='vmx'/>
    <feature policy='require' name='ds_cpl'/>
    <feature policy='require' name='xtpr'/>
    <feature policy='require' name='acpi'/>
  </cpu>
  <clock offset='localtime'/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>
    <emulator>/usr/bin/kvm</emulator>
    <disk type='block' device='disk'>
      <driver name='qemu' type='raw'/>
      <source dev='/dev/vg1/somevm'/>
      <target dev='hda' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
    </disk>
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <target dev='hdc' bus='ide'/>
      <readonly/>
      <address type='drive' controller='0' bus='1' target='0' unit='0'/>
    </disk>
    <controller type='usb' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
    </controller>
    <controller type='ide' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
    </controller>
    <controller type='pci' index='0' model='pci-root'/>
    <interface type='bridge'>
      <mac address='00:00:00:00:00:00'/>
      <source bridge='br0'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </interface>
    <serial type='pty'>
      <target port='0'/>
    </serial>
    <console type='pty'>
      <target type='serial' port='0'/>
    </console>
    <input type='tablet' bus='usb'/>
    <input type='mouse' bus='ps2'/>
    <input type='keyboard' bus='ps2'/>
    <graphics type='vnc' port='-1' autoport='yes'/>
    <video>
      <model type='vga' vram='9216' heads='1'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </video>
    <memballoon model='virtio'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </memballoon>
  </devices>
  <seclabel type='none' model='none'/>
</domain>

Başka bir düşünce (sorunuzla ilgili değil ancak yardımcı olabilir): eğer 'paravirtualized' ağ, blok, rastgele, saat vb. Sürücüleri kullandığınızdan emin olun - tamamen sanallaştırılmış olanlardan çok daha hızlılar. Bu yukarıda "model = virtio" olayıdır. Sürücü modüllerini virtio_net gibi ana bilgisayarın çekirdeğine yüklemelisiniz.

İşte 'virsh pool-dumpxml vg1' çıktısı:

<pool type='logical'>
  <name>vg1</name>
  <uuid>9e26648e-64bc-9221-835f-140f6def0556</uuid>
  <capacity unit='bytes'>3000613470208</capacity>
  <allocation unit='bytes'>1824287358976</allocation>
  <available unit='bytes'>1176326111232</available>
  <source>
    <device path='/dev/md1'/>
    <name>vg1</name>
    <format type='lvm2'/>
  </source>
  <target>
    <path>/dev/vg1</path>
    <permissions>
      <mode>0700</mode>
    </permissions>
  </target>
</pool>

4
Ben aynı zamanda depolama havuzu, örneğin bkz: XML için yararlı olacağını düşünüyorumvirsh pool-dumpxml mypool
Michael Hampton

Tamam, yukarıdaki cevaba eklendi.
AnotherSmellyGeek

2

Tanımladığınız Xen davranışını tam olarak çoğaltmanın bir yolunu bilmiyorum. Ancak, kpartxbir ana bilgisayardaki blok diskler olarak tam disk görüntüsünü içeren bir LV içindeki bölümleri ortaya çıkarmak için kullanabilirsiniz .


Yorumunuz için teşekkürler, Richard. Aslında bu seçeneğe rastladım, aynı şekilde çalıştığım losetup ile de. Buradaki sorun, dosya sistemlerini ana bilgisayardan bağlamak için önce konuğu kapatmam gerekiyor. Salt okunur bir şekilde bağlamaya çalışırsam, dosya sisteminin bozulmasından şikayet ederse, bir fsck çalıştırmak ister ve ardından salt okunur olduğu için iptal eder. Onu okuma yazma yazmaya hiç denemedim, çünkü bu yolsuzluğa neden olabilir . Bu, genel olarak qemu görüntüleri ile yapmak istemeyen herkes için, çevrimiçi ortamda gerekmeksizin harika bir ipucu.
Jared

2

KVM'de bu konudaki kendi soruma cevabımı, çekirdeği ve mevcut bölümü önyükleyerek görebilirsiniz . Kısacası, bunun için bir yapılandırma oluşturmak için virt-install'ı almak, guest / etc / fstab öğesinde hafif bir değişiklik yapıldığında oldukça kolay.


Sadece denedim. Bu başka bir harika fikir, ama yine de işe yaramıyor, en azından yeni konuklar için değil. Centos yükleyicisi aslında v4 ve vdb'yi ext4 ve swap ile biçimlendirilmiş olarak görüyor, ancak yine de onları bölmeler yerine disk olarak görmekte ısrar ediyor ve onları doğrudan kullanmayacak, bu yüzden yüklemeyi tamamlayamıyorum. "Normal" olarak kurabileceğimi, sonra da dosya sistemlerini hacimleri ayırmak ve çöpe atmak için bahsettiğiniz gibi grub / fstab ile doldurmak zorunda kalacağımı sanıyordum, ama bu konukları dağıtmak için gerçekten kullanışlı bir çözüm değil. Bunun işe yaramayacağına kendimden istifa etmeye başladım.
Jared

Yanlış anlamışım. Yum --installroot'u, bölümleri sinir bozucu yükleyicilere dahil etmeden doğrudan ana bilgisayardan oluşturmak için kullanıyorum. Kullanım davam, güncel kalırken olabildiğince benzer konuklara ulaşmaktır. Bu yüzden diskler yerine bölümler istiyorum.
Bittrance
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.