मौजूदा Paravirtual Linux AMI से AWS HVM Linux AMI बनाएं


38

क्या एक मौजूदा paravirtual (PV) AMI से एक हार्डवेयर वर्चुअल मशीन (HVM) AMI बनाना संभव है।

मेरा शुरू में विचार था ec2-create-imageकि एचवीएम को वायरललाइज़ेशन प्रकार के रूप में निर्दिष्ट करते हुए एक नई छवि बनाने के लिए एक नई पीवी आवृत्ति शुरू करें और एक नई छवि बनाने के लिए कमांड का उपयोग करें । हालांकि, ec2-create-imageवर्चुअलाइजेशन प्रकार को निर्दिष्ट करने के लिए कमांड लाइन पैरामीटर नहीं है।

क्या ऐसा करने के बारे में एक और तरीका है?

जवाबों:


22

अद्यतन करें

AWS ने EC2 API में इस सुविधा को सक्षम किया है। यह नए Boto आधारित अंसक्लि में --virtualization-typeविकल्प के रूप में उपलब्ध है aws ec2 register-image

मूल उत्तर

हाँ! दुर्भाग्य से, ऐसा करने का एक सीधा तरीका नहीं है। इसके अलावा, कुछ PV उदाहरणों में कर्नेल और बूटलोडर संशोधनों की आवश्यकता हो सकती है।

  1. अपने मौजूदा PV AMI से वॉल्यूम बनाएं। यदि यह आपका अपना पीवी एएमआई था, तो आप स्नैपशॉट से वॉल्यूम बना सकते हैं। यदि यह 3rd पार्टी एएमआई है, तो आपको एक उदाहरण लॉन्च करने और स्नैपशॉट लेने की आवश्यकता होगी।
  2. किसी भी एएमआई के साथ एक एचवीएम उदाहरण लॉन्च करें।
  3. रोकें कि एचवीएम उदाहरण।
  4. उस उदाहरण से रूट वॉल्यूम को अलग करें।
  5. पीवी वॉल्यूम को रूट वॉल्यूम (/ dev / sda1 या / dev / sda के रूप में यदि इसे विभाजित किया गया था) को एचवीटी उदाहरण के साथ संलग्न करें।
  6. ec2-create-imageएचवीएम उदाहरण पर चलाएँ ।
  7. अपने नए HVM AMI के साथ अन्य उदाहरण लॉन्च करें।

यदि वह काम नहीं करता है, तो चरण 5 से पहले, आपको उस वॉल्यूम को एक रनिंग इंस्टेंस में संलग्न करना होगा, एक चिरोट सेट करना होगा, और अपने वितरण के लिए कर्नेल और बूटलोडर स्थापित करना होगा। आप लॉग और किसी भी क्लाउड-इन कैश को खाली करना चाह सकते हैं।


2
मैंने 1-5 चरणों की कोशिश की और यह मेरे लिए काम नहीं किया, क्योंकि उदाहरण कुछ सेकंड के बाद बंद हो जाता है। क्या कोई इस बारे में विस्तार से बता सकता है कि चिरोट को कैसे स्थापित किया जाए, और कर्नेल और बूटलोडर स्थापित किया जाए? दोनों पुराने और नए उदाहरण एएमआई लिनक्स हैं। धन्यवाद।
टॉलगॉर्फ

यदि आपके पास एक कार्यशील पीवी उदाहरण है, तो आप इसे aws ec2 register-imageपीवी छवि के स्नैपशॉट पर --virtualization-type ध्वज के साथ चलाकर एचवीएम में परिवर्तित कर सकते हैं । aws ec2 register-image helpविवरण के लिए देखें।
जेफ स्ट्रंक

2
मैं अपने PV उदाहरण का उपयोग करके एक HVM छवि बनाई aws ec2 register-image। फिर मैंने उस छवि से एक नया एचवीएम उदाहरण लॉन्च किया। हालाँकि सिस्टम बूट नहीं होगा।
tolgamorf

Aws ec2 फोरम के माध्यम से खुदाई करने के बाद, मैं एक समाधान के साथ आया था जिसमें फ़ाइलों को मैन्युअल रूप से प्रतिस्थापित करके रूपांतरण किया जाता है। मैं जल्द ही जवाब लिखूंगा।
टॉल्गॉर्फ 20

@tolgamorf आपको याद है कि आपने क्या किया था? मुझे भी यही समस्या हो रही है।
दिमित्री मिन्कोवस्की

