Buat AMI AWS HVM Linux dari AMI Linux Paravirtual yang Ada

38

Apakah mungkin untuk membuat AMI perangkat keras mesin virtual (HVM) dari AMI paravirtual (PV) yang ada.

Pikiran saya awalnya adalah untuk memulai contoh PV baru dan menggunakan ec2-create-imageperintah untuk membuat gambar baru sambil menentukan HVM sebagai jenis virutalization. Namun, ec2-create-imagetidak memiliki parameter baris perintah untuk menentukan tipe virtualisasi.

Apakah ada cara lain untuk melakukan ini?

javacavaj
sumber

Jawaban:

22

Memperbarui

AWS telah mengaktifkan fitur ini di API EC2. Ini tersedia sebagai --virtualization-typeopsi untuk aws ec2 register-imagedi awscli berbasis Boto baru.

Jawaban asli

Iya nih! Sayangnya, tidak ada cara langsung untuk melakukannya. Juga, beberapa instance PV mungkin memerlukan modifikasi kernel dan bootloader.

  1. Buat volume dari AMI PV yang ada. Jika itu adalah AMI PV Anda sendiri, Anda dapat membuat volume dari foto itu. Jika ini adalah AMI pihak ke-3, Anda harus meluncurkan instance dan mengambil snapshot.
  2. Luncurkan instance HVM dengan AMI apa pun.
  3. Hentikan instance HVM itu.
  4. Lepaskan volume root dari instance itu.
  5. Lampirkan volume PV sebagai volume root (/ dev / sda1 atau / dev / sda jika dipartisi) ke instance HVM.
  6. Jalankan ec2-create-imagepada contoh HVM.
  7. Luncurkan instance lain dengan AMI HVM baru Anda.

Jika itu tidak berhasil, maka sebelum langkah 5, Anda harus melampirkan volume itu ke instance yang berjalan, mengatur chroot, dan menginstal kernel dan bootloader untuk distribusi Anda. Anda mungkin juga ingin menghapus log dan cache cloud-init apa pun.

Jeff Strunk
sumber
2
Saya mencoba langkah 1-5 dan tidak berhasil bagi saya, karena instance berhenti setelah beberapa detik. Bisakah seseorang menguraikan cara mengatur chroot, dan menginstal kernel dan bootloader? Contoh lama dan baru adalah AMI Linux. Terima kasih.
tolgamorf
Jika Anda memiliki instance PV yang berfungsi, Anda dapat mengonversinya menjadi HVM dengan menjalankannya aws ec2 register-imagedengan flag --virtualization-type pada snapshot dari gambar PV. Lihat aws ec2 register-image helpdetailnya.
Jeff Strunk
2
Saya membuat gambar HVM dari instance PV saya menggunakan aws ec2 register-image. Kemudian saya meluncurkan instance HVM baru dari gambar itu. Namun sistem tidak mau boot.
tolgamorf
Setelah menggali melalui forum aws ec2, saya datang dengan solusi di mana konversi dilakukan dengan mengganti file secara manual. Saya akan segera menulis jawaban.
tolgamorf
@ Tolgamorf Anda ingat sama sekali apa yang Anda lakukan? Saya mengalami masalah yang sama.
Dmitry Minkovsky
13

Dalam kasus saya, saya harus melakukan konversi secara manual karena contoh yang saya buat menggunakan aws ec2 register-imagetidak bisa boot. Solusi saya didasarkan pada posting ini di AWS EC2 Forum .

Persiapan

Pastikan semua volume berada di zona ketersediaan yang sama.

  1. SSH ke mesin PV Anda yang ingin Anda migrasikan dan terapkan semua pembaruan, lalu logout.

  2. Buka Konsol AWS dan luncurkan instance HVM baru dengan memilih AMI basis yang sama tempat sistem PV dibuat (dalam kasus saya, Amazon AMI Linux 64-bit).

  3. SSH ke instance baru ini dan terapkan semua pembaruan, lalu logout.

  4. Pergi ke Konsol AWS dan hentikan instance PV. Ambil snapshot dari perangkat root dan buat volume baru ( SOURCE VOLUME) dari snapshot ini.

  5. Hentikan instance HVM. Ambil snapshot dari perangkat root pada instance baru dan buat volume baru ( TARGET VOLUME) dari snapshot ini.

  6. Menggunakan Konsol AWS:

    • Lampirkan SOURCE VOLUMEke instance baru sebagai /dev/xvdf.
    • Lampirkan TARGET VOLUMEke instance baru sebagai /dev/xvdg.

