KVM / qemu - छवि फ़ाइल के बिना सीधे LVM वॉल्यूम का उपयोग करें?


22

मुझे यकीन नहीं है कि इस प्रश्न (इसलिए खराब शीर्षक) को कैसे वाक्यांश दिया जाए, इसलिए मुझे एक उदाहरण प्रदान करें जो मैं करने की कोशिश कर रहा हूं।

मेरे (पुराने) Xen होस्ट पर, मैं LVM फाइल सिस्टम को सीधे प्रत्येक अतिथि के सामने प्रस्तुत करने में सक्षम हूं। ये फाइलसिस्टम वास्तव में बनाए जाते हैं और मेजबान पर स्वरूपित होते हैं, और सीधे होकर गुजरते हैं। उदाहरण के लिए, एक अलग tmp और स्वैप विभाजन का उपयोग करते हुए मेरे एक मेजबान के लिए, मैं इस तरह से स्टोरेज को परिभाषित करता हूं:

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

तो, अतिथि 1-स्वैप को स्वैप विभाजन के रूप में स्वरूपित किया जाता है, अतिथि 1-डिस्क और अतिथि 1-tmp को ext4 के साथ स्वरूपित किया जाता है, और अतिथि के दृष्टिकोण से यह बस उन्हें / देव / sda के तहत तीन स्वरूपित विभाजन के रूप में देखता है।

(यह बहुत काम की तरह लग सकता है, लेकिन इसमें ज़बरदस्त स्क्रिप्ट्स हैं, जैसे कि भयानक ज़ेन-टूल्स , जो स्वचालित रूप से बहुत अधिक सब कुछ स्वचालित करते हैं)।

यह कुछ वास्तव में उपयोगी क्षमताएं प्रदान करता है, जिनमें से दो मैं विशेष रूप से KVM के लिए लगा रहा हूं:

  • होस्ट OS से अतिथि फ़ाइल सिस्टम माउंट करें । मैं किसी भी समय किसी भी अतिथि फ़ाइल सिस्टम का केवल-पढ़ने वाला माउंट कर सकता हूं, भले ही अतिथि चल रहा हो। अतिथि के चलने के दौरान मुझे किसी भी मौजूदा वॉल्यूम के एलवीएम स्नैपशॉट बनाने की अनुमति देने का पक्ष लाभ है। इस तरह, मैं मेजबान से, दौड़ते हुए, अपने सभी मेहमानों को केंद्रीय रूप से बैकअप देने में सक्षम हूं।

  • ऑनलाइन मात्रा का आकार बदलने के । क्योंकि वॉल्यूम में मानक लिनक्स फाइल सिस्टम हैं, मैं अपने गेस्ट फाइल सिस्टम को विकसित करने के लिए lvextend और resize2fs के संयोजन का उपयोग कर सकता हूं, फिर से ऑनलाइन होने के दौरान।

मैं वर्तमान में एक KVM होस्ट स्थापित कर रहा हूं जो Xen होस्ट की जगह लेगा। एक्सएम सेटअप के समान मैं सीधे फाइलसिस्टम एक्सेस प्रदान करने के लिए एलवीएम का लाभ उठा रहा हूं, लेकिन केवीएम / क्यूमू इसमें अलग तरह से व्यवहार करता है कि यह हमेशा मेहमानों के लिए एक छवि फ़ाइल बनाता है, यहां तक ​​कि एलवीएम वॉल्यूम पर भी। अतिथि के दृष्टिकोण से, यह इसे एक बिना विभाजन वाली डिस्क के रूप में देखता है, और विभाजन लेबल को लागू करने के लिए अतिथि पर निर्भर है, फिर विभाजन और फाइलसिस्टम बनाएं।

अतिथि परिप्रेक्ष्य से यह ठीक है, लेकिन सर्वर / प्रबंधन के दृष्टिकोण से यह मेरे द्वारा वर्णित एक्सपीएन सेटअप की तुलना में बहुत कम लचीला है। मैं अभी भी केवीएम के लिए नया हूं, इसलिए मैं (उम्मीद है) कुछ याद कर सकता हूं।

