Soru KVM / qemu - görüntü dosyası olmadan doğrudan LVM birimleri kullanın?


Bu soruyu nasıl ifade edeceğimi tam olarak bilmiyorum (bu yüzden kötü başlık), o yüzden yapmaya çalıştığım şeyin bir örneğini vereyim.

(Eski) Xen sunucumda, LVM dosya sistemlerini doğrudan her konuğa sunabiliyorum. Bu dosya sistemleri aslında ana bilgisayarda oluşturulmakta ve biçimlendirilmekte ve doğrudan geçmektedir. Örneğin, ayrı bir tmp ve takas bölümleri kullanan ana bilgisayarlarım için depolama alanını şöyle tanımlarım:

disk = [
'PHY / dev / VG1 / guest1 değiştirilebilir, sda1 w',
'PHY / dev / VG1 / guest1 disk, sda2 w',
'PHY / dev / VG1 / guest1-tmp sda3 w',
]

Böylece, guest1-swap bir takas bölümü olarak biçimlendirilir, guest1-disk ve guest1-tmp ext4 ile biçimlendirilir ve misafirin perspektifinden basitçe / dev / sda altında üç biçimlendirilmiş bölüm olarak görür.

(Bu çok iş gibi görünebilir, ancak harika gibi temel hazırlık betikleri vardır xen-araçları, bu hemen hemen her şeyi otomatikleştirdi).

Bu, özellikle KVM'yi bulmakla ilgilenen bazı gerçekten kullanışlı özellikler sunuyor:

  • Konuk dosya sistemlerini ana işletim sisteminden yükleme. Misafir çalışırken bile, herhangi bir misafir dosya sisteminin salt okunur bir bağlantısını yapabilirim. Bu, misafir çalışırken herhangi bir mevcut birimin LVM anlık görüntülerini oluşturmama izin vermenin avantajlarından biridir. Bu sayede, tüm misafirlerimi merkezden çalışırken, merkezi olarak yedekleyebiliyorum.

  • Çevrimiçi ses yeniden boyutlandırma. Hacimler standart Linux dosya sistemleri içerdiğinden, çevrimiçi oldukları halde, misafir dosya sistemlerini büyütmek için bir lvextend ve resize2fs birleşimini kullanabilirim.

Şu anda Xen ana bilgisayarının yerini alacak bir KVM ana bilgisayarı kuruyorum. Xen kurulumuna benzer şekilde, doğrudan dosya sistemi erişimi sağlamak için LVM'den faydalanıyorum, ancak KVM / qemu bu şekilde farklı davranır. her zaman LVM biriminde bile misafirler için bir görüntü dosyası oluşturur. Konunun bakış açısından, bunu bölümlenmemiş bir disk olarak görüyor ve bir bölüm etiketini uygulama, ardından bölümleri ve dosya sistemlerini oluşturma konuğuna kalıyor.

Bir misafir perspektiften iyi, ama bir sunucu / yönetim açısından baktığımda, tanımladığım Xen kurulumundan çok daha az esnek görünüyor. KVM'ye hala yeniyim, bu yüzden (umarım) bir şey eksik olabilirim.

KVM ana bilgisayarında eski yedekleme çözümümüzü ve misafir dosya sistemlerinden birini yerleştirmeye çalıştığımda takılan mount komutunu yeniden uygulamaya çalışırken bu problemi yaşadım. Bu yüzden, benim şu anki kaygımla ilgileniyorum, ama aynı zamanda yeniden boyutlandırma konusunda da endişelendim, çünkü eminim ki bu konu bir noktada ortaya çıkacaktır.

