Amazon EC2: cómo convertir una AMI de PV existente a HVM

82

Pregunta:

¿Cómo debo utilizar las nuevas clases de AWS EC2 (r3, i2) con mi AMI existente sin volver a crear toda la configuración del sistema?

Las nuevas clases de EC2 solo admiten la virtualización basada en HVM, pero solo tengo imágenes de PVM AMI.

usuario3760692
fuente
3
Intenté esto con CentOS pero terminé en el paso 10 con el siguiente error: / dev / xvdf no tiene ninguna unidad de BIOS correspondiente.
Tobias
Además de lo que dijo @ROMANARMY, creo que la respuesta debería dividirse en una respuesta adecuada. Entonces puedes aceptarlo para que la pregunta no aparezca sin respuesta. Ver stackoverflow.com/help/self-answer
Tim
@Tobias Zander, ¿alguna vez consiguió que esto funcionara con CentOS?
dhempler
1
@ dennis.hempler No invertimos mucho más tiempo y acabamos de crear nuevas instancias
Tobias

Respuestas:

77

Responder:

  1. Inicie un Linux HVM de Ubuntu, cualquier versión, nueva

  2. Inicie un Ubuntu / con mi linux AMI / PVM existente e instale los paquetes grub en ellos: apt-get install grub-pc grub-pc-bin grub-legacy-ec2 grub-gfxpayload-lists

  3. Detener PVM linux

  4. Separe la partición raíz (/ dev / sda1) en PVM linux

  5. Adjunte la partición raíz de PVM linux para ejecutar HVM linux en algún lugar, por ejemplo: / dev / sdf

  6. En 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. salir de chroot: CTRL + D

  13. detener HVM Linux

  14. separar / dev / sda1 raíz original Y separar / dev / sdf PVM root

  15. adjunte PVM root a HVM linux como / dev / sda1

  16. Inicie HVM linux, ¡voilà!

  17. Cree una nueva imagen de AMI desde el Linux HVM en ejecución, será HVM virtualizado.

divyenduz
fuente
Funcionó perfectamente ... una vez que creé la instancia de HVM en la misma zona de disponibilidad exacta que el volumen de PVM.
cloudsurfin
2
Recibo la siguiente advertencia al ejecutar 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.Entonces, todo se ve bien pero no arranca ni me da ninguna pista de por qué no arranca.
Paulo Neves
3
Esto funcionó perfectamente para mí, ¡muchas gracias! Recibí las aterradoras advertencias de grub que Paulo Neves informó anteriormente, pero mi nueva instancia arrancó bien de todos modos.
GaryO
Tengo una instancia de PVM de AMI Linux y estoy tratando de migrarla a una nueva instancia de HVM AMI Linux. Traté de aplicar sus soluciones pero estoy atascado en el paso 10. ¿Podría alguien explicar cómo hacer esto para una nueva instancia AMI Linux en lugar de Ubuntu? ¡Gracias!
tolgamorf
1
No se puede acceder a la instancia cuando se usa un tipo de instancia más nuevo (como C5). No hay xvd*en estos casos, solo hay nvme*convenciones de nomenclatura. Reemplazar xvdcon el correcto nvmeno funciona. :(
Alex
2

La respuesta de @divyenduz funciona, pero necesita un poco de limpieza y aclaración para la AWS EC2 moderna (alrededor de 2019). Es importante destacar que las clases de instancias modernas traducen el nombre del dispositivo de manera diferente.

Aquí están mis pasos modificados.

Para mayor claridad, los nodos son:

  • El nodo PVM original que desea actualizar a HVM es "PVM01"
  • El nuevo nodo HVM al que migrará el disco raíz de PVM01 es "HVM01"

ANTES DE CONTINUAR: Realice una copia de seguridad del nodo original PVM01

  1. Instalar los requisitos previos en el nodo PVM01

    • instalar paquetes grub en PVM01

      apt-get install  grub-pc  grub-pc-bin grub-legacy-ec2 grub-gfxpayload-lists
      
  2. Detener nodo PVM01

    • Crear instantánea de / dev / sda1
    • O crea AMI de todo el nodo
  3. Cree una instantánea del volumen raíz original en PVM01 y cree un nuevo volumen a partir de esta instantánea
    • Crear complemento de / dev / sda1 en PVM01
    • Crea vol de este snap
    • Etiqueta cada recurso en consecuencia
      • Etiqueta: Nombre; Valor: pvm01: / dev / sda1: instantánea-para-conversión-a-hvm: 2019-07-01
      • Etc.
  4. create-instance: Nueva instancia de Ubuntu HVM "HVM01". Cualquier clase de instancia debería funcionar; sin embargo, el nombre del dispositivo puede ser diferente, consulte las notas a continuación
    • Usé Bionic Ubuntu 18.04 HVM AMI ID ami-0a313d6098716f372 y la clase de instancia C5.XLARGE
  5. Adjunte la partición raíz PVM01 (nuevo volumen del paso anterior) al nuevo HVM01 / dev / sdf

    • NOTA : Las clases de instancia más antiguas, como C3, traducirán el nombre del volumen a / dev / xvdf
    • NOTA : las clases de instancia más nuevas, como C5, traducirán el nombre del volumen a / dev / nvme1
      • En las clases de instancia más nuevas, el volumen raíz será / dev / nvme0 - CERO
      • En las clases de instancia más nuevas, el volumen secundario adjunto será / dev / nvme1 - ONE
    • Tome nota del nombre del dispositivo de volumen adjunto

    ssh PVM01 sudo fdisk -l

  6. En 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. Salga de chroot con CTRL + D

  8. Detener HVM01
  9. Separar ambos volúmenes
    • separar / dev / nvme0 PVM01 root
      • NOTA: Este sería / dev / sda1 en una clase de instancia C3
    • detach / dev / $ {DEVNAME} (DEVNAME del script anterior)
  10. adjuntar el volumen raíz PVM01 a HVM01 como / dev / sda1
    • Una vez más, el nombre / dev / sda1 está en la consola; este nombre se traducirá a / dev / nvme0 o / dev / xvda1 dependiendo de qué tan moderna sea la clase de instancia
  11. Iniciar HVM01
  12. OPCIONAL: Cree una nueva imagen AMI a partir del HVM01 que se está ejecutando ahora, será HVM virtualizado.
JDS
fuente
Esta solución funcionó para mí. Recuerde volver a crear la DEVNAMEvariable después del chrootcomando.
Justin Lee