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

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

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

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

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

решение1

Обновлять

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

решение2

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

Подготовка

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

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

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

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

  4. Перейдите в AWS Console и остановите экземпляр PV. Сделайте снимок корневого устройства и создайте новый том ( SOURCE VOLUME) из этого снимка.

  5. Остановите экземпляр HVM. Сделайте снимок корневого устройства на новом экземпляре и создайте новый том ( TARGET VOLUME) из этого снимка. Запустите экземпляр HVM (новый) снова.

  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. Если все выглядит нормально, вы можете удалить свой экземпляр PV, а также SOURCE VOLUME.

решение3

Краткий обзор:

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.

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

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

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

решение4

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

Связанный контент