Kvm vm को स्थानांतरित करने का सही तरीका


34

मैं सोच रहा हूं कि किसी भी तरह के साझा भंडारण का उपयोग किए बिना दो केवीएम होस्ट के बीच वीएम को स्थानांतरित करने का सही तरीका क्या है

डिस्क केवीएम और एक्सएमएल डंप की प्रतिलिपि स्रोत केवीएम मशीन से गंतव्य के लिए एक प्रत्यय होगा? यदि हां, तो गंतव्य पर vm आयात करने के लिए किन कमांडों को चलाने की आवश्यकता है?

OS, DOM0 और DOMU दोनों पर उबंटू है।

अग्रिम में धन्यवाद

जवाबों:


41
  1. VM के डिस्क /var/lib/libvirt/imagesको src होस्ट से डेस्ट होस्ट पर उसी dir पर कॉपी करें
  2. स्रोत होस्ट चलाने पर virsh dumpxml VMNAME > domxml.xmlऔर गंतव्य होस्ट के लिए इस xml की प्रतिलिपि बनाएँ
  3. गंतव्य होस्ट रन पर virsh define domxml.xml

VM शुरू करें।

  • यदि डिस्क स्थान भिन्न होता है, तो आपको गंतव्य होस्ट पर छवि को इंगित करने के लिए xml के उपकरणों / डिस्क नोड को संपादित करने की आवश्यकता है
  • यदि VM कस्टम परिभाषित नेटवर्क से जुड़ा हुआ है, तो आपको गंतव्य होस्ट पर उन्हें xml से संपादित करने या उन्हें फिर से परिभाषित करने की आवश्यकता होगी ( virsh net-dumpxml > netxml.xmlऔर virsh net-define netxml.xml && virsh net-start NETNAME & virsh net-autostart NETNAME)

और क्या होगा अगर स्टोरेज के रूप में फाइल के बजाय लॉजिकल वॉल्यूम का उपयोग करें ... मुझे लगता है कि मुझे डिवाइस uuid के साथ समस्या होगी
inemanja

2
आप डिवाइस को UUIDs xml से निकाल सकते हैं, बस /dev/mapper/vgname-lvnameवहां से रास्ता छोड़ दें
dyasny

10

चूंकि मैं अभी तक कोई टिप्पणी नहीं कर सकता, इसलिए मुझे इस तरह से डायस्नी के उत्तर के लिए इस परिशिष्ट को पोस्ट करना होगा।

यदि VM के पास स्नैपशॉट है जिसे आप संरक्षित करना चाहते हैं, तो आपको virsh snapshot-dumpxml $dom $name > file.xmlVM के स्नैपशॉट सूची में प्रत्येक स्नैपशॉट के लिए स्रोत पर स्नैपशॉट xml-files को डंप करना चाहिए virsh snapshot-list --name $dom

तब गंतव्य पर virsh snapshot-create --redefine $dom file.xmlस्नैपशॉट को माइग्रेट करने के लिए उपयोग करें।

यदि आप यह भी ध्यान रखते हैं कि कौन सा स्नैपशॉट चालू है, तो इसके अतिरिक्त स्रोत पर करें:
virsh snapshot-current --name $dom
और गंतव्य पर:
virsh snapshot-current $dom $name

फिर आप virsh snapshot-delete --metadata $dom $nameस्रोत पर xml फ़ाइलों को हटाने के लिए प्रत्येक स्नैपशॉट के लिए उपयोग कर सकते हैं , या आप बस उन्हें हटा सकते हैं/var/lib/libvirt/qemu/snapshots/$guestname


सूत्रों का कहना है:

  1. libvirt- उपयोगकर्ता मेलिंग सूची

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


यह वैसे भी एक टिप्पणी के लिए बहुत लंबा है, कोई चिंता नहीं। आपके योगदान के लिए धन्यवाद
HB34ijn

अपवित्र क्योंकि आप टिप्पणी करने का अधिकार पाने के पात्र हैं :-)
अनाम

3

हां, XML फ़ाइल और वर्चुअल डिस्क छवियों को कॉपी करने के लिए पर्याप्त है, लेकिन यह स्पष्ट रूप से "लाइव" माइग्रेशन को रोकता है। इस प्रक्रिया के दौरान VM को बंद किया जाना चाहिए।

एक बार गंतव्य पर कॉपी हो जाने के बाद, libvirtdनई XML फ़ाइल को पहचानने के लिए पुनः लोड या पुनरारंभ किया जाना चाहिए।