केवीएम होस्ट पर अपने पूर्व बैकअप समाधान को फिर से लागू करने की कोशिश करते समय मैं इस समस्या में भाग गया और जब मैंने अतिथि के फाइल सिस्टम में से एक को माउंट करने की कोशिश की तो माउंट कमांड ने चौका दिया। इसलिए, यह कहना कि मेरी वर्तमान चिंता है, लेकिन इसने मुझे आकार बदलने वाली चीज़ के बारे में भी चिंतित कर दिया है, क्योंकि मुझे यकीन है कि मुद्दा कुछ बिंदु पर भी आएगा।

तो, यहाँ मेरे सवाल हैं:

  1. वहाँ किसी भी तरह से kvm / qemu LVM वॉल्यूम फाइलसिस्टम का सीधे उपयोग करने का तरीका है जैसा कि मैंने अपने Xen सेटअप के लिए वर्णित किया है? मैं प्रबंधन के लिए libvirt का उपयोग करता हूं अगर इससे कोई फर्क पड़ता है।

  2. यदि नहीं, तो मैं केवीएम के तहत समान माउंटिंग / बैकअप कार्यक्षमता प्राप्त करने के लिए क्या कर सकता हूं? मैंने ऐसा करने के लिए libguestfs w / FUSE का उपयोग करने के बारे में चर्चाएं देखी हैं, लेकिन क्या यह वास्तव में सबसे अच्छा विकल्प है? मैं अगर संभव हो तो एक देशी फाइल सिस्टम माउंट के साथ रहना पसंद करूंगा।

  3. यदि नहीं, तो क्या केवीएम के तहत एक ऑनलाइन फाइलसिस्टम आकार बदलना संभव है? मैंने इस बारे में कई चर्चाएँ / चर्चाएँ की हैं, लेकिन उत्तर सभी जगह स्पष्ट नहीं हैं, और निश्चित रूप से कोई सीधा, समाधान नहीं है।

लंबे पोस्ट के लिए क्षमा करें, बस यह सुनिश्चित करना चाहता था कि यह स्पष्ट था। कृपया मुझे बताएं कि क्या मैं कोई अन्य जानकारी प्रदान कर सकता हूं जो सहायक होगी। चर्चा के लिए आगे देख रहे हैं। :-)


मैंने बस इस प्रश्न के अपने संस्करण पर एक इनाम सेट करने के लिए लॉग इन किया: serverfault.com/questions/409543/… । चलो देखते हैं कि क्या आप मुझे 50 अंक
बचाते हैं

जवाबों:


9
  1. qemu-kvm LVs को फ़ाइलों के बजाय वर्चुअल डिस्क के रूप में उपयोग कर सकते हैं। यह वास्तव में काफी सामान्य उपयोग का मामला है।
  2. libguestfs (और virt-*उपकरणों के एक सेट की तलाश में ) अतिथि फाइल सिस्टम को सीधे तौर पर होस्ट के लिए कुछ भी करने की तुलना में क्लीनर तरीके से पहुंच प्रदान कर सकते हैं, हालांकि दोनों संभव हैं।
  3. ऑनलाइन FS आकार बदलना kvm की विशेषता नहीं है, लेकिन कुछ ऐसा होना चाहिए जो अतिथि OS में सक्षम होना चाहिए। resize2fsएक वीएम में काम करेगा और साथ ही साथ यह भौतिक हार्डवेयर पर करता है, केवल एक ही समस्या है जो अतिथि को आकार बदलने से पुनर्वितरित करता है। प्रयास करें virt-resizeमानक उपकरण के रूप में है, लेकिन lvresizeऔर qemu-imgभी आसानी से इस्तेमाल किया जा सकता है (हालांकि ऑफलाइन मोड में, एक अतिथि पुनः आरंभ आमतौर पर की आवश्यकता होती है)।

मुझे लगता है कि lvresizeके साथ resize2fsवास्तव में एक अतिथि के पुनः आरंभ करने के बिना काम करेंगे, लेकिन मैं अभी तक यह प्रयास नहीं किया है


उत्तर के लिए धन्यवाद। "qemu-kvm LVs का उपयोग फाइलों के बजाय वर्चुअल डिस्क के रूप में कर सकता है।" क्या आप जानते हैं कि क्या यह libvirt / virsh के लिए भी सही है? मैंने कुछ चीजों को क्यूमू (हालांकि कुछ भी निश्चित नहीं है) के साथ ऐसा करने के लिए देखा है, लेकिन libvirt के लिए कुछ भी नहीं है, जो मैं डोमेन प्रबंधन के लिए उपयोग कर रहा हूं।
जेरेड