Sorularım işte burada:

  1. KVm / qemu'nun Xen kurulumum için tanımladığım gibi doğrudan LVM birim dosya sistemlerini kullanmasının bir yolu var mı? Bir fark yaratan yönetim için libvirt kullanıyorum.

  2. Aksi takdirde, KVM altında benzer montaj / yedekleme işlevselliği elde etmek için ne yapabilirim? Bunu yapmak için libguestfs w / FUSE kullanımı hakkında tartışmalar gördüm, ama bu gerçekten en iyi seçenek mi? Mümkünse yerel bir dosya sistemi ile bağlantı kurmayı tercih ederim.

  3. Ayrıca değilse, KVM altında bir çevrimiçi dosya sistemi yeniden boyutlandırmak mümkün mü? Bununla ilgili çeşitli tartışmalar / howtos buldum, ama cevaplar açık ve kesinlikle hiçbir çözüm bulunmayan her yerde göründü.

Uzun mesaj için özür dilerim, sadece açık olduğundan emin olmak istedim. Yardımcı olabilecek başka bilgiler sağlayabilirseniz lütfen bize bildirin. Tartışmayı dört gözle bekliyorum. :-)


20
2017-07-23 07:23


Menşei


Bu sorunun sürümüne bir ödül daha ekledim: serverfault.com/questions/409543/.... Bakalım bana 50 puan kazandırırsın :) - Bittrance


Cevaplar:


  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 ara virt-* araçlar), konuk dosya sistemlerine doğrudan ana bilgisayara yeniden bağlandığınız her şeyden daha temiz bir şekilde erişim sağlayabilir, ancak her ikisi de mümkündür.
  3. Çevrimiçi FS yeniden boyutlandırma, kvm'nin bir özelliği değil, misafir işletim sisteminin yetenekli olması gereken bir özelliktir. resize2fs Bir VM'de çalışacak ve fiziksel donanım üzerinde çalışacak, tek sorun, boyut değişikliklerini yeniden tasarlayan konuk. Deneyin virt-resize standart araç olarak, ama lvresize ve qemu-img Ayrıca kolayca kullanılabilir (çevrimdışı modda olsa da, genellikle bir misafir yeniden başlatılmasını gerektirir).

bence lvresize ile resize2fs aslında bir misafir yeniden başlatma olmadan çalışacak, ama henüz denemedim


9
2017-07-23 08:21



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 (kesin bir şey olmasa da) ile yapmak için ima eden bazı şeyler gördüm, ama alan yönetimi için kullandığım libvirt için hiçbir şey yok. - Jared
qemu, sanal disk için destek deposu olarak bir blok cihaz veya dosya sağlayıp sağlamadığınıza pek önem vermez. blok dev'ler aslında daha iyidir çünkü bu şekilde qemu gerçek bloklara bir dosya sisteminden geçerek daha hızlı ulaşır. libvirt depolama yönetiminde şaşırtıcı değil, ama LVM tabanlı blok erişimini destekliyor. virsh ama yeterince kolay virt-manager. RHEV / oVirt gibi daha ciddi sistemler, FC / iSCSI tabanlı depolama için her zaman LVM kullanıyor - dyasny
@Jared: libvirt / virsh kesinlikle bunu destekliyor; tüm VM depolarımız için kullanıyoruz. - womble♦
dyasny, womble - yorumları takdir et, ama yine de bunu işe alamıyorum. Hatta libvirt'e dayalı etki alanı yapılandırma XML'sini manuel olarak düzenlemeyi denedim [libvirt.org/formatdomain.html#elementsDisks](reference)Ancak, açıkladığım gibi bir kök dosya sistemini kullanırken makineyi önyükleme yapamıyorum. Yaptığım en iyisi attach-disk dinamik olarak bağlamak için, ancak bu kalıcı değildir ve / için çalışamıyorum. Bunun için herhangi bir belgeye işaret edebilir veya belirli ipuçları verebilir misiniz? Teşekkürler! - Jared
hangi hataları görüyorsun? VM önyükleniyor mu? VM'yi ekli bir liveCD ISO ile başlatacağım ve gördüklerini ve görmediklerini araştıracağım, suçlu muhtemelen disk arayüzlerinin Xen / dev / xvdX olarak değiştirildiğini kvm's / dev / vdX olarak değiştiriyor ( IDE kullanmak için seçtiniz ve daha sonra / dev / hdX. - dyasny


Tanımladığınız Xen davranışını tam olarak kopyalamanın bir yolunu bilmiyorum. Ancak, kullanabilirsiniz kpartx tüm disk görüntüsünü ana bilgisayardaki blok aygıtlar olarak içeren bir LV içindeki bölümleri açığa çıkarmak, daha sonra takabileceğiniz vb.


2
2017-07-24 08:12



Yorum için teşekkürler, Richard. Ben zaten bu seçenekle karşılaştım, aynı şekilde çalışan losetup kadar. Sorun şu ki, dosya sistemlerini ana bilgisayardan monte etmek için önce konuyu kapatmak zorundayım. Yalnızca okumaya çalışırsam, dosya sistemi bozulmasıyla ilgili şikayetler bir fsck çalıştırmak ister ve sonra salt okunur olduğu için iptal eder. Okumayı yazmaya çalışmadım, çünkü bu iyi olabilir sebeb olmak yozlaşma. Bu, genel olarak qemu görüntüleri ile bunu yapmak isteyen herkes için harika bir ipucu, ancak çevrimiçi gereksinim olmadan. - Jared


Bu konuyla ilgili soruma kendi yanıtımı gör KVM off-image çekirdeği ve mevcut bölüm önyükleme. Kısacası, bunun için bir yapılandırma oluşturmak için virt-install almak oldukça düz-ileri, konuk / etc / fstab hafif bir değişiklik göz önüne alındığında.


2
2017-07-24 12:51



Sadece bunu denedim. Başka bir harika fikir, ama yine de işe yaramıyor, en azından yeni misafirler için değil. Centos yükleyicisi aslında v4 ve vdb'yi ext4 ve swap ile biçimlendirildiğini görür, ancak yine de bunları bölümler yerine diskler olarak işlemek konusunda ısrar eder ve bunları doğrudan kullanmaz, bu yüzden yüklemeyi tamamlayamıyorum. "Normal" kurabilirim, daha sonra dosyaları ayırmak için dosya sistemlerini boşaltın ve çalışmak için çalıştığınız gibi grub / fstab ile çalışın, ama bu gerçekten de misafirlerin konuşlandırılması için kullanışlı bir çözüm değildir. Kendimi bu işe yaramayacağı gerçeğine kendimi istifa etmeye başlıyorum. - Jared
Yanlış anlamışım. Bölümleri doğrudan ana bilgisayardan sinir bozucu yükleyicileri kullanmadan oluşturmak için yum --installroot kullanıyorum. Benim kullanım durumum, güncel kalırken, olabildiğince benzer misafirleri almaktır. Bu yüzden disklerden ziyade bölümler istiyorum. - Bittrance


Qemu-kvm + libvirt'i tam olarak listelediğiniz nedenlerle yaptığınız yapılandırma ile kullanıyorum, ancak ek olarak çok Kapsamdaki KVM konağının dosya sistemi katmanı olmadan daha iyi performans. VG'yi yönetici yöneticisinde 'depolama havuzu' olarak eklerseniz, kullanıcı dostu sihirbazını kullanarak bu tür sanal makineleri oluşturabilirsiniz. (Ama şimdi XML'i bugünlerde mevcut bir VM'yi şablon olarak kullanarak yazıyorum).

İşte misafirlerimden biri için 'virsh dumpxml' dezenfekte edilmiş çıktı:

<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 alakalı değil ama yardımcı olabilir): eğer yapabiliyorsanız, 'paravirtualised' ağı, blok, rastgele, saat vb. Sürücüleri kullandığınızdan emin olun - tamamen sanallaştırılmış olanlardan çok daha hızlıdır. Bu, yukarıdaki "model = virtio" maddesidir. Sürücü modüllerini virtio_net gibi ana bilgisayarın çekirdeğine yüklemelisiniz.

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

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

2
2017-11-22 08:15



Depolama havuzu için XML'yi de görmenin yararlı olacağını düşünüyorum. virsh pool-dumpxml mypool - Michael Hampton♦
Tamam, yukarıdaki cevaba ekledim. - AnotherSmellyGeek