Amazon EC2: як перетворити існуючий PV AMI на HVM


82

Питання:

Як я повинен використовувати нові класи AWS EC2 (r3, i2) зі своїм існуючим AMI, не відтворюючи всі налаштування системи?

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


3
Просто спробував це з CentOS, але в кінцевому підсумку ins tep 10 із такою помилкою: / dev / xvdf не має жодного відповідного диска BIOS.
Тобіас

Крім того, що сказав @ROMANARMY, я вважаю, що відповідь має бути розділена на правильну відповідь. Тоді ви можете прийняти його, щоб запитання не відображалося як без відповіді. Дивіться stackoverflow.com/help/self-answer
Тім

@Tobias Zander Ви коли-небудь працювали з CentOS?
dhempler

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. На Linux HVM: 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. detach / dev / sda1 оригінальний корінь І відокремити / dev / sdf корінь PVM

  15. підключити корінь PVM до HVM linux як / dev / sda1

  16. Запустіть HVM linux, voilà!

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


Працював ідеально ... одного разу я створив екземпляр HVM у тій самій зоні доступності, що й обсяг PVM.
cloudsurfin

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не працює. :(
Олексій

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
    • Створіть vol з цього оснащення
    • Позначте кожен ресурс відповідно
      • Тег: Ім'я; Значення: pvm01: / dev / sda1: моментальний знімок для перетворення в hvm: 2019-07-01
      • І т. Д
  4. create-instance: Новий екземпляр HVM Ubuntu "HVM01". Будь-який клас екземпляра повинен працювати; однак назва пристрою може бути іншою, див. примітки нижче
    • Я використовував Bionic Ubuntu 18.04 HVM AMI ID ami-0a313d6098716f372 та клас екземпляра C5.XLARGE
  5. Приєднайте кореневий розділ PVM01 (новий том із попереднього кроку) до нового HVM01 / dev / sdf

    • ПРИМІТКА . Старіші класи екземплярів, такі як C3, перекладуть ім'я тому в / dev / xvdf
    • ПРИМІТКА . Нові класи екземплярів, такі як C5, перекладуть ім'я тому в / dev / nvme1
      • У нових класах екземплярів кореневий vol буде / dev / nvme0 - ZERO
      • У нових класах екземплярів додатковий додатковий vol буде / 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.