Mevcut Paravirtual Linux AMI'den bir AWS HVM Linux AMI oluşturun


38

Mevcut bir paravirtual (PV) AMI'den bir donanım sanal makinesi (HVM) AMI oluşturmak mümkün müdür.

Başlangıçta yeni bir PV örneği başlatmak ec2-create-imageve virütalizasyon türü olarak HVM'yi belirlerken yeni bir görüntü oluşturmak için komutu kullanmaktı . Ancak, ec2-create-imagesanallaştırma türünü belirtmek için bir komut satırı parametresi yoktur.

Bunu yapmanın başka bir yolu var mı?

Yanıtlar:


22

Güncelleme

AWS bu özelliği EC2 API'sinde etkinleştirdi. Yeni Boto tabanlı awscli'de --virtualization-typeseçenek olarak mevcut aws ec2 register-image.

Orijinal cevap

Evet! Ne yazık ki, bunun doğrudan bir yolu yoktur. Ayrıca, bazı PV örneklerinde çekirdek ve önyükleyici değişiklikleri gerekebilir.

  1. Mevcut PV AMI'nizden bir cilt oluşturun. Kendi PV AMI'niz olsaydı, anlık görüntüden bir ses çıkarabilirsiniz. 3. parti bir AMI ise, bir örnek başlatmanız ve bir anlık görüntü almanız gerekir.
  2. Herhangi bir AMI ile bir HVM örneği başlatın.
  3. Şu HVM örneğini durdur.
  4. Bu örnekten kök hacmini ayırın.
  5. PV hacmini HVM örneğine kök hacmi (/ bölümlenmişse / dev / sda1 veya / dev / sda) olarak ekleyin.
  6. ec2-create-imageHVM örneğinde çalıştırın .
  7. Yeni HVM AMI'nizle diğer örnekleri başlatın.

Bu işe yaramazsa, 5. adımdan önce, bu birimi çalışan bir örneğe eklemeniz, bir chroot kurmanız ve dağıtımınız için bir çekirdek ve önyükleyici yüklemeniz gerekir. Ayrıca günlükleri ve herhangi bir bulut içi önbelleği temizlemek de isteyebilirsiniz.


2
1-5 adımlarını denedim ve bu durum birkaç saniye sonra durduğundan benim için işe yaramadı. Birisi bir chroot'un nasıl kurulacağı ve bir çekirdek ve önyükleyici kurulacağı konusunda ayrıntılı bilgi verebilir mi? Hem eski hem de yeni örnekler AMI Linux'tur. Teşekkürler.
tolgamorf

Çalışan bir PV örneğiniz varsa aws ec2 register-image, PV görüntüsünün anlık görüntüsündeki --virtualization-type bayrağıyla çalıştırarak HVM'ye dönüştürebilirsiniz . Detaylar aws ec2 register-image helpiçin bakınız.
Jeff Strunk

2
Kullanarak PV örneğimden bir HVM görüntüsü oluşturdum aws ec2 register-image. Sonra bu görüntüden yeni bir HVM örneği başlattım. Ancak, sistem önyükleme yapmaz.
tolgamorf

Aws ec2 forumunda kazı yaptıktan sonra, dosyaları elle değiştirerek dönüştürmenin yapıldığı bir çözüm buldum. Yakında bir cevap yazacağım.
tolgamorf

@tolgamorf Ne yaptığını hiç hatırlıyor musun? Ben de aynı problemi yaşıyorum.
Dmitry Minkovsky

13

Benim durumumda kullanarak yarattığım örnek aws ec2 register-imageönyükleme yapmadığından dönüştürmeyi elle yapmak zorunda kaldım . Benim çözümüm dayanan bu yazı üzerine AWS EC2 Forum .

Hazırlık

Tüm hacimlerin aynı uygunluk bölgesinde olduğundan emin olun.

  1. Geçiş yapmak ve tüm güncellemeleri uygulamak istediğiniz PV makinenize SSH, ardından oturumu kapatın.

  2. AWS Konsoluna gidin ve PV sisteminin oluşturduğu aynı AMI tabanını seçerek yeni bir HVM örneği başlatın (benim açımdan, Amazon 64-bit Linux AMI).

  3. Bu yeni örneğe SSH uygulayın ve tüm güncellemeleri uygulayın, ardından oturumu kapatın.

  4. AWS Konsoluna gidin ve PV örneğini durdurun. Kök cihazın anlık görüntüsünü alın ve SOURCE VOLUMEbu anlık görüntüden yeni bir birim ( ) oluşturun .

  5. HVM örneğini durdur. Kök aygıtın yeni örneğinin anlık görüntüsünü alın ve TARGET VOLUMEbu anlık görüntüden yeni bir birim ( ) oluşturun .

  6. AWS Konsolunu Kullanma:

    • SOURCE VOLUMEYeni örneğe olarak ekle /dev/xvdf.
    • TARGET VOLUMEYeni örneğe olarak ekle /dev/xvdg.

