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

82

Вопрос:

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

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

user3760692
источник
3
Просто попробовал это с CentOS, но в итоге в tep 10 появилась следующая ошибка: / dev / xvdf не имеет соответствующего диска BIOS.
Тобиас
В дополнение к тому, что сказал @ROMANARMY, я считаю, что ответ должен быть разбит на правильный ответ. Затем вы можете принять его, и вопрос не останется без ответа. См. Stackoverflow.com/help/self-answer
Тим
@Tobias Zander, у вас когда-нибудь это работало с CentOS?
dhempler 02 янв.15
1
@ dennis.hempler Мы не стали вкладывать много времени и просто создали новые экземпляры
Тобиас

Ответы:

77

Ответ:

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

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

  3. Остановить PVM linux

  4. Отсоединить корневой раздел (/ dev / sda1) в PVM linux

  5. Прикрепите корневой раздел PVM linux к где-нибудь запущенному HVM linux, например: / dev / sdf

  6. В HVM linux: mkdir -p /mnt/xvdf && mount /dev/xvdf /mnt/xvdf

  7. rsync -avzXA /boot/ /mnt/xvdf/boot/

  8. 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

  9. chroot /mnt/xvdf

  10. grub-install --no-floppy --recheck --force /dev/xvdf

  11. update-grub2

  12. выйти из chroot: CTRL + D

  13. остановить HVM Linux

  14. отсоединить / dev / sda1 оригинальный корень И отсоединить / dev / sdf корень PVM

  15. прикрепите корень PVM к HVM linux как / dev / sda1

  16. Запустите HVM linux, вуаля!

  17. Создайте новый образ AMI из запущенного HVM linux, он будет виртуализирован HVM.

Дивендуз
источник
Работал отлично ... как только я создал экземпляр HVM в той же зоне доступности, что и том PVM.
Cloudurfin
2
При запуске grub-install я получаю следующее предупреждение: warning: Embedding is not possible. GRUB can only be installed in this setup by using blocklists. However, blocklists are UNRELIABLE and their use is discouraged.. /usr/sbin/grub-bios-setup: error: will not proceed with blocklists.Тогда все выглядит хорошо, но не загружается и не дает мне никаких подсказок, почему не загружается.
Пауло Невес
3
У меня это сработало отлично, большое вам спасибо! Я получил пугающие предупреждения о личинках, о которых Пауло Невес сообщил выше, но мой новый экземпляр все равно загрузился нормально.
GaryO
У меня есть экземпляр AMI Linux PVM, и я пытаюсь перенести его на новый экземпляр HVM AMI Linux. Я пытался применить ваши решения, но застрял на шаге 10. Не мог бы кто-нибудь уточнить, как это сделать для нового экземпляра AMI Linux вместо Ubuntu? Благодаря!
Толгаморф
1
Экземпляр недоступен при использовании более нового типа экземпляра (например, C5). Нет xvd*на этих экземплярах, есть только nvme*наименования. Замена xvdна правильный nvmeне работает. :(
Alex
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
      • ПРИМЕЧАНИЕ. Это будет / dev / sda1 в классе экземпляра C3.
    • отсоединить / dev / $ {DEVNAME} (DEVNAME из приведенного выше скрипта)
  10. прикрепите корневой том PVM01 к HVM01 как / dev / sda1
    • И снова имя / dev / sda1 находится в консоли; это имя будет переведено в / dev / nvme0 или / dev / xvda1 в зависимости от того, насколько современен класс экземпляра
  11. Запустить HVM01
  12. ДОПОЛНИТЕЛЬНО: Создайте новый образ AMI из уже запущенного HVM01, он будет виртуализирован HVM.
JDS
источник
Это решение сработало для меня. Не забудьте воссоздать DEVNAMEпеременную после chrootкоманды.
Джастин Ли