Help.ubuntu.com/community/KVM/Virsh के अनुसार और एक उत्तर को पूरा करने के लिए मेरा मानना ​​है कि आज्ञाओं का क्रम होगा: स्रोत पर Dom0: - virsh shutdown foo - virsh dxxml foo> /tmp -foo.xml उसके बाद गंतव्य DOM0: - डिस्क फ़ाइलों पर प्रतिलिपि बनाएँ और उन्हें स्रोत Dom0 के समान निर्देशिका पर डालें - XML ​​डंप पर प्रतिलिपि बनाएँ - virsh create /tmp/foo.xml - virsh start foo
Onitlikesonic

पर्याप्त यदि आप उपयोग करते हैं virsh। मैं सीधे फ़ाइलों को कॉपी करूँगा और पुनः लोड करूँगा libvirtd
माइकल हैम्पटन

2

ब्लॉकसिंक्रोमो का उपयोग करके वीएम को कॉपी करने पर विस्तृत निर्देश

ये निर्देश एक वीवीएम प्रदान की गई डिस्क का उपयोग करके वीएम पर लागू होते हैं और यह मानते हैं कि पायथन मेजबान में से प्रत्येक पर है

Https://gist.github.com/rcoup/1338263 से blockync.py स्क्रिप्ट डाउनलोड करें और अपने / घर / उपयोगकर्ता फ़ोल्डर में स्रोत और गंतव्य होस्ट दोनों पर रखें।

अग्रगामी

  • आपको अपने उपयोगकर्ता के लिए दोनों मशीनों (स्रोत और लक्ष्य) तक 'ssh' पहुंच की आवश्यकता होगी।
  • आपको दोनों मशीनों पर 'sudo' की 'रूट' एक्सेस करने की आवश्यकता होगी।

  • वैकल्पिक रूप से, आप सब कुछ रूट के रूप में कर सकते हैं, लेकिन केवल अगर आपकी ssh कुंजी आपको कम से कम लक्ष्य मशीन तक रूट एक्सेस देती है। ** इस मामले में, कमांड लाइनों से उपयोगकर्ता नाम हटा दें।

उदाहरण सेटिंग्स

  • वर्चुअल मशीन डोम 0 होस्ट पर है जिसे च्वी के नाम से जाना जाता है
  • डेस्ट होस्ट के रूप में जाना जाने वाला डेस्ट डेथ पर वांछित डेस्टिनेशन यहाँ था और यहाँ 10.10.10.38 (हमारे उदाहरण के लिए) एक आंतरिक आईपी था।
  • हमारे वास्तविक मामले में हम सेंटो 7 का उपयोग दोनों मशीनों पर डोमे ऑपरेटिंग सिस्टम के रूप में करते हैं
  • इस उदाहरण में VIRTUAL मशीन जो हम जा रहे हैं उसे LARRY कहा जाता है
  • कार्रवाई करने वाला उपयोगकर्ता USER है (जो आपका नाम होगा)
  • DOM0 का अर्थ है वास्तविक भौतिक सर्वर

प्रक्रिया

स्रोत होस्ट पर प्रारंभिक चरण

  • वर्तमान में मशीन ("स्रोत" मेजबान) है, जो dom0 मेजबान के लिए लॉग इन करें:
    ssh user@chewie.domainname.com.au
  • अपने उपयोगकर्ता के रूप में रहें, इसलिए sudo उपयोगकर्ता न बनें * सूची मशीनों के साथ
    सुडो वीर्ष - लंबा
  • मशीन की परिभाषा का उपयोग कर डंप करें, जैसे:
    sudo virsh डंपएक्सएमएल लैरी> लैरी.एक्सएमएल
  • डंप की गई परिभाषा को नई मशीन ("लक्ष्य" होस्ट) पर कॉपी करें, जैसे:

    scp -p larry.xml 10.10.10.38:larry.xml
    आप आंतरिक गंतव्य को अपने गंतव्य के लिए बदल सकते हैं dom0 सर्वर नाम ** नोट: लक्ष्य के लिए आईपी पते का उपयोग करना सबसे अच्छा है, उदाहरण के लिए:
    scp -p larry.xml user@10.10.10.38: larry.xml

    यदि आप चाबी को लैरी.एक्सएमएल की वजह से कॉपी नहीं कर सकते हैं और इसे कॉपी कर सकते हैं तो आप दूसरी मशीन में जाकर फाइल बना सकते हैं और पेस्ट कर सकते हैं।

  • वीएम की डिस्क का आकार और नाम खोजें

    सूद lvs - बीट्स

    ** ऊपर के आदेश को बाइट्स में बिल्कुल आकार दिखाना चाहिए। ** मशीन का डिस्क नाम सूची के पहले कॉलम में है, दूसरे में इसका वॉल्यूम समूह और आखिरी में आकार। ** डिवाइस का नाम / dev // के रूप में निर्धारित करें। ** इसे 'll' कमांड के साथ जाँचें उदाहरण के लिए, इस आउटपुट में: vm_larry vg1 -wi-ao ---- 69793218560B

