Cree una AMI de Linux para AWS HVM a partir de una AMI de Linux paravirtual existente

Cree una AMI de Linux para AWS HVM a partir de una AMI de Linux paravirtual existente

¿Es posible crear una AMI de máquina virtual de hardware (HVM) a partir de una AMI paravirtual (PV) existente?

Inicialmente pensé en iniciar una nueva instancia PV y usar el ec2-create-imagecomando para crear una nueva imagen mientras especificaba HVM como tipo de virutalización. Sin embargo, ec2-create-imageno tiene un parámetro de línea de comando para especificar el tipo de virtualización.

¿Hay otra manera de hacer esto?

Respuesta1

Actualizar

AWS ha habilitado esta característica en la API de EC2. Está disponible como --virtualization-typeopción paraaws ec2 register-imageen el nuevo awscli basado en Boto.

Respuesta original

¡Sí! Desafortunadamente, no existe una manera directa de hacerlo. Además, algunas instancias PV pueden necesitar modificaciones en el kernel y el gestor de arranque.

  1. Cree un volumen a partir de su PV AMI existente. Si fuera su propia PV AMI, puede crear un volumen a partir de la instantánea. Si se trata de una AMI de terceros, deberá iniciar una instancia y tomar una instantánea.
  2. Inicie una instancia HVM con cualquier AMI.
  3. Detenga esa instancia de HVM.
  4. Separe el volumen raíz de esa instancia.
  5. Adjunte el volumen PV como volumen raíz (/dev/sda1 o /dev/sda si estaba particionado) a la instancia HVM.
  6. Ejecute ec2-create-imageen la instancia HVM.
  7. Inicie otras instancias con su nueva AMI de HVM.

Si eso no funciona, antes del paso 5, deberá adjuntar ese volumen a una instancia en ejecución, configurar un chroot e instalar un kernel y un gestor de arranque para su distribución. Es posible que también desees borrar los registros y cualquier caché de inicio de la nube.

Respuesta2

En mi caso, tuve que hacer la conversión manualmente ya que la instancia que creé aws ec2 register-imageno arrancó. Mi solución se basa enesta publicaciónsobre elForo AWS EC2.

Preparación

Asegúrese de que todos los volúmenes estén en la misma zona de disponibilidad.

  1. SSH a su máquina fotovoltaica desde la que desea migrar y aplique todas las actualizaciones, luego cierre sesión.

  2. Vaya a la consola de AWS e inicie una nueva instancia de HVM seleccionando la misma AMI base desde la que se creó el sistema fotovoltaico (en mi caso, la AMI de Linux de 64 bits de Amazon).

  3. SSH a esta nueva instancia y aplique todas las actualizaciones, luego cierre sesión.

  4. Vaya a la consola de AWS y detenga la instancia PV. Tome una instantánea del dispositivo raíz y cree un nuevo volumen ( SOURCE VOLUME) a partir de esta instantánea.

  5. Detenga la instancia de HVM. Tome una instantánea del dispositivo raíz en la nueva instancia y cree un nuevo volumen ( TARGET VOLUME) a partir de esta instantánea. Inicie la instancia HVM (nueva) nuevamente.

  6. Usando la consola de AWS:

  • Adjuntar SOURCE VOLUMEa la nueva instancia como /dev/xvdf.
  • Adjuntar TARGET VOLUMEa la nueva instancia como /dev/xvdg.

