Назад | Перейти на главную страницу

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

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

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

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

Обновить

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

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

Подготовка

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

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

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

  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.

TL; DR:

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> Elastic Block Store> Snapshot в консоли EC2.

    или если у вас настроены инструменты api ec2:

    ec2-description-images ami-id_of_above_created_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 simple --virtualization-type hvm -s snap-b44feb18 --root-device-name / dev / sda1

где

  • -d - описание AMI
  • -n - имя AMI
  • -s - это идентификатор снимка из шага 3.
  • -a это архитектура
  • --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. Измените размер до минимального размера FS SV и используя dd изображение на DV.

    1. Очистите ФС исходного тома: 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. Разверните ФС на новом разделе: 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. Обозначьте новую корневую файловую систему с помощью e2label /dev/xvdg1 /

    2. Отключите DV от временного экземпляра, отсоедините SV и DV от временного экземпляра.

    3. Сделайте снимок DV и из этого снимка создайте образ AMI.

  8. Запустите экземпляр HVM из этого HMI. Это ваш перенесенный экземпляр.