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

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

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

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

5 ответов

Обновить

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-кеш.

В моем случае я должен был выполнить преобразование вручную, так как экземпляр, который я создаю, используя 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,

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 предназначен для включения расширенных сетей, хотя это может быть избыточно, не уверен.

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

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

Перепробовав все приведенные здесь предложения, ни одно из которых не помогло мне, я нашел отличную запись в блоге на эту тему по адресу 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. Изменение размера до минимального размера ФС SV и использование 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. Это ваш перенесенный экземпляр.

Другие вопросы по тегам