Створіть AWS HVM Linux AMI з існуючої паравіртуальної Linux AMI


38

Чи можливо створити апаратну віртуальну машину (HVM) AMI з існуючого паравіртуального (PV) AMI.

Спочатку я думав: запустити новий екземпляр PV та використовувати ec2-create-imageкоманду для створення нового зображення, вказавши HVM як тип віруруалізації. Однак ec2-create-imageне має параметра командного рядка, щоб вказати тип віртуалізації.

Чи є інший спосіб зробити це?

Відповіді:


22

Оновлення

AWS увімкнув цю функцію в API EC2. Він доступний як --virtualization-typeопція для aws ec2 register-imageнового awscli на основі Boto.

Оригінальна відповідь

Так! На жаль, прямого способу це не існує. Також для деяких екземплярів PV можуть знадобитися модифікації ядра та завантажувача.

  1. Створіть об'єм із наявного PV AMI. Якщо це був ваш власний PV AMI, ви можете зробити об'єм із знімка. Якщо це сторонній AMI, вам потрібно буде запустити екземпляр і зробити знімок.
  2. Запустіть екземпляр HVM з будь-яким AMI.
  3. Зупиніть цей екземпляр HVM.
  4. Від'єднайте кореневий том від цього примірника.
  5. Приєднайте об'єм PV як кореневий об'єм (/ dev / sda1 або / dev / sda, якщо він був розділений) до екземпляра HVM.
  6. Запустити ec2-create-imageв екземплярі HVM.
  7. Запустіть інші екземпляри зі своїм новим HVM AMI.

Якщо це не працює, то перед кроком 5 вам потрібно буде приєднати цей том до запущеного екземпляра, встановити chroot та встановити ядро ​​та завантажувач для вашого розповсюдження. Ви також можете очистити журнали та будь-який кеш-хмара-init.


2
Я спробував кроки 1-5, і це не спрацювало для мене, оскільки екземпляр зупиняється через кілька секунд. Може хтось детально розробить, як налаштувати chroot та встановити ядро ​​та завантажувач? І старий, і новий екземпляри - це AMI Linux. Спасибі.
tolgamorf

Якщо у вас є робочий екземпляр PV, ви можете перетворити його в HVM, виконавши aws ec2 register-imageпрапор --virtualization типу на знімку фотографії PV. Детальніше aws ec2 register-image helpдивіться.
Jeff Strunk

2
Я створив зображення HVM з мого фотоаппарата, використовуючи aws ec2 register-image. Потім я запустив новий екземпляр HVM з цього зображення. Однак система не завантажиться.
tolgamorf

Перекопавшись на форумі aws ec2, я придумав рішення, в якому перетворення здійснюється шляхом заміни файлів вручну. Я скоро напишу відповідь.
tolgamorf

@tolgamorf ти пам’ятаєш взагалі, що ти робив? У мене така ж проблема.
Дмитро Міньковський

13

У моєму випадку я повинен був зробити перетворення вручну, оскільки екземпляр, який я створюю за допомогою aws ec2 register-image, не завантажувався. Моє рішення засноване на цій публікації на форумі AWS EC2 .

Підготовка

Переконайтесь, що всі обсяги знаходяться в одній зоні наявності.

  1. SSH на ваш фотомагнітофон, з якого потрібно перейти та застосувати всі оновлення, а потім вийти з системи.

  2. Перейдіть до консолі AWS та запустіть новий екземпляр HVM, вибравши той самий базовий AMI, з якого створена PV-система (у моєму випадку - Amazon 64-бітний Linux AMI).

  3. SSH до цього нового примірника та застосуйте всі оновлення та вийдіть із системи.

  4. Перейдіть до консолі AWS і зупиніть фотоапарат. Зробіть знімок кореневого пристрою та створіть новий том ( SOURCE VOLUME) з цього знімка.

  5. Зупиніть екземпляр HVM. Зробіть знімок кореневого пристрою в новому екземплярі та створіть новий том ( TARGET VOLUME) з цього знімка.

  6. Використання консолі AWS:

    • Приєднати SOURCE VOLUMEдо нового екземпляра як /dev/xvdf.
    • Приєднати TARGET VOLUMEдо нового екземпляра як /dev/xvdg.

