Создать AWS HVM Linux AMI из существующего паравиртуального AMI Linux

38

Можно ли создать аппаратную виртуальную машину (HVM) AMI из существующего паравиртуального (PV) AMI.

Сначала я думал о том, чтобы запустить новый экземпляр PV и использовать ec2-create-imageкоманду для создания нового образа, указав HVM в качестве типа вирулизации. Тем ec2-create-imageне менее, не имеет параметра командной строки для указания типа виртуализации.

Есть ли другой способ сделать это?

javacavaj
источник

Ответы:

22

Обновить

AWS включил эту функцию в API EC2. Он доступен в качестве --virtualization-typeопции aws ec2 register-imageв новом awscli на основе Бото.

Оригинальный ответ

Да! К сожалению, прямого пути для этого нет. Кроме того, некоторые экземпляры 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. Спасибо.
Толгаморф
Если у вас есть работающий экземпляр PV, вы можете преобразовать его в HVM, запустив aws ec2 register-imageфлаг --virtualization-type на снимке изображения PV. Смотрите aws ec2 register-image helpподробности.
Джефф Странк
2
Я создал изображение HVM из моего экземпляра PV, используя aws ec2 register-image. Затем я запустил новый экземпляр HVM из этого образа. Однако система не загружается.
Толгаморф
Покопавшись на форуме aws ec2, я нашел решение, в котором преобразование выполняется путем замены файлов вручную. Я скоро напишу ответ.
Толгаморф
@ tolgamorf Ты вообще помнишь, что делал? Я с той же проблемой.
Дмитрий Минковский
13

В моем случае мне пришлось выполнить преобразование вручную, так как экземпляр, который я создал с помощью aws ec2 register-image, не загрузился. Мое решение основано на этом посте на форуме AWS EC2 .

подготовка

Убедитесь, что все тома находятся в одной зоне доступности.

  1. SSH к вашей PV-машине, с которой вы хотите перейти и применить все обновления, затем выйдите из системы.

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

  3. SSH к этому новому экземпляру и примените все обновления, затем выйдите из системы.

  4. Перейдите на консоль AWS и остановите экземпляр PV. Сделайте снимок корневого устройства и создайте новый том ( 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.

tolgamorf
источник
1
Почему бы тебе просто не сделать rm -f /bootа cp -a /mnt/source/boot /mnt/target?
Мишелем
@ Мичелем, если я правильно помню, я попытался сделать это в первую очередь. Машина не загружалась.
Толгаморф
1
@tolgamorf Есть ли шанс обновить ответ, чтобы отразить это?
Дэн Тененбаум
2
Эти инструкции были действительно полезны (и сработали для меня!), Но у меня есть одно последнее предложение. Поскольку первоначальный вопрос был о создании AMI HVM, не оставляйте этот шаг неявным, добавьте последний шаг - остановка экземпляра и создание из него 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 Image. Внесите / обновите любые изменения, которые вы хотите.

  2. Создать изображение из приведенного выше экземпляра.

  3. Найдите идентификатор снимка, используемый вышеуказанным AMI, в EC2> Хранилище эластичных блоков> Снимок в консоли EC2.

    или если у вас есть настройки eci api:

    ec2-description-images ami-id_of_above_created_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 simple - тип виртуализации hvm -s snap-b44feb18 - имя-root-устройства / dev / sda1

где

  • -d это описание AMI
  • -n это имя AMI
  • -s - идентификатор снимка с шага 3.
  • - это архитектура
  • --virtualization-type требуется для того, чтобы сделать его HVM
  • --sriov предназначен для включения расширенных сетей, хотя это может быть избыточно, не уверен.

За дополнительной информацией:

Аншу Пратик
источник
2
Если я что-то не так делаю, это не сработает для рыночных AMI, которые ограничивают типы экземпляров. Попытался преобразовать официальный паравиртуальный AMI MongoDB в HVM, и хотя я мог создать AMI HVM, он не запустил с ним экземпляр HVM.
Мэтт Бекман
@ MattBeckman Я думаю, что речь идет о базовой поддержке ядра / загрузчика, а не об ограничении AMI. Выше работает для Fedora, но не для Amazon Linux. Там вы должны идти по пути, предложенному Джеффом Странком.
Аншу Пратик,
1
Это сработало @AnshuPrateek
Атмеш Мишра
2

Вы можете сделать это из веб-интерфейса AWS. Перейдите к снимкам , выберите нужный снимок, который вы хотите преобразовать в hvm, и нажмите « Действия», а затем создайте изображение . В раскрывающемся списке в мастере создания изображений выберите HVM .

Джастин
источник
9
Я только что попробовал это, но похоже, что экземпляр не будет загружаться должным образом. Он просто сам останавливается, через несколько секунд после того, как я его запустил.
ovi
1

Перепробовав все приведенные здесь предложения, ни одно из которых не помогло мне, я нашел отличную запись в блоге на эту тему по адресу https://www.opswat.com/blog/aws-2015-why-you-need-switch-. PV-HVM .

Элементы (детали) процедуры:

  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 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. Это ваш перенесенный экземпляр.

MadHatter поддерживает Монику
источник