Amazon EC2: как преобразовать существующий PV AMI в HVM
Вопрос:
Как мне использовать новые классы AWS EC2 (r3, i2) с моим существующим AMI без воссоздания всей системы?
Новые классы EC2 поддерживают только виртуализацию на основе HVM, но у меня есть только образы AMI PVM.
1 ответ
Ответ:
Запустите Ubuntu HVM linux, любую версию, новую
Запустите Ubuntu / с моим существующим AMI / PVM linux и установите на них пакеты grub:
apt-get install grub-pc grub-pc-bin grub-legacy-ec2 grub-gfxpayload-lists
Стоп PVM Linux
Отключить корневой раздел (/dev/sda1) в Linux PVM
Присоедините корневой раздел PVM linux к запуску HVM linux, например: /dev/sdf
На HVM Linux:
mkdir -p /mnt/xvdf && mount /dev/xvdf /mnt/xvdf
rsync -avzXA /boot/ /mnt/xvdf/boot/
mount -o bind /dev /mnt/xvdf/dev && mount -o bind /dev/pts /mnt/xvdf/dev/pts && mount -o bind /proc /mnt/xvdf/proc && mount -o bind /sys /mnt/xvdf/sys
chroot /mnt/xvdf
grub-install --no-floppy --recheck --force /dev/xvdf
update-grub2
выходной chroot: CTRL+D
остановить HVM Linux
отсоединить / dev / sda1 исходный корень И отсоединить / dev / sdf корень PVM
присоединить корень PVM к HVM linux как / dev / sda1
Запустите HVM Linux, вуаля!
Создайте новый образ AMI из запущенного Linux HVM, он будет виртуализирован HVM.
Ответ от @divyenduz работает, но требует некоторой очистки и разъяснения для современного (примерно 2019 г.) AWS EC2. Важно отметить, что современные классы экземпляров по-разному переводят имя устройства.
Вот мои измененные шаги.
Для наглядности узлами являются:
- Исходный узел PVM, который вы хотите обновить до HVM, - "PVM01".
- Новый узел HVM, на который вы перенесете корневой диск PVM01, будет "HVM01".
ПЕРЕД ПРОДОЛЖЕНИЕМ: сделайте резервную копию исходного узла PVM01
Установите необходимые компоненты на узле PVM01
установить пакеты grub на PVM01
apt-get install grub-pc grub-pc-bin grub-legacy-ec2 grub-gfxpayload-lists
Остановить узел PVM01
- Создать снимок / dev / sda1
- ИЛИ создать AMI всего узла
- Создайте снимок исходного корневого тома на PVM01 и создайте новый том из этого снимка
- Создайте привязку / dev / sda1 на PVM01
- Создать объем из этой оснастки
- Обозначьте каждый ресурс соответствующим образом
- Название тэга; Значение: pvm01:/dev/sda1: снимок-для-преобразования-в-hvm:2019-07-01
- Так далее
- create-instance: новый экземпляр Ubuntu HVM "HVM01". Любой экземплярный класс должен работать; однако имя устройства может быть другим, см. примечания ниже
- Я использовал Bionic Ubuntu 18.04 HVM AMI ID ami-0a313d6098716f372 и класс экземпляра C5.XLARGE
Подключите корневой раздел PVM01 (новый том с предыдущего шага) к новому HVM01 /dev/sdf
- ПРИМЕЧАНИЕ. Более старые классы экземпляров, такие как C3, преобразуют имя тома в /dev/xvdf.
- ПРИМЕЧАНИЕ. Новые классы экземпляров, такие как C5, преобразуют имя тома в / dev / nvme1.
- В более новых классах экземпляров корневой том будет / dev / nvme0 - ZERO
- В более новых классах экземпляров прикрепленный вторичный том будет / dev / nvme1 - ONE
- Запишите имя подключенного тома.
ssh PVM01 sudo fdisk -l
На HVM01:
# For xvdf, e.g. on C3.XLARGE DEVNAME=xvdf1 # For nvme, e.g. on C5.XLARGE DEVNAME=nvme1n1 mkdir -p /mnt/${DEVNAME} && mount /dev/${DEVNAME} /mnt/${DEVNAME} rsync -avzXA /boot/ /mnt/${DEVNAME}/boot/ mount -o bind /dev /mnt/${DEVNAME}/dev && mount -o bind /dev/pts /mnt/${DEVNAME}/dev/pts && mount -o bind /proc /mnt/${DEVNAME}/proc && mount -o bind /sys /mnt/${DEVNAME}/sys chroot /mnt/${DEVNAME} grub-install --no-floppy --recheck --force /dev/${DEVNAME} update-grub2
Выйдите из chroot с помощью CTRL+D
- Остановить HVM01
- Отсоедините оба тома
- отсоединить / dev / nvme0 корень PVM01
- ПРИМЕЧАНИЕ. Это будет / dev / sda1 в классе экземпляра C3.
- отсоединить /dev/${DEVNAME} (DEVNAME из приведенного выше скрипта)
- отсоединить / dev / nvme0 корень PVM01
- прикрепите корневой том PVM01 к HVM01 как / dev / sda1
- И снова имя / dev / sda1 находится в консоли; это имя будет переведено в / dev / nvme0 или /dev/xvda1 в зависимости от того, насколько современен класс экземпляра
- Запустить HVM01
- ДОПОЛНИТЕЛЬНО: Создайте новый образ AMI из уже запущенного HVM01, он будет виртуализирован HVM.