LV VG Attr पूल मूल डेटा% मेटा% ले जाएँ लॉग इन करें Cpy% सिंक कन्वर्ट
  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

  • डिस्क का नाम 'vm_larry' है, वॉल्यूम समूह 'vg1' है।
  • उपकरण का नाम / देव / vg1 / vm_larry है
  • उदाहरण के लिए आउटपुट:
    ls -l / dev / vg1 / vm_larry
    है: lrwxrwxrwx 1 मूल जड़ 8 जनवरी 31 13:57 / देव / vg1 / vm_larry -> ..dm-11

लक्ष्य होस्ट पर प्रारंभिक चरण

  • लक्ष्य होस्ट में प्रवेश करें, जैसे
    ssh user@darth.domainname.com.au
  • अपने खुद के उपयोगकर्ता के रूप में रहें। यानी जड़ नहीं बनेंगे।
  • वॉल्यूम परिभाषा फ़ाइल बनाएँ, उदाहरण के लिए:

    vi larry.domainname.com.au-vol.xml
    या
    nano larry.domainname.com.au-vol.xml
    निम्नलिखित पंक्तियों के साथ: नोट - आपको मूल VM से बाइट्स में आकार लेने और स्क्रिप्ट के नीचे रखने की आवश्यकता होगी। आकार के लिए स्रोत मशीन पर कमांड sudo lvs --units B था

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

नोट: यह परिभाषा VM लैरी के लिए 69793218560 बाइट्स डिस्क के लिए है, वास्तविक VM के लिए आवश्यक रूप से बदलें।

नोट: पथ का नाम और अंतिम भाग मेल खाना चाहिए और नए डिस्क नाम के रूप में उपयोग किया जाएगा।

उपयोग करके परिभाषा से नई डिस्क बनाएं

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

यह कहेगा Vol larry.domainname.com.au, larry.domainname.com.au-vol.xml से बनाया गया है

डिस्क डिवाइस फ़ाइल को सुलभ बनाएं:

सुडो चगरप व्हील / देवा / एम्पर / एसेंटोस-larry.domainname.com.au
सुदो चामोद g + rw /dev/mapper/centos-larry.domainname.com.au

Xml परिभाषा की प्रतिलिपि बनाकर संपादित करें, जैसे:

vi लैरी.एक्सएमएल

फ़ाइल में डिस्क परिभाषा ढूंढें ("स्रोत देव =" के लिए खोजें) और डिवाइस को उसी के साथ बदलें (जो आप vm देखने के लिए ls / dev / centos / कर सकते हैं), उदा: / dev / drbd4 -> / dev / CentOS / larry.domainname.com.au

यह पुल परिवर्तन हमारी स्थिति के लिए अद्वितीय था।

** इंटरफ़ेस श्लोक में "br1" के किसी भी संदर्भ को ढूंढें और इसे "br0" में बदलें जैसे कि आप स्रोत पुल को बदल रहे हैं ताकि लाइन इस तरह से हो

स्रोत होस्ट पर अंतिम चरण

  • स्रोत होस्ट में लॉग इन करें, जैसे

    ssh user@chewie.domainname.com.au

  • अंतिम तालमेल करने से पहले वीएम स्रोत होस्ट पर वीएम को बंद करना होगा, लेकिन ऐसा करने की आवश्यकता नहीं है। (virsh शटडाउन NameOfMachine)

  • यदि स्रोत होस्ट पर पहले से ही नहीं है, तो https://gist.github.com/rcoup/1338263 से ब्लॉकसिंकहोम स्क्रिप्ट डाउनलोड करें

  • यदि आपका उपयोगकर्ता नाम उपयोगकर्ता है (उदाहरण के लिए) तो ब्लॉक मशीन को स्क्रिप्ट में कॉपी करें दोनों मशीनों में / घर / उपयोगकर्ता और उपयोगकर्ता को चुन लें: उपयोगकर्ता और 755 स्क्रिप्ट को चोद दें।

  • यदि पहले से ही लक्ष्य होस्ट पर नहीं है, तो इसे वहां कॉपी करें, जैसे:
scp -p blockync.py user@10.10.10.38: blockync.py
  • स्रोत डिस्क को लक्ष्य डिस्क में कॉपी करने के लिए इसका उपयोग करें, जैसे

कमांड जो कॉपी करता है

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

नोट: पहला उपकरण का नाम स्रोत होस्ट के लिए है, जैसा कि 'lvs' कमांड से निर्धारित होता है; यह एक [[chewie]] स्रोत होस्ट से है।

नोट: यह लक्ष्य डिस्क की सामग्री को नष्ट कर देगा , सुनिश्चित करें कि /dev/mapper/centos-larry.domainname.com.au सही है!

नोट: सिंक में एक लंबा समय लगेगा - प्रति गीगाबाइट में लगभग 100 सेकंड, यानी: 60 गीगाबाइट डिस्क के लिए 90 मिनट।

हालाँकि, आप एक सिंक कर सकते हैं जबकि VM उपयोग में है; बाद के syncs 25 प्रतिशत तक तेजी से हो सकते हैं

स्क्रिप्ट उन मापदंडों का प्रिंट लेगी जो वह उपयोग कर रहा है (एक अपग्रेड किए गए मॉड्यूल के बारे में एक संदेश हो सकता है, यह ठीक है)। इसके बाद, यह ssh कमांड को दिखाता है कि यह उपयोग कर रहा है और इसे चलाता है (आप अधिकृत कर्मचारियों को केवल तभी संदेश देखेंगे जब वह ऐसा करता है)। इसके सिंक के दौरान, यह कॉपी किए गए कुल ब्लॉक और इसकी औसत गति प्रदर्शित करेगा। अंत में, यह एक पूर्ण संदेश प्रिंट करता है जिसमें सेकंड की संख्या होती है।

जानने योग्य बातें

आप CTRL C के साथ सिंक को रद्द कर सकते हैं और इसे बाद में फिर से कमांड चलाकर पुनः आरंभ कर सकते हैं

लक्ष्य मेजबान पर अंतिम चरण

  • लक्ष्य होस्ट में प्रवेश करें, जैसे
     ssh user@darth.domainname.com.au
  • वर्चुअल मशीन बनाएं, जैसे:
    virsh लैरी को परिभाषित करता है। xml
  • नई परिभाषित मशीन शुरू करें, जैसे:
    सुडो विर्स लार्इ शुरू
  • इसे होस्ट बूट पर शुरू करने के लिए चिह्नित करें, जैसे:
    सुडो वीर ऑटोस्टार्ट लैरी

नोट: नए परिवेश के अनुरूप VM के विवरण में परिवर्तन करना आवश्यक हो सकता है।


मैंने यह कोशिश नहीं की है, लेकिन आपको मेरे विस्तृत निर्देशों के लिए मेरा उत्थान मिला है। जब ऐसा करने का समय आता है, तो मैं सबसे अधिक यही कोशिश करूँगा।
जी ट्रावो

1

मैंने अपने पुराने केवीएम सर्वरों के एक जोड़े के साथ इस समस्या में भाग लिया है, लेकिन ऐसा होने पर वास्तव में कष्टप्रद है, और किसी भी स्थापित वीएम के साथ समस्या पैदा कर सकता है। मेरे मामले में यह नियमित रूप से मेरे एक वीएम को रीसेट स्थिति में धकेल देता है, क्योंकि डिस्क स्थान धीमा था। नीचे दिए गए निर्देश KVM / Distro संस्करण के लिए कुछ संवेदनशील हैं। मेरे मामले में, मेरे पास सेंटोस 7.5 है

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

डिफ़ॉल्ट रूप से KVM चित्र स्थान / var / lib / libvirt / छवियाँ / स्थित हैं

आपको वीएम का नाम खोजने की जरूरत है, इसके लिए वायरल सूची का उपयोग करें

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

VM virsh stop VM-Name को रोकें

मेरे लिए मैं फ़ाइल को स्थानांतरित करने के बजाय पहले कॉपी करता हूं। नए स्थान पर qcow फ़ाइल की प्रतिलिपि बनाएँ

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

नया "स्रोत फ़ाइल" स्थान संदर्भित करने के लिए VM xml फ़ाइल को संपादित करें, VM- नाम को संपादित करें

आप इस फ़ाइल को "स्रोत फ़ाइल" बदलना चाहेंगे

Libvirtd सेवा को पुनरारंभ करें

service libvirtd restart

फिर VM को पुनरारंभ करें और आपको जाने के लिए अच्छा होना चाहिए।

virsh start VM-Name
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.