Amazon EC2: как преобразовать существующий PV AMI в HVM

Вопрос:

Как я должен использовать новые классы AW2 EC2 (r3, i2) с моим существующим AMI без воссоздания всей системы?

Новые классы EC2 поддерживают только виртуализацию на основе HVM, но у меня есть только изображения PMM AMI.

Ответ 1

Ответ:

  • Запустите Ubuntu HVM linux, любую версию, новую

  • Запустите Ubuntu/с моим существующим потоком AMI/PVM и установите на них пакеты grub: apt-get install grub-pc grub-pc-bin grub-legacy-ec2 grub-gfxpayload-lists

  • Остановить PVM linux

  • Отсоедините раздел root (/dev/sda1) в PVM linux

  • Прикрепите корневой раздел Linux PVM к запуску 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

  • exit chroot: CTRL + D

  • остановить HVM Linux

  • отсоединить/dev/sda1 исходный корень И отсоединить /dev/sdf корень PVM

  • присоединить PVM root к HVM linux как /dev/sda 1

  • Запустите HVM linux, voilà!

  • Создайте новый образ AMI из работающего HVM-Linux, он будет виртуализирован с использованием HVM.

Ответ 2

Ответ от @divyenduz работает, но нуждается в некоторой очистке и уточнении для современного (около 2019 года) AWS EC2. Важно отметить, что современные классы экземпляров переводят имя устройства по-разному.

Вот мои измененные шаги.

Для наглядности узлами являются:

  • Исходный узел PVM, который вы хотите обновить до HVM - это "PVM01"
  • Новый узел HVM, на который вы будете мигрировать корневой диск PVM01, называется "HVM01".

ПЕРЕД ОБРАБОТКОЙ: Резервное копирование оригинального узла PVM01

  1. Установите необходимые компоненты на узле PVM01

    • установить пакеты grub на PVM01

      apt-get install  grub-pc  grub-pc-bin grub-legacy-ec2 grub-gfxpayload-lists
      
  2. Остановить узел PVM01

    • Создать снимок /dev/sda1
    • ИЛИ создать AMI всего узла
  3. Создайте снимок исходного корневого тома на PVM01 и создайте новый том из этого снимка
    • Создать оснастку /dev/sda1 на PVM01
    • Создать том из этой оснастки
    • Маркируйте каждый ресурс соответственно
      • Название тэга; Значение: pvm01: /dev/sda1: снимок для преобразования в hvm: 2019-07-01
      • Так далее
  4. create-instance: новый экземпляр Ubuntu HVM "HVM01". Любой экземпляр класса должен работать; однако имя устройства может быть другим, см. примечания ниже
    • Я использовал Bionic Ubuntu 18.04 HVM AMI ID ami-0a313d6098716f372 и экземпляр класса C5.XLARGE
  5. Подключите корневой раздел PVM01 (новый том из предыдущего шага) к новому HVM01/dev/sdf

    • ПРИМЕЧАНИЕ. Старые классы экземпляров, такие как C3, преобразуют имя тома в /dev/xvdf.
    • ПРИМЕЧАНИЕ. Новые классы экземпляров, такие как C5, преобразуют имя тома в /dev/nvme1.
      • В более новых классах экземпляров корневым томом будет /dev/nvme0 - ZERO
      • В более новых классах экземпляров присоединенный вторичный том будет /dev/nvme1 - ONE
    • Запишите имя подключенного тома устройства

    ssh PVM01 sudo fdisk -l

  6. На 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
    
  7. Выход из chroot с помощью CTRL + D

  8. Стоп HVM01
  9. Отсоедините оба тома
    • отключить /dev/nvme0 PVM01 root
      • ПРИМЕЧАНИЕ. Это будет /dev/sda1 в классе экземпляра C3
    • detach/dev/$ {DEVNAME} (скрипт DEVNAME из приведенного выше)
  10. присоедините корневой том PVM01 к HVM01 как /dev/sda1
    • Еще раз, имя /dev/sda1 находится в консоли; это имя будет переведено в /dev/nvme0 или /dev/xvda1 в зависимости от того, насколько современным является класс экземпляра.
  11. Запустить HVM01
  12. ДОПОЛНИТЕЛЬНО: Создайте новый образ AMI из ныне работающего HVM01, он будет виртуализирован HVM.