13

मेरे मामले में, मुझे उस रूपांतरण को मैन्युअल रूप से करना था, जिसका उपयोग करते हुए मैं aws ec2 register-imageबूट नहीं करता। मेरा समाधान इस पोस्ट पर AWS EC2 फोरम पर आधारित है ।

तैयारी

सुनिश्चित करें कि सभी वॉल्यूम समान उपलब्धता क्षेत्र में हैं।

  1. अपने पीवी मशीन के लिए SSH जिसे आप माइग्रेट करना चाहते हैं और सभी अपडेट लागू करना चाहते हैं, फिर लॉग आउट करें।

  2. AWS कंसोल पर जाएं और उसी आधार AMI का चयन करके एक नया HVM इंस्टेंस लॉन्च करें, जो कि पीवी सिस्टम (मेरे मामले में, अमेज़ॅन 64-बिट लिनक्स एएमआई) से बनाया गया था।

  3. इस नए उदाहरण के लिए SSH और सभी अपडेट लागू करें, फिर लॉग आउट करें।

  4. AWS कंसोल पर जाएं और PV इंस्टेंस को रोकें। रूट डिवाइस का स्नैपशॉट लें और SOURCE VOLUMEइस स्नैपशॉट से एक नया वॉल्यूम ( ) बनाएं ।

  5. एचवीएम उदाहरण बंद करो। नए उदाहरण पर रूट डिवाइस का स्नैपशॉट लें और TARGET VOLUMEइस स्नैपशॉट से एक नया वॉल्यूम ( ) बनाएं ।

  6. AWS कंसोल का उपयोग करना:

    • SOURCE VOLUMEनए उदाहरण के रूप में संलग्न करें /dev/xvdf
    • TARGET VOLUMEनए उदाहरण के रूप में संलग्न करें /dev/xvdg

