Можно ли создать AMI аппаратной виртуальной машины (HVM) из существующего паравиртуального (PV) AMI.
Первоначально я думал о том, чтобы запустить новый экземпляр PV и использовать ec2-create-image
команда для создания нового образа с указанием HVM в качестве типа вирутализации. Тем не мение, ec2-create-image
не имеет параметра командной строки для указания типа виртуализации.
Есть ли другой способ сделать это?
AWS включил эту функцию в API EC2. Он доступен как --virtualization-type
возможность aws ec2 register-image
в новом awscli на основе Boto.
Да! К сожалению, прямого способа сделать это нет. Кроме того, для некоторых экземпляров PV могут потребоваться модификации ядра и загрузчика.
ec2-create-image
на экземпляре HVM.Если это не сработает, то перед шагом 5 вам нужно будет подключить этот том к работающему экземпляру, настроить chroot и установить ядро и загрузчик для вашего дистрибутива. Вы также можете очистить журналы и любой кэш облачной инициализации.
В моем случае мне пришлось выполнить преобразование вручную, поскольку экземпляр, который я создаю с помощью aws ec2 register-image
не загрузился. Мое решение основано на эта почта на Форум AWS EC2.
Убедитесь, что все тома находятся в одной зоне доступности.
Подключитесь по SSH к вашему PV-компьютеру, с которого вы хотите выполнить миграцию, и примените все обновления, а затем выйдите из системы.
Перейдите в консоль AWS и запустите новый экземпляр HVM, выбрав тот же базовый AMI, из которого была создана PV-система (в моем случае - 64-разрядный AMI Linux от Amazon).
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
.
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:
Создайте экземпляр, используя PV Image. Внесите / обновите любые изменения, которые хотите.
Создайте изображение из приведенного выше экземпляра.
Найдите идентификатор снимка, используемый указанным выше AMI, в разделе EC2> Elastic Block Store> Snapshot в консоли EC2.
или если у вас настроены инструменты api ec2:
ec2-description-images ami-id_of_above_created_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
где
Чтобы получить больше информации:
Вы можете сделать это из веб-интерфейса AWS. Перейдите к снимки, щелкните нужный снимок, который хотите преобразовать в hvm, и щелкните действия а потом создать изображение. В раскрывающемся списке мастера создания изображений выберите HVM.
Попробовав все приведенные здесь предложения, ни одно из которых у меня не сработало, я нашел отличную запись в блоге на эту тему по адресу https://www.opswat.com/blog/aws-2015-why-you-need-switch-pv-hvm .
Элементами (деталями) процедуры являются:
Установить grub
на экземпляре PV, который необходимо перенести (исходный экземпляр).
Сделайте предупредительный снимок корневого тома на исходном экземпляре (исходный том, SV).
Создайте временный экземпляр HVM, который будет переносить том.
Создайте целевой том (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.
Очистите ФС исходного тома: 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
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. Это ваш перенесенный экземпляр.