Proceso de conversión

  1. SSH a la nueva instancia y obtenga acceso de root:

     sudo su
    
  2. Monte las unidades de origen y de destino.

     mkdir -p /mnt/source && mount /dev/xvdf /mnt/source
     mkdir -p /mnt/target && mount /dev/xvdg1 /mnt/target
    

    En mi caso, los dispositivos fueron /dev/xvdf(fuente) y /dev/xvdg1(destino). Estos pueden cambiar en su configuración según la cantidad de particiones y dónde las adjuntó (consulte el paso 6 en Preparación). Úselo ls -al /dev/xvd*para ver las unidades.

  3. Copia de seguridad /lib/modules/*(si el kernel del PV ami difiere del de la nueva máquina HVM. Algunos servicios de AWS utilizan este módulo).

  4. Elimine todo menos /bootel volumen de destino:

     cd /mnt/target && ls | grep -v boot | xargs rm -Rf
    
  5. Eliminar /booten el volumen de origen:

     rm -Rf /mnt/source/boot
    
  6. Copie los datos del volumen de origen al volumen de destino conservando todos los atributos:

     rsync -aAXHPv /mnt/source/ /mnt/target
    
  7. Edite /mnt/target/etc/fstabpara /la partición, de modo que haga referencia a TARGET VOLUMEcuando se monte en su ubicación final en el paso (8). Ya sea usando una etiqueta o simplemente algo como:

     /dev/xvda1 /     ext4    defaults,barrier=0 1 1
    

Luego restaure /lib/modules/la copia de seguridad en el Paso 3. (Si el núcleo de la ami PV difiere de la nueva máquina HVM).

  1. Detenga el sistema y desconecte todos los volúmenes mediante la consola de AWS. Adjunte el TARGET VOLUMEen la nueva instancia como /dev/xvda.

    Asegúrese de anotar dónde se montó el dispositivo raíz original. En la mayoría de los casos, debería ser así /dev/xvda.

  2. Inicie su instancia HVM. Ahora debería ser un duplicado exacto de su sistema fotovoltaico. Si todo parece correcto, ahora puede eliminar su instancia PV y también SOURCE VOLUME.

Respuesta3

TLDR:

ec2-register -a x86_64 -d '3.15.7-200.fc20.x86_64' -n 'Fedora_20_HVM_AMI'  --sriov simple --virtualization-type hvm -s snap-b44feb18 --root-device-name /dev/sda1 

Pasos detallados:

Responder más basándose enLa respuesta de Jeff Strunkpara simplificar los pasos y dar un poco más de detalles sobre la imagen del registro ec2:

  1. Cree una instancia usando una imagen PV. Realice/actualice los cambios que desee.

  2. Cree una imagen a partir de la instancia anterior.

  3. Busque la identificación de la instantánea utilizada por la AMI anterior en EC2 > Elastic Block Store > Instantánea en la consola EC2.

    o si tiene las herramientas de la API de EC2 configuradas:

    ec2-describe-imágenes ami-id_of_above_created_ami

    y busque la identificación de la instantánea para el ami

    .. Supuestos para pasos posteriores: Sus claves ec2 y herramientas API están configuradas y listas para usar:

  4. Registre una nueva AMI HVM usando la instantánea anterior: ejemplo:

ec2-register -a x86_64 -d '3.15.7-200.fc20.x86_64' -n 'Fedora_20_HVM_AMI' --sriov simple --virtualización-tipo hvm -s snap-b44feb18 --root-device-name /dev/sda1

dónde

  • -d es la descripción de AMI
  • -n es el nombre de AMI
  • -s es la identificación de la instantánea del paso 3.
  • -a es arquitectura
  • --Se requiere tipo de virtualización para convertirlo en hvm
  • --sriov sirve para permitir redes mejoradas, aunque puede ser redundante, no estoy seguro.

Para más información:

Respuesta4

Después de probar todas las sugerencias aquí, ninguna de las cuales funcionó para mí, encontré una excelente entrada de blog sobre el tema, enhttps://www.opswat.com/blog/aws-2015-why-you-need-switch-pv-hvm.

Los elementos (detalles) del procedimiento son:

  1. Instale gruben la instancia PV que se va a migrar (instancia de origen).

  2. Realice una instantánea de precaución del volumen raíz en la instancia de origen (volumen de origen, SV).

  3. Cree una instancia HVM temporal que migrará el volumen.

    1. Usé una instancia de Amazon Linux
  4. Cree un volumen de destino (DV) y adjunte este y el SV a la instancia temporal.

    1. El DV debe ser al menos tan grande como el SV.

    2. Adjunte el SV como /dev/{sd,xvd}fy el DV como /dev/{sd,xvd}g.

    3. Particionar el DV:

    parted /dev/xvdg --script 'mklabel msdos mkpart primary 1M -1s print quit'

    partprobe /dev/xvdg

    udevadm settle

  5. Cambie el tamaño al tamaño mínimo del FS del SV y use dduna imagen en el DV.

    1. Limpie el FS del volumen de origen:e2fsck -f /dev/xvdf

    2. Minimizar lo mismo:resize2fs -M /dev/xvdf

    3. Observe el resultado de resize2fs (p. ej. Resizing the file system on /dev/xvdf to 269020 (4k) blocks) y anótelo para el siguiente paso.

    4. Duplicar SV a DV:dd if=/dev/xvdf of=/dev/xvdg1 bs=<block size from previous step, here 4k> count=<use block count from last step, here 269020>

    5. Expanda el FS en la nueva partición:resize2fs /dev/xvdg1

  6. Instalar gruben el bloque de arranque del DV

    1. Cree temporalmente archivos de dispositivo en el DV:mount /dev/xvdg1 /mnt; cp -a /dev/xvdg /dev/xvdg1 /mnt/dev/

    2. Instalar archivos grub:

    rm -f /mnt/boot/grub/*stage*

    cp /mnt/usr/*/grub/*/*stage* /mnt/boot/grub/

    rm -f /mnt/boot/grub/device.map

    1. Instale grub en un entorno chroot:

    cat << ARNIE | chroot /mnt grub --batch

    device (hd0) /dev/xvdg

    root (hd0,0)

    setup (hd0)

    ARNIE

  7. Después de realizar algunos otros cambios menores en el volumen de destino, ajuste el volumen y cree una AMI a partir de él.

    1. Ordene los archivos temporales del dispositivo:rm -f /mnt/dev/xvdg /mnt/dev/xvdg1

    2. En /mnt/boot/grub/grub.conf, cambie root (hd0)a root (hd0,0), agregue (o reemplace console=*) console=ttyS0a la línea del kernel y, si es necesario, reemplácelo root=*con root=LABEL=/en la línea del kernel

    3. En /mnt/etc/fstab, asegúrese de que la línea del FS raíz contenga una referencia etiquetada, por ejemplo

    LABEL=/ / ext4 defaults,noatime 1 1

    1. Etiquete el nuevo FS raíz cone2label /dev/xvdg1 /

    2. Desmonte DV de la instancia temporal, desconecte tanto SV como DV de la instancia temporal.

    3. Ajuste el DV y, a partir de ese ajuste, cree una imagen AMI.

  8. Inicie una instancia HVM desde esa HMI. Esa es su instancia migrada.

información relacionada