Процес перетворення

  1. SSH до нового примірника та отримати root-доступ:

    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/*(Якщо ядро ​​PV ami відрізняється від нової машини HVM. Цей модуль використовується деякими службами 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. Тепер він повинен бути точним дублікатом вашої фотосистеми. Якщо все виглядає нормально, тепер ви можете видалити свій екземпляр PV, а також SOURCE VOLUME.


1
Чому ти просто не робиш rm -f /bootі cp -a /mnt/source/boot /mnt/target?
michelem

@Michelem, якщо я добре пам'ятаю, я спробував це зробити в першу чергу. Машина не завантажувалася.
tolgamorf

1
@tolgamorf Будь-який шанс оновити відповідь, щоб відобразити це?
Dan Tenenbaum

2
Ці вказівки були дуже корисні (і працювали для мене !!), але я маю останню пропозицію. Оскільки в початковому питанні було зроблено HVM AMI, не залишайте цей крок неявним, додайте останній крок зупинки екземпляра та створення AMI з нього (а потім припинення екземпляра). Крім того, у мене були цілком ті самі проблеми, що і в @DanGravell, і я не використовую магнітне сховище, тому це можуть бути звичайні підводні камені, які можна було б вирішити у відповіді.
Дан Тененбаум

1
Велике дякую! Це заощадило мені багато часу, відредагувало його, щоб очистити частину fstab, яка мене трохи збентежила. Остерігайтеся під час кроку (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. Створіть екземпляр за допомогою зображення PV. Внесіть / оновіть всі необхідні зміни.

  2. Створіть зображення з вищевказаного екземпляра.

  3. Знайдіть ідентифікатор знімка, який використовується вищевказаним AMI у розділі EC2> Elastic Block Store> Snapshot на консолі EC2.

    або якщо у вас є інструменти для налаштування api ec2:

    ec2-описуйте зображення ami-id_of_above_create_ami

    і знайдіть ідентифікатор знімка для ami

    .. Припущення для подальших кроків: Ваші клавіші ec2 та інструменти api встановлені та готові до використання:

  4. Зареєструйте новий HVM AMI за допомогою наведеного вище знімка: приклад:

ec2-register -a x86_64 -d '3.15.7-200.fc20.x86_64' -n 'Fedora_20_HVM_AMI' --sriov простий - тип віртуалізації hvm -s snap-b44feb18 --root-device-name / dev / sda1

де

  • -d - опис AMI
  • -n - ім'я AMI
  • -s - ідентифікатор знімка з кроку 3.
  • -а - архітектура
  • - для створення його hvm потрібен тип віртуалізації
  • --sriov призначений для розширення мереж, хоча це може бути зайвим, не впевнений.

Для отримання додаткової інформації:


2
Якщо я не зроблю щось не так, це не буде працювати для AMI, які обмежують типи примірників. Спробував перетворити офіційний паравіртуальний AMI MongoDB в HVM, і, хоча я міг створити HVM AMI, він не запустив з ним екземпляр HVM.
Метт Бекман

@MattBeckman Я думаю, що це стосується основної підтримки ядра / завантажувача, а не обмеження AMI. Вище працює для Fedora, але не для Amazon Linux. Там вам доведеться пройти шлях, як оригінально запропонував Джефф Струнк.
Аншу Пратеек

1
Це спрацювало @AnshuPrateek
Атмеш Мішра

2

Зробити це можна зсередини веб-інтерфейсу AWS. Перейдіть до знімків , натисніть потрібний знімок, який ви хочете перетворити на hvm, і натисніть на дії, а потім створіть зображення . У спадному меню майстра створення зображень виберіть HVM .


9
Я просто спробував це, але, схоже, екземпляр не завантажиться належним чином. Він просто перебуває в зупиненому стані сам по собі, через кілька моментів після того, як я його запускаю.
яви

1

Спробувавши всі запропоновані тут пропозиції, жодна з яких не працювала для мене, я знайшов чудовий запис у цьому блозі за посиланням https://www.opswat.com/blog/aws-2015-why-you-need-switch- пв-хвм .

Елементами (деталями) процедури є:

  1. Встановіть grubна екземпляр PV, який потрібно перенести (джерело джерела).

  2. Зробіть попереджувальний знімок кореневого тома на джерельному екземплярі (джерело об'єму, SV).

  3. Створіть тимчасовий екземпляр HVM, який перемістить обсяг.

    1. Я використовував екземпляр Amazon Linux
  4. Створіть цільовий об'єм (DV) і додайте і це, і SV до тимчасового примірника.

    1. DV повинен бути не менше, ніж SV.

    2. Приєднайте SV як /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. Змініть розмір до мінімального розміру FS і використовуйте 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. Скопіювати SV на 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. Встановіть grubу завантажувальний блок DV

    1. Тимчасово створюйте файли пристрою на DV: mount /dev/xvdg1 /mnt; cp -a /dev/xvdg /dev/xvdg1 /mnt/dev/

    2. Встановити файли grub:

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

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

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

    1. Встановіть grub у середовищі chroot:

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

    device (hd0) /dev/xvdg

    root (hd0,0)

    setup (hd0)

    ARNIE

  7. Внісши деякі інші незначні зміни в томі призначення, додайте гучність і зробіть з нього AMI.

    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, і з цього оснащення створіть зображення AMI.

  8. Запустіть екземпляр HVM з цього HMI. Це ваш переселений екземпляр.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.