Dönüştürme işlemi

  1. SSH yeni örneğe ve kök erişimine erişin:

    sudo su
    
  2. Kaynak ve hedef sürücüleri takın.

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

    Benim durumumda, cihazlar /dev/xvdf(kaynak) ve /dev/xvdg1(hedef) idi. Bunlar, konfigürasyonunuzdaki bölümlerin sayısına ve onları nereye bağladığınıza bağlı olarak değişebilir (Hazırlık bölümündeki 6. adıma bakınız). ls -al /dev/xvd*Sürücüleri görmek için kullanın .

  3. Yedekleme /lib/modules/*(PV ami'nin çekirdeği yeni HVM makinesinden farklıysa. Bu modül bazı AWS servisleri tarafından kullanılır.)

  4. /bootHedef birimdeki hariç her şeyi sil :

    cd /mnt/target && ls | grep -v boot | xargs rm -Rf
    
  5. /bootKaynak birimdeki sil :

    rm -Rf /mnt/source/boot
    
  6. Tüm özellikleri koruyarak kaynak birimin verilerini hedef birime kopyalayın:

    rsync -aAXHPv /mnt/source/ /mnt/target
    
  7. Düzenleme /mnt/target/etc/fstabiçin /başvurduğu böylece bölüm, TARGET VOLUMEadım (8) 'de nihai konumuna monte zaman. Bir etiket kullanarak ya da sadece bir şey boyunca:

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

Ardından /lib/modules/3. Adımda yedeklenmiş olanı geri yükleyin (PV ami'nin çekirdeği yeni HVM makineden farklıysa).

  1. Sistemi durdurun ve AWS konsolunu kullanarak tüm hacimleri çıkarın. TARGET VOLUMEYeni örneğe olarak ekleyin /dev/xvda.

    Orijinal kök cihazının nereye monte edildiğine dikkat edin. Çoğu durumda, olması gerekir /dev/xvda.

  2. HVM örneğinizi başlatın. Şimdi PV sisteminizin tam bir kopyası olmalıdır. Her şey yolunda görünüyorsa, PV örneğinizi ve ayrıca silebilirsiniz SOURCE VOLUME.


1
Neden sadece rm -f /bootve yapmıyorsun cp -a /mnt/source/boot /mnt/target?
michelem

@Michelem doğru hatırlıyorsam, en başta bunu yapmaya çalıştım. Makine açılmadı.
tolgamorf

1
@tolgamorf Bu mesajı yansıtacak şekilde cevabı güncelleme şansınız var mı?
Dan Tenenbaum

2
Bu talimatlar gerçekten yardımcı oldu (ve benim için çalıştı !!) ama son bir önerim var. Asıl soru bir HVM AMI yapmakla ilgili olduğundan, bu adımı açık bırakmayın, örneği durdurma ve ondan bir AMI yapma (ve ardından örneği sonlandırma) için son bir adım ekleyin. Ayrıca, @DanGravell ile aynı sorunları yaşadım ve manyetik depolama kullanmıyorum, bu nedenle bunlar cevapta ele alınabilecek yaygın tuzaklar olabilir.
Dan Tenenbaum

1
Çok teşekkürler! Bu bana çok zaman kazandırdı, beni şaşırtan fstab kısmını temizlemek için düzenlendi. (4) aşamasında dikkat et, bir şekilde geçici birimin kökünü ve hedefleri değil sildim ve işlemi tekrar başlatmak zorunda kaldım.
Zar

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 

Ayrıntılı adımlar:

Jeff Strunk'un adımları basitleştirmek ve ec2 register görüntüsünde biraz daha ayrıntılı bilgi vermek için verdiği cevaba dayanarak cevap vermek:

  1. PV Görüntüsü kullanarak Örnek oluşturun. İstediğiniz değişiklikleri yapın / güncelleyin.

  2. Yukarıdaki örnekten Resim Oluştur.

  3. EC2 Konsolunda EC2> Elastic Block Store> Snapshot altında yukarıdaki AMI tarafından kullanılan anlık görüntü kimliğini bulun.

    veya ec2 api araçları kurulumuna sahipseniz:

    ec2-tanım-görüntüleri ami-id_of_above_created_ami

    ve ami için anlık görüntü kimliğini bulun

    .. Diğer adımlar için varsayımlar: ec2 anahtarlarınız ve api aletleriniz ayarlandı ve kullanıma hazır:

  4. Yukarıdaki anlık görüntüyü kullanarak yeni bir HVM AMI kaydedin: example:

ec2-register -a x86_64 -d '3.15.7-200.fc20.x86_64' -n 'Fedora_20_HVM_AMI' --sriov basit - sanallaştırma türü hvm -s snap-b44feb18 --root-device-name / dev / sda1

nerede

  • -d, AMI açıklamasıdır
  • -n, AMI adıdır
  • -s, 3. adımdaki anlık görüntü kimliğidir.
  • -a mimarisi
  • - sanallaştırma türü hvm yapmak için gereklidir
  • --sriov, gereksiz olsa da emin olmamakla birlikte, gelişmiş ağ iletişimi sağlamak içindir.

Daha fazla bilgi için:


2
Yanlış bir şey yapmazsam, bu, örnek türlerini kısıtlayan pazar AMI'leri için işe yaramaz. Resmi MongoDB paravirtüel AMI’sini HVM’ye dönüştürmeye çalıştım ve HVM AMI’yi yaratabilirken, onunla HVM örneği açmayacaktı.
Matt Beckman

@MattBeckman Bunun AMI kısıtlaması yerine temelde çekirdek / bootloader desteği ile ilgili olduğunu düşünüyorum. Yukarıda fedora için çalışıyor ama amazon linux için çalışmıyor. Orada Jeff Strunk originaly tarafından önerilen şekilde devam etmeniz gerekiyor.
Anshu Prateek

1
Bu çalışma @AnshuPrateek
Atmesh Mishra

2

Bunu AWS web arayüzünün içinden yapabilirsiniz. Anlık görüntülere gidin , hvm'ye dönüştürmek istediğiniz anlık görüntüyü tıklayın ve eylemlere tıklayın ve ardından resim oluşturun . Görüntü oluşturma sihirbazındaki açılır menüde HVM'yi seçin .


9
Bunu yeni denedim, ancak örnek düzgün şekilde açılmıyor Ben sadece durduktan sonra başlıyor, birkaç dakika sonra başladım.
ovi

1

Buradaki önerilerin tümünü denedikten sonra hiçbiri benim için işe yaramadı, konuyla ilgili mükemmel bir blog yazısı buldum, https://www.opswat.com/blog/aws-2015-why-you-need-switch- pv-hvm .

Prosedürün elemanları (detaylar):

  1. grubGeçirilecek PV örneğine yükleyin (kaynak örnek).

  2. Kaynaktaki kök biriminin ihtiyatlı bir anlık görüntüsünü alın (kaynak hacim, SV).

  3. Birimi geçirecek geçici bir HVM örneği oluşturun.

    1. Amazon Linux örneği kullandım
  4. Bir hedef cilt (DV) oluşturun ve hem bunu hem de SV'yi geçici örneğe ekleyin.

    1. DV en az SV kadar büyük olmalıdır.

    2. Olarak SV takın /dev/{sd,xvd}fve aynı DV /dev/{sd,xvd}g.

    3. DV bölümü:

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

    partprobe /dev/xvdg

    udevadm settle

  5. SV'nin FS'sini minimum boyuta getirin ve ddgörüntüyü DV üzerine yerleştirin.

    1. Kaynak birimin FS'sini temizleyin: e2fsck -f /dev/xvdf

    2. Aynısını küçült: resize2fs -M /dev/xvdf

    3. Resize2fs (örn. Resizing the file system on /dev/xvdf to 269020 (4k) blocks) Çıktısını gözlemleyin ve bir sonraki adım için not alın.

    4. DV’den DV’ye çoğaltma: 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. Yeni bölümdeki FS’yi genişletin: resize2fs /dev/xvdg1

  6. grubDV'nin önyükleme bloğuna yükleyin

    1. DV üzerinde geçici olarak cihaz dosyaları oluşturun: mount /dev/xvdg1 /mnt; cp -a /dev/xvdg /dev/xvdg1 /mnt/dev/

    2. Grub dosyalarını kurun:

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

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

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

    1. Grub'u chroot bir ortamda kurun:

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

    device (hd0) /dev/xvdg

    root (hd0,0)

    setup (hd0)

    ARNIE

  7. Hedef birimde bazı küçük değişiklikler yaptıktan sonra birimi kapatın ve bir AMI yapın.

    1. Geçici cihaz dosyalarını düzenleyin: rm -f /mnt/dev/xvdg /mnt/dev/xvdg1

    2. Olarak /mnt/boot/grub/grub.confdeğişime root (hd0)için root (hd0,0), ekleme (ya da yerine console=*) console=ttyS0çekirdek hattına, ve gerekirse yerine root=*ile root=LABEL=/çekirdek doğrultusunda

    3. In /mnt/etc/fstabkök FS adlı çizgi etiketlenmiş başvurusu, örneğin içerdiğini sağlamak

    LABEL=/ / ext4 defaults,noatime 1 1

    1. Yeni kök FS'yi etiketle e2label /dev/xvdg1 /

    2. DV'yi geçici durumdan çıkarın, hem SV hem de DV'yi geçici durumdan çıkarın.

    3. DV'yi çekin ve bu görüntüden bir AMI görüntüsü oluşturun.

  8. Bu HMI'dan bir HVM örneği başlatın. Bu senin göçmen örneğin.

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.