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


82

Вопрос:

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

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


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.

Это решение сработало для меня. Не забудьте воссоздать DEVNAMEпеременную после chrootкоманды.
Джастин Ли
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.