Proses Konversi

  1. SSH ke instance baru dan dapatkan akses root:

    sudo su
    
  2. Pasang drive sumber dan target.

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

    Dalam kasus saya, perangkatnya adalah /dev/xvdf(sumber) dan /dev/xvdg1(target). Ini dapat berubah dalam konfigurasi Anda berdasarkan jumlah partisi dan di mana Anda melampirkannya (lihat langkah 6 dalam Persiapan). Gunakan ls -al /dev/xvd*untuk melihat drive.

  3. Cadangkan /lib/modules/*(Jika kernel dari PV ami berbeda dari mesin HVM baru. Modul ini digunakan oleh beberapa layanan AWS.)

  4. Hapus semuanya kecuali /bootpada volume target:

    cd /mnt/target && ls | grep -v boot | xargs rm -Rf
    
  5. Hapus /bootpada volume sumber:

    rm -Rf /mnt/source/boot
    
  6. Salin data volume sumber ke volume target dengan mempertahankan semua atribut:

    rsync -aAXHPv /mnt/source/ /mnt/target
    
  7. Edit /mnt/target/etc/fstabuntuk /partisi, sehingga referensi TARGET VOLUMEsaat dipasang di lokasi terakhirnya pada langkah (8). Baik menggunakan label atau hanya sesuatu:

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

Kemudian kembalikan /lib/modules/yang didukung di Langkah 3. (Jika kernel dari PV ami berbeda dari mesin HVM yang baru.)

  1. Hentikan sistem dan lepaskan semua volume menggunakan konsol AWS. Lampirkan TARGET VOLUMEpada instance baru sebagai /dev/xvda.

    Pastikan untuk mencatat di mana perangkat root asli dipasang. Dalam kebanyakan kasus, seharusnya /dev/xvda.

  2. Mulai instance HVM Anda. Sekarang seharusnya duplikat yang tepat dari sistem PV Anda. Jika semuanya terlihat OK, Anda sekarang dapat menghapus instance PV Anda dan juga SOURCE VOLUME.

tolgamorf
sumber
1
Mengapa Anda tidak melakukan rm -f /bootdan cp -a /mnt/source/boot /mnt/target?
michelem
@Michelem jika saya ingat dengan benar, saya mencoba melakukan itu sejak awal. Mesin tidak bisa boot.
tolgamorf
1
@tolgamorf Ada kemungkinan memperbarui jawaban untuk mencerminkan ini?
Dan Tenenbaum
2
Instruksi ini sangat membantu (dan bekerja untuk saya !!) tetapi saya punya satu saran terakhir. Karena pertanyaan awal adalah tentang membuat HVM AMI, jangan biarkan langkah itu tersirat, tambahkan langkah terakhir untuk menghentikan instance dan membuat AMI dari itu (dan kemudian menghentikan instance). Juga, saya memiliki masalah yang sama persis seperti @DanGravell dan saya tidak menggunakan penyimpanan magnetik, jadi ini mungkin perangkap umum yang bisa diatasi dalam jawabannya.
Dan Tenenbaum
1
Terimakasih banyak! Ini menghemat banyak waktu saya, mengeditnya untuk membersihkan bagian fstab yang sedikit membingungkan saya. Waspadalah selama langkah (4), saya entah bagaimana menghapus root volume sementara dan bukan target, memecah volume itu dan harus memulai kembali proses.
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 

Langkah-langkah terperinci:

Menjawab lebih lanjut berdasarkan tanggapan Jeff Strunk untuk menyederhanakan langkah-langkah dan memberikan sedikit lebih banyak detail pada gambar register EC2:

  1. Buat Instance menggunakan PV Image. Buat / perbarui setiap perubahan yang Anda inginkan.

  2. Buat Gambar dari contoh di atas.

  3. Temukan id snapshot yang digunakan oleh AMI di atas di bawah EC2> Elastic Block Store> Snapshot di EC2 Console.

    atau jika Anda memiliki pengaturan alat api ec2:

    ec2-jelaskan-gambar ami-id_of_above_created_ami

    dan temukan id snapshot untuk ami

    .. Asumsi untuk langkah lebih lanjut: Kunci EC2 dan alat api Anda diatur dan siap digunakan:

  4. Daftarkan AMM HVM baru menggunakan snapshot di atas: contoh:

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

dimana

  • -d adalah deskripsi AMI
  • -n adalah nama AMI
  • -s adalah snapshot id dari langkah 3.
  • -a adalah arsitektur
  • --virtualization-type diperlukan untuk membuatnya hvm
  • --sriov untuk mengaktifkan jaringan yang ditingkatkan, meskipun mungkin berlebihan, tidak yakin.

Untuk informasi lebih lanjut:

Anshu Prateek
sumber
2
Kecuali jika saya melakukan sesuatu yang salah, ini tidak akan berfungsi untuk AMI marketplace yang membatasi jenis instance. Sudah mencoba mengkonversi AMI paravirtual MongoDB resmi ke HVM, dan sementara saya bisa membuat AMI HVM, itu tidak akan meluncurkan contoh-HVM dengan itu.
Matt Beckman
@MattBeckman Saya pikir ini tentang dukungan kernel / bootloader yang mendasar daripada pembatasan AMI. Di atas berfungsi untuk fedora tetapi tidak untuk amazon linux. Di sana Anda harus pergi jalan seperti yang disarankan oleh Jeff Strunk orisinal.
Anshu Prateek
1
Ini berhasil @AnshuPrateek
Atmesh Mishra
2

Anda dapat melakukan ini dari dalam antarmuka web AWS. Arahkan ke snapshot , klik snapshot yang diinginkan yang ingin Anda konversi menjadi hvm dan klik pada tindakan lalu buat gambar . Pada menu dropdown di create image wizard pilih HVM .

Justin
sumber
9
Saya baru saja mencoba ini, tapi ini seperti contoh tidak akan boot dengan benar. Itu hanya dalam keadaan terhenti dengan sendirinya, beberapa saat setelah saya memulainya.
ovi
1

Setelah mencoba semua saran di sini, tidak ada yang bekerja untuk saya, saya menemukan entri blog yang bagus tentang hal itu, di https://www.opswat.com/blog/aws-2015-why-you-need-switch- pv-hvm .

Elemen (detail) dari prosedur ini adalah:

  1. Instal grubpada instance PV untuk dimigrasikan (instance source).

  2. Buat snapshot pencegahan tentang volume root pada instance sumber (volume sumber, SV).

  3. Buat instance HVM sementara yang akan memigrasi volume.

    1. Saya menggunakan contoh Amazon Linux
  4. Buat volume tujuan (DV), dan lampirkan ini dan SV ke instance sementara.

    1. DV harus setidaknya sebesar SV.

    2. Pasang SV sebagai /dev/{sd,xvd}f, dan DV sebagai /dev/{sd,xvd}g.

    3. Partisi DV:

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

    partprobe /dev/xvdg

    udevadm settle

  5. Ubah ukuran ke ukuran minimum SV FS, dan gunakan ddgambar itu ke DV.

    1. Bersihkan FS volume sumber: e2fsck -f /dev/xvdf

    2. Minimalkan hal yang sama: resize2fs -M /dev/xvdf

    3. Amati output dari resize2fs (mis. Resizing the file system on /dev/xvdf to 269020 (4k) blocks) Dan catat untuk langkah selanjutnya.

    4. Gandakan SV ke 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. Perluas FS pada partisi baru: resize2fs /dev/xvdg1

  6. Instal grubke dalam blok boot DV

    1. Buat sementara file perangkat di DV: mount /dev/xvdg1 /mnt; cp -a /dev/xvdg /dev/xvdg1 /mnt/dev/

    2. Instal file grub:

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

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

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

    1. Instal grub di lingkungan chroot:

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

    device (hd0) /dev/xvdg

    root (hd0,0)

    setup (hd0)

    ARNIE

  7. Setelah melakukan beberapa perubahan kecil pada volume tujuan, ambil volume, dan buat AMI darinya.

    1. Rapikan file perangkat sementara: rm -f /mnt/dev/xvdg /mnt/dev/xvdg1

    2. Di /mnt/boot/grub/grub.conf, ubah root (hd0)menjadi root (hd0,0), tambahkan (atau ganti console=*) console=ttyS0ke baris kernel, dan jika perlu ganti root=*dengan root=LABEL=/di dalam baris kernel

    3. Dalam /mnt/etc/fstab, pastikan bahwa baris FS root berisi referensi berlabel, misalnya

    LABEL=/ / ext4 defaults,noatime 1 1

    1. Beri label FS root baru dengan e2label /dev/xvdg1 /

    2. Lepas DV dari instance sementara, lepaskan SV dan DV dari instance sementara.

    3. Jepret DV, dan dari jepret itu buat gambar AMI.

  8. Luncurkan instance HVM dari HMI itu. Itu adalah contoh migrasi Anda.

MadHatter mendukung Monica
sumber