Создать 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 могут нуждаться в модификации ядра и загрузчика.
- Создайте том из вашего существующего PV AMI. Если это был ваш собственный PV AMI, вы можете сделать том из снимка. Если это сторонний AMI, вам нужно запустить экземпляр и сделать снимок.
- Запустите экземпляр HVM с любым AMI.
- Остановите этот экземпляр HVM.
- Отключите корневой том от этого экземпляра.
- Подключите том PV в качестве корневого тома (/dev/sda1 или / dev / sda, если он был разделен) к экземпляру HVM.
- Бежать
ec2-create-image
на экземпляре HVM. - Запустите другие экземпляры с вашим новым HVM AMI.
Если это не сработает, то перед шагом 5 вам нужно будет подключить этот том к работающему экземпляру, настроить chroot и установить ядро и загрузчик для вашего дистрибутива. Вы также можете очистить журналы и любой облачный init-кеш.
В моем случае я должен был выполнить преобразование вручную, так как экземпляр, который я создаю, используя aws ec2 register-image
не загрузился. Мое решение основано на этом посте на форуме AWS EC2.
подготовка
Убедитесь, что все тома находятся в одной зоне доступности.
SSH к вашей PV-машине, с которой вы хотите перейти и применить все обновления, затем выйдите из системы.
Перейдите на консоль AWS и запустите новый экземпляр HVM, выбрав тот же базовый AMI, из которого была создана PV-система (в моем случае - Amazon 64-bit Linux AMI).
SSH к этому новому экземпляру и примените все обновления, затем выйдите из системы.
Перейдите на консоль AWS и остановите экземпляр PV. Сделайте снимок корневого устройства и создайте новый том (
SOURCE VOLUME
) из этого снимка.Остановите экземпляр HVM. Сделайте снимок корневого устройства на новом экземпляре и создайте новый том (
TARGET VOLUME
) из этого снимка.Использование консоли 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, а также
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:
Создайте экземпляр, используя PV Image. Внесите / обновите любые изменения, которые вы хотите.
Создать изображение из приведенного выше экземпляра.
Найдите идентификатор снимка, используемый вышеуказанным AMI, в EC2 > Хранилище эластичных блоков> Снимок в консоли EC2.
или если у вас есть настройки eci api:
ec2-description-images ami-id_of_above_created_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 - тип виртуализации 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.
Элементы (детали) процедуры:
устанавливать
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
Изменение размера до минимального размера ФС 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>
Разверните FS на новый раздел:
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
Пометьте новый корневой файл FS с помощью
e2label /dev/xvdg1 /
Отключите DV от временного экземпляра, отсоедините SV и DV от временного экземпляра.
Сделайте привязку к DV, и из этого снимка создайте изображение AMI.
Запустите экземпляр HVM из этого HMI. Это ваш перенесенный экземпляр.