रूपांतरण प्रक्रिया

  1. नए उदाहरण के लिए SSH और रूट एक्सेस प्राप्त करें:

    sudo su
    
  2. स्रोत और लक्ष्य ड्राइव माउंट करें।

    mkdir -p /mnt/source && mount /dev/xvdf /mnt/source
    mkdir -p /mnt/target && mount /dev/xvdg1 /mnt/target
    

    मेरे मामले में, उपकरण /dev/xvdf(स्रोत) और /dev/xvdg1(लक्ष्य) थे। ये आपके कॉन्फ़िगरेशन में विभाजन की संख्या के आधार पर बदल सकते हैं और जहां आपने उन्हें संलग्न किया था (तैयारी में चरण 6 देखें)। ls -al /dev/xvd*ड्राइव देखने के लिए उपयोग करें ।

  3. बैकअप /lib/modules/*(यदि पीवी एमवी की कर्नेल नई एचवीएम मशीन से अलग है। इस मॉड्यूल का उपयोग AWS की कुछ सेवाओं द्वारा किया जाता है)

  4. /bootलक्ष्य वॉल्यूम पर सब कुछ हटाएं :

    cd /mnt/target && ls | grep -v boot | xargs rm -Rf
    
  5. /bootस्रोत वॉल्यूम पर हटाएं :

    rm -Rf /mnt/source/boot
    
  6. स्रोत वॉल्यूम के डेटा को लक्ष्य वॉल्यूम पर कॉपी करें ताकि सभी विशेषताओं को संरक्षित किया जा सके:

    rsync -aAXHPv /mnt/source/ /mnt/target
    
  7. विभाजन के /mnt/target/etc/fstabलिए संपादित करें /, ताकि यह TARGET VOLUMEचरण (8) में अपने अंतिम स्थान पर घुड़सवार होने पर संदर्भित हो । या तो एक लेबल का उपयोग कर या बस कुछ के साथ:

    /dev/xvda1 /     ext4    defaults,barrier=0 1 1
    

फिर /lib/modules/चरण 3 में बैकअप किया गया था पुनर्स्थापित करें (यदि PV ami की कर्नेल नई HVM मशीन से अलग है)।

  1. सिस्टम को बंद करें और AWS कंसोल का उपयोग करके सभी संस्करणों को अलग करें। TARGET VOLUMEनए उदाहरण पर संलग्न करें /dev/xvda

    ध्यान दें कि मूल रूट डिवाइस कहां माउंट किया गया था। ज्यादातर मामलों में, यह होना चाहिए /dev/xvda

  2. अपना HVM उदाहरण शुरू करें। अब यह आपके पीवी सिस्टम का एक सटीक डुप्लिकेट होना चाहिए। यदि सब कुछ ठीक लगता है, तो आप अब अपने पीवी उदाहरण और को भी हटा सकते हैं SOURCE VOLUME


1
क्यों आप बस एक ऐसा नहीं करते हैं rm -f /bootऔर cp -a /mnt/source/boot /mnt/target?
माइकेल

@ जो भी हो अगर मुझे सही याद है, तो मैंने पहली बार में ऐसा करने की कोशिश की। मशीन में बूट नहीं था।
टॉलगॉर्फ

1
@tolgamorf इस को प्रतिबिंबित करने के लिए उत्तर को अद्यतन करने का कोई भी मौका?
दान तेनाबाम

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

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

10

TLDR:

ec2-register -a x86_64 -d '3.15.7-200.fc20.x86_64' -n 'Fedora_20_HVM_AMI'  --sriov simple --virtualization-type hvm -s snap-b44feb18 --root-device-name /dev/sda1 

विस्तृत कदम:

जेफ स्ट्रंक की प्रतिक्रियाओं को सरल बनाने और ec2 रजिस्टर छवि पर थोड़ा और अधिक विवरण देने के आधार पर आगे का जवाब देना :

  1. पीवी इमेज का उपयोग करके इंस्टेंस बनाएं। अपने इच्छित परिवर्तन करें / अपडेट करें।

  2. उपरोक्त उदाहरण से छवि बनाएँ।

  3. EC2> लोचदार ब्लॉक स्टोर> EC2 कंसोल में स्नैपशॉट के तहत उपरोक्त एएमआई द्वारा उपयोग की गई स्नैपशॉट आईडी का पता लगाएं।

    या यदि आपके पास ec2 एपीआई उपकरण सेटअप है:

    ec2-description-images एमि-आईडी_ऑफ_बॉव_क्रिएटेड_मी

    और ami के लिए स्नैपशॉट आईडी ढूंढें

    .. आगे के चरणों के लिए मान लें: आपकी ec2 कुंजी और एपीआई उपकरण सेट हैं और उपयोग के लिए तैयार हैं:

  4. उपरोक्त स्नैपशॉट का उपयोग करके एक नया HVM AMI पंजीकृत करें: उदाहरण:

ec2-register -a x86_64 -d '3.15.7-200.fc20.x86_64' -n 'Fedora_20_HVM_AMI' --sriov simple --virtualization-type hvm -s snap-b44feb18 --root-device-name / dev / sda1

कहा पे

  • -d AMI विवरण है
  • -n एएमआई नाम है
  • -s चरण 3 से स्नैपशॉट आईडी है।
  • -ए आर्किटेक्चर है
  • - इसे hvm बनाने के लिए -आवर्जन-प्रकार की आवश्यकता होती है
  • - क्रिस उन्नत नेटवर्किंग को सक्षम करने के लिए है, हालांकि यह निरर्थक हो सकता है, निश्चित नहीं है।

अधिक जानकारी के लिए:


2
जब तक मैं कुछ गलत कर रहा हूं, यह उदाहरण के प्रकारों को प्रतिबंधित करने वाले बाज़ार एएमआई के लिए काम नहीं करेगा। आधिकारिक MongoDB paravirtual AMI को HVM में परिवर्तित करने की कोशिश की, और जब मैं HVM AMI बना सकता था, तो यह इसके साथ एक एचवीएम-उदाहरण लॉन्च नहीं करेगा।
मैट बेकमैन

@MattBeckman मुझे लगता है कि एएमआई प्रतिबंध के बजाय अंतर्निहित कर्नेल / बूटलोडर समर्थन के बारे में है। ऊपर फ़ेडोरा के लिए काम करता है, लेकिन अमेज़ॅन लिनक्स के लिए नहीं। वहां आपको जेफ स्ट्रंक ओरिजिनल द्वारा सुझाए गए तरीके से जाना होगा।
अंशु प्रतीक

1
इसने @AnshuPrateek
Atmesh Mishra

2

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


9
मैं सिर्फ यह कोशिश की, लेकिन यह ठीक तरह से बूट नहीं होगा उदाहरण की तरह है। यह सिर्फ मेरे द्वारा शुरू किए जाने के कुछ ही क्षणों के बाद, रोकी हुई अवस्था में हो जाता है।
ओवी

1

यहाँ उन सभी सुझावों की कोशिश की, जिनमें से किसी ने भी मेरे लिए काम नहीं किया, मुझे इस विषय पर एक उत्कृष्ट ब्लॉग प्रविष्टि मिली, https://www.opswat.com/blog/aws-2015-why-you-need-switch- PV-hvm

प्रक्रिया के तत्व (विवरण) हैं:

  1. grubमाइग्रेट किए जाने वाले PV उदाहरण पर स्थापित करें (स्रोत उदाहरण)।

  2. स्रोत उदाहरण (स्रोत वॉल्यूम, SV) पर रूट वॉल्यूम का एक एहतियाती स्नैपशॉट बनाएं।

  3. एक अस्थायी एचवीएम उदाहरण बनाएं जो वॉल्यूम को माइग्रेट करेगा।

    1. मैंने एक अमेज़ॅन लिनक्स उदाहरण का उपयोग किया
  4. एक गंतव्य वॉल्यूम (DV) बनाएँ, और इस और SV दोनों को अस्थायी उदाहरण में संलग्न करें।

    1. DV कम से कम एसवी जितना बड़ा होना चाहिए।

    2. एसवी के रूप में संलग्न करें /dev/{sd,xvd}f, और DV के रूप में /dev/{sd,xvd}g

    3. विभाजन DV:

    parted /dev/xvdg --script 'mklabel msdos mkpart primary 1M -1s print quit'

    partprobe /dev/xvdg

    udevadm settle

  5. न्यूनतम आकार एसवी के एफएस का आकार, और ddछवि का उपयोग करके DV पर।

    1. स्रोत की मात्रा को साफ करें FS: e2fsck -f /dev/xvdf

    2. उसी को छोटा करें: resize2fs -M /dev/xvdf

    3. Resize2fs (उदा Resizing the file system on /dev/xvdf to 269020 (4k) blocks) से आउटपुट का निरीक्षण करें और इसे अगले चरण के लिए नोट करें।

    4. एसवी को DV: dd if=/dev/xvdf of=/dev/xvdg1 bs=<block size from previous step, here 4k> count=<use block count from last step, here 269020>

    5. नए विभाजन पर FS का विस्तार करें: resize2fs /dev/xvdg1

  6. grubDV के बूट ब्लॉक में स्थापित करें

    1. DV पर अस्थायी रूप से डिवाइस फ़ाइलें बनाएँ: mount /dev/xvdg1 /mnt; cp -a /dev/xvdg /dev/xvdg1 /mnt/dev/

    2. ग्रब फ़ाइलें स्थापित करें:

    rm -f /mnt/boot/grub/*stage*

    cp /mnt/usr/*/grub/*/*stage* /mnt/boot/grub/

    rm -f /mnt/boot/grub/device.map

    1. ग्रब वातावरण में ग्रब स्थापित करें:

    cat << ARNIE | chroot /mnt grub --batch

    device (hd0) /dev/xvdg

    root (hd0,0)

    setup (hd0)

    ARNIE

  7. गंतव्य वॉल्यूम पर कुछ अन्य छोटे बदलाव किए गए हैं, वॉल्यूम को स्नैप करें, और इससे एक एएमआई बनाएं।

    1. अस्थायी डिवाइस फ़ाइलों को साफ करें: rm -f /mnt/dev/xvdg /mnt/dev/xvdg1

    2. में /mnt/boot/grub/grub.conf, परिवर्तन root (hd0)करने के लिए root (hd0,0), जोड़ने (या की जगह console=*) console=ttyS0कर्नेल लाइन के लिए, और यदि आवश्यक हो की जगह root=*के साथ root=LABEL=/गिरी लाइन में

    3. में /mnt/etc/fstab, यह सुनिश्चित करें कि रूट FS की लाइन में एक लेबल संदर्भ है, उदाहरण के लिए

    LABEL=/ / ext4 defaults,noatime 1 1

    1. नए रूट FS को लेबल करें e2label /dev/xvdg1 /

    2. अस्थाई उदाहरण से DV को अनमाउंट करें, अस्थायी उदाहरण से SV और DV दोनों को अलग करें।

    3. DV को स्नैप करें, और उस स्नैप से एएमआई इमेज बनाएं।

  8. उस एचएमआई से एक एचवीएम उदाहरण लॉन्च करें। यह आपका माइग्रेटेड उदाहरण है।

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