
Возможно ли создать 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 могут потребовать модификации ядра и загрузчика.
- Создайте том из вашего существующего PV AMI. Если это был ваш собственный PV AMI, вы можете создать том из снимка. Если это сторонний AMI, вам нужно будет запустить экземпляр и сделать снимок.
- Запустите экземпляр HVM с любым AMI.
- Остановите этот экземпляр HVM.
- Отсоедините корневой том от этого экземпляра.
- Подключите том PV в качестве корневого тома (/dev/sda1 или /dev/sda, если он был разбит на разделы) к экземпляру HVM.
- Запуск
ec2-create-image
на экземпляре HVM. - Запустите другие экземпляры с помощью вашего нового HVM AMI.
Если это не сработает, то перед шагом 5 вам нужно будет присоединить этот том к работающему экземпляру, настроить chroot и установить ядро и загрузчик для вашего дистрибутива. Вы также можете захотеть очистить журналы и любой кэш cloud-init.
решение2
В моем случае мне пришлось сделать конвертацию вручную, так как экземпляр, который я создаю с помощью, aws ec2 register-image
не загружался. Мое решение основано наэта почтанаФорум AWS EC2.
Подготовка
Убедитесь, что все тома находятся в одной зоне доступности.
Подключитесь по SSH к вашей фотоэлектрической машине, с которой вы хотите выполнить миграцию, и примените все обновления, затем выйдите из системы.
Перейдите в AWS Console и запустите новый экземпляр HVM, выбрав тот же базовый AMI, из которого была создана фотоэлектрическая система (в моем случае это Amazon 64-битный Linux AMI).
Подключитесь к новому экземпляру по протоколу SSH и примените все обновления, затем выйдите из системы.
Перейдите в AWS Console и остановите экземпляр PV. Сделайте снимок корневого устройства и создайте новый том (
SOURCE VOLUME
) из этого снимка.Остановите экземпляр HVM. Сделайте снимок корневого устройства на новом экземпляре и создайте новый том (
TARGET VOLUME
) из этого снимка. Запустите экземпляр HVM (новый) снова.Использование консоли AWS:
- Присоединить
SOURCE VOLUME
к новому экземпляру как/dev/xvdf
. - Присоединить
TARGET VOLUME
к новому экземпляру как/dev/xvdg
.
Процесс преобразования
Подключитесь к новому экземпляру по SSH и получите права root:
sudo su
Смонтируйте исходный и целевой диски.
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*
для просмотра дисков.Резервное копирование
/lib/modules/*
(Если ядро PV ami отличается от новой машины HVM. Этот модуль используется некоторыми сервисами AWS.)Удалить все, кроме
/boot
целевого тома:cd /mnt/target && ls | grep -v boot | xargs rm -Rf
Удалить
/boot
на исходном томе:rm -Rf /mnt/source/boot
Скопируйте данные исходного тома в целевой том, сохранив все атрибуты:
rsync -aAXHPv /mnt/source/ /mnt/target
Отредактируйте
/mnt/target/etc/fstab
раздел/
, чтобы он ссылался наTARGET VOLUME
при монтировании на его конечном месте на шаге (8). Либо используя метку, либо просто что-то рядом:/dev/xvda1 / ext4 defaults,barrier=0 1 1
Затем восстановите /lib/modules/
резервную копию, созданную на шаге 3. (Если ядро PV ami отличается от ядра новой машины HVM.)
Остановите систему и отсоедините все тома с помощью консоли AWS. Присоедините
TARGET VOLUME
к новому экземпляру как/dev/xvda
.Обязательно запишите, где было смонтировано исходное корневое устройство. В большинстве случаев это должно быть
/dev/xvda
.Запустите свой экземпляр 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:
Создайте экземпляр с помощью PV Image. Внесите/обновите любые изменения, которые вы хотите.
Создайте изображение из приведенного выше примера.
Найдите идентификатор снимка, используемый указанным выше AMI, в разделе EC2 > Elastic Block Store > Snapshot в консоли EC2.
или если у вас настроены инструменты ec2 api:
ec2-describe-images ami-id_выше_созданных_ami
и найдите идентификатор снимка для ami
.. Предположения для дальнейших шагов: Ваши ключи ec2 и инструменты API настроены и готовы к использованию:
Зарегистрируйте новый 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.
Элементами (деталями) процедуры являются:
Установите
grub
на экземпляр PV, который необходимо перенести (исходный экземпляр).Сделайте предупредительный снимок корневого тома на исходном экземпляре (исходный том, SV).
Создайте временный экземпляр HVM, который перенесет том.
- Я использовал экземпляр Amazon Linux
Создайте целевой том (DV) и присоедините его и SV к временному экземпляру.
DV должен быть по крайней мере такого же размера, как SV.
Прикрепите SV как
/dev/{sd,xvd}f
, а DV как/dev/{sd,xvd}g
.Разделите DV:
parted /dev/xvdg --script 'mklabel msdos mkpart primary 1M -1s print quit'
partprobe /dev/xvdg
udevadm settle
Измените размер FS SV до минимального и с помощью
dd
образа перенесите его на DV.Очистите FS исходного тома:
e2fsck -f /dev/xvdf
Минимизировать то же самое:
resize2fs -M /dev/xvdf
Посмотрите на вывод resize2fs (например
Resizing the file system on /dev/xvdf to 269020 (4k) blocks
) и запишите его для следующего шага.Дублировать 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>
Расширьте ФС на новом разделе:
resize2fs /dev/xvdg1
Установить
grub
в загрузочный блок DVВременно создайте файлы устройства на DV:
mount /dev/xvdg1 /mnt; cp -a /dev/xvdg /dev/xvdg1 /mnt/dev/
Установите файлы grub:
rm -f /mnt/boot/grub/*stage*
cp /mnt/usr/*/grub/*/*stage* /mnt/boot/grub/
rm -f /mnt/boot/grub/device.map
- Установите grub в chroot-среде:
cat << ARNIE | chroot /mnt grub --batch
device (hd0) /dev/xvdg
root (hd0,0)
setup (hd0)
ARNIE
Сделав еще несколько незначительных изменений в целевом томе, сделайте снимок тома и создайте из него AMI.
Очистите временные файлы устройства:
rm -f /mnt/dev/xvdg /mnt/dev/xvdg1
В
/mnt/boot/grub/grub.conf
, изменитеroot (hd0)
наroot (hd0,0)
, добавьте (или заменитеconsole=*
)console=ttyS0
в строку ядра, и при необходимости заменитеroot=*
наroot=LABEL=/
в строке ядраВ
/mnt/etc/fstab
, убедитесь, что строка корневой FS содержит маркированную ссылку, например
LABEL=/ / ext4 defaults,noatime 1 1
Пометьте новую корневую файловую систему как
e2label /dev/xvdg1 /
Отключите DV от временного экземпляра, отключите SV и DV от временного экземпляра.
Сделайте снимок DV и создайте из него изображение AMI.
Запустите экземпляр HVM из этого HMI. Это ваш перенесенный экземпляр.