1
qemu वास्तव में परवाह नहीं करता है कि क्या आप वर्चुअल डिस्क के लिए बैकिंग स्टोर के रूप में ब्लॉक डिवाइस या फ़ाइल प्रदान करते हैं। ब्लॉक देव वास्तव में बेहतर हैं क्योंकि इस तरह से क्यूमू एक फाइलसिस्टम से होकर वास्तविक ब्लॉक तक तेजी से पहुंचता है। libvirt स्टोरेज को प्रबंधित करने में आश्चर्यजनक नहीं है, लेकिन यह LVM आधारित ब्लॉक एक्सेस का समर्थन करता है, जो कि थोड़ा मुश्किल है, लेकिन इसके virshमाध्यम से काफी आसान है virt-manager। RHEV / oVirt जैसी अधिक गंभीर प्रणालियाँ वास्तव में FC / iSCSI आधारित भंडारण के लिए हर समय LVM का उपयोग करती हैं
dyasny

@ जारेड: libvirt / virsh निश्चित रूप से इसका समर्थन करता है; हम अपने सभी VM संग्रहण के लिए इसका उपयोग करते हैं।
Womble

dyasny, womble - टिप्पणियों की सराहना करते हैं, लेकिन मुझे अभी भी यह काम करने के लिए नहीं मिल सकता है। यहां तक ​​कि libvirt [ libvirt.org/formatdomain.html#elementsDiskskes(reference) पर आधारित डोमेन कॉन्फिग एक्सएमएल को मैन्युअल रूप से संपादित करने की कोशिश की गई है , लेकिन मैंने रूट फाइल सिस्टम का उपयोग करते समय बूट करने के लिए मशीन नहीं प्राप्त कर सकता है जैसा कि मैंने वर्णन किया है। मैंने जो सबसे अच्छा किया है attach-disk, उसे गतिशील रूप से कनेक्ट करने के लिए उपयोग किया जाता है , लेकिन यह स्थायी नहीं है और मैं इसे / के लिए काम करने के लिए नहीं प्राप्त कर सकता हूं। क्या आप इसके लिए किसी दस्तावेज की ओर इशारा कर सकते हैं, या विशिष्ट संकेत प्रदान कर सकते हैं? धन्यवाद!
जारेड

आप क्या त्रुटियाँ देख रहे हैं? क्या VM बूट करता है? मैं वीएम को एक लाइवसीडी आईएसओ के साथ शुरू करूंगा और जांच करूंगा कि यह क्या देखता है और क्या नहीं देखता है, अपराधी शायद इस तथ्य के आसपास है कि डिस्क इंटरफेस बदल गए हैं एक्सएम / देव / xvdX को kvm के / देव / वीएक्सएक्स (जब तक) आपने आईडीई का उपयोग करने के लिए चुना और फिर यह / देव / एचडीएक्स है। यदि आपने ऐसा नहीं किया है :))
डायस्नी जूल 23'12745

4

मैं qemu-kvm + libvirt का उपयोग उस कॉन्फ़िगरेशन के बारे में पूछ रहा हूं जिसके बारे में आप सूचीबद्ध कारणों के लिए पूछ रहे हैं, लेकिन इसके अतिरिक्त क्योंकि मुझे KVM होस्ट की फाइलसिस्टम परत के बिना बहुत बेहतर प्रदर्शन मिलता है । यदि आप वीजी को गुण-प्रबंधक में 'स्टोरेज पूल' के रूप में जोड़ते हैं, तो आप अपने उपयोगकर्ता के अनुकूल विज़ार्ड का उपयोग करके ऐसे वीएम बना सकते हैं। (लेकिन मैं इन दिनों XML को एक मौजूदा वीएम का उपयोग करके टेम्पलेट के रूप में लिखता हूं)।

यहां मेरे एक मेहमान के लिए 'वायरल डंपएक्स एमएल' का सैनिटाइज्ड आउटपुट है:

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

एक और विचार (आपके प्रश्न के लिए प्रासंगिक नहीं है, लेकिन यह मदद कर सकता है): यदि आप कर सकते हैं, तो सुनिश्चित करें कि आप 'paravirtualised' नेटवर्क, ब्लॉक, यादृच्छिक, घड़ी आदि ड्राइवरों का उपयोग कर रहे हैं - वे पूरी तरह से वर्चुअलाइज्ड वाले की तुलना में काफी तेज हैं। यह ऊपर "मॉडल = गुणियो" सामान है। आपको ड्राइवर मॉड्यूल को होस्ट के कर्नेल जैसे कि virtio_net में लोड करना होगा।

यहाँ 'वायरल पूल-डंपएक्सएमएल वीजी 1' का आउटपुट है:

<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
मुझे लगता है कि स्टोरेज पूल के लिए एक्सएमएल देखना भी उपयोगी होगा, जैसेvirsh pool-dumpxml mypool
माइकल हैम्पटन

ठीक है, ऊपर दिए गए उत्तर में जोड़ा गया।
SmellyGeek

2

मुझे आपके द्वारा वर्णित एक्सएन व्यवहार की बिल्कुल नकल करने के तरीके का पता नहीं है। हालाँकि, आप kpartxLV में उन विभाजनों को उजागर करने के लिए उपयोग कर सकते हैं , जिनमें होस्ट पर ब्लॉक डिवाइस के रूप में एक पूरी-डिस्क छवि होती है, जिसे आप तब माउंट कर सकते हैं, आदि।


टिप्पणी के लिए धन्यवाद, रिचर्ड। मैं वास्तव में पहले से ही उस विकल्प के साथ-साथ लॉसेटअप में आया हूं, जो समान रूप से काम करता है। मुद्दा यह है कि मुझे मेजबान से अपने फाइल सिस्टम को माउंट करने के लिए पहले अतिथि को बंद करना होगा। यदि मैं केवल पढ़ने के लिए माउंट करने की कोशिश करता हूं, अगर फाइलसिस्टम भ्रष्टाचार के बारे में शिकायत करता है, तो एक fsck चलाना चाहता है, और फिर गर्भपात करता है क्योंकि यह केवल-पढ़ने के लिए है। मैंने इसे पढ़ने-लिखने में आगे बढ़ाने की कोशिश नहीं की है, क्योंकि इससे भ्रष्टाचार हो सकता है । यह सामान्य रूप से qemu छवियों के साथ ऐसा करने के इच्छुक किसी भी व्यक्ति के लिए एक शानदार टिप है, हालांकि, ऑनलाइन आवश्यकता के बिना।
जारेड

2

इस मुद्दे पर मेरे अपने प्रश्न का जवाब KVM बूटिंग ऑफ-इमेज कर्नेल और मौजूदा विभाजन पर देखें । संक्षेप में, अतिथि / आदि / fstab के एक मामूली संशोधन को देखते हुए, इसके लिए एक कॉन्फिगरेशन बनाने के लिए पुण्य-संस्थापन करना बहुत ही आगे की ओर है।


बस यही कोशिश की। यह एक और महान विचार है, लेकिन अभी भी काम नहीं करता है, कम से कम नए मेहमानों के लिए नहीं। सेंटोस इंस्टॉलर वास्तव में vda और vdb को ext4 और स्वैप के साथ स्वरूपित देखता है, लेकिन यह अभी भी उन्हें विभाजन के बजाय डिस्क के रूप में व्यवहार करने पर जोर देता है और उन्हें सीधे उपयोग नहीं करेगा, इसलिए मैं इंस्टॉल को पूरा नहीं कर सकता। मुझे लगता है कि मैं "सामान्य रूप से" स्थापित कर सकता हूं, फिर फाइल सिस्टम को अलग-अलग वॉल्यूम में डंप करें और ग्रब / फस्टैब के साथ फिडेल करें जैसे कि आपने इसे काम करने के लिए उल्लेख किया है, लेकिन यह वास्तव में मेहमानों को तैनात करने के लिए एक उपयोगी समाधान नहीं है। मैं अपने आप को इस तथ्य से इस्तीफा देने की शुरुआत कर रहा हूं कि यह बस काम नहीं करेगा।
जारेड

मैंने गलत समझा। मैं pesky installers को शामिल किए बिना सीधे मेजबान से विभाजन बनाने के लिए yum --installroot का उपयोग कर रहा हूं। मेरा उपयोग मामला उन मेहमानों को प्राप्त करने के लिए है जो यथासंभव समान हैं, जबकि शेष अप-टू-डेट हैं। यही कारण है कि मुझे डिस्क के बजाय विभाजन चाहिए।
बिट्रांस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.