
¿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-image
comando para crear una nueva imagen mientras especificaba HVM como tipo de virutalización. Sin embargo, ec2-create-image
no 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-type
opción paraaws ec2 register-image
en 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.
- 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.
- Inicie una instancia HVM con cualquier AMI.
- Detenga esa instancia de HVM.
- Separe el volumen raíz de esa instancia.
- Adjunte el volumen PV como volumen raíz (/dev/sda1 o /dev/sda si estaba particionado) a la instancia HVM.
- Ejecute
ec2-create-image
en la instancia HVM. - 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-image
no 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.
SSH a su máquina fotovoltaica desde la que desea migrar y aplique todas las actualizaciones, luego cierre sesión.
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).
SSH a esta nueva instancia y aplique todas las actualizaciones, luego cierre sesión.
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.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.Usando la consola de AWS:
- Adjuntar
SOURCE VOLUME
a la nueva instancia como/dev/xvdf
. - Adjuntar
TARGET VOLUME
a la nueva instancia como/dev/xvdg
.
Proceso de conversión
SSH a la nueva instancia y obtenga acceso de root:
sudo su
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). Úselols -al /dev/xvd*
para ver las unidades.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).Elimine todo menos
/boot
el volumen de destino:cd /mnt/target && ls | grep -v boot | xargs rm -Rf
Eliminar
/boot
en el volumen de origen:rm -Rf /mnt/source/boot
Copie los datos del volumen de origen al volumen de destino conservando todos los atributos:
rsync -aAXHPv /mnt/source/ /mnt/target
Edite
/mnt/target/etc/fstab
para/
la partición, de modo que haga referencia aTARGET VOLUME
cuando 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).
Detenga el sistema y desconecte todos los volúmenes mediante la consola de AWS. Adjunte el
TARGET VOLUME
en 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
.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:
Cree una instancia usando una imagen PV. Realice/actualice los cambios que desee.
Cree una imagen a partir de la instancia anterior.
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:
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:
Instale
grub
en la instancia PV que se va a migrar (instancia de origen).Realice una instantánea de precaución del volumen raíz en la instancia de origen (volumen de origen, SV).
Cree una instancia HVM temporal que migrará el volumen.
- Usé una instancia de Amazon Linux
Cree un volumen de destino (DV) y adjunte este y el SV a la instancia temporal.
El DV debe ser al menos tan grande como el SV.
Adjunte el SV como
/dev/{sd,xvd}f
y el DV como/dev/{sd,xvd}g
.Particionar el DV:
parted /dev/xvdg --script 'mklabel msdos mkpart primary 1M -1s print quit'
partprobe /dev/xvdg
udevadm settle
Cambie el tamaño al tamaño mínimo del FS del SV y use
dd
una imagen en el DV.Limpie el FS del volumen de origen:
e2fsck -f /dev/xvdf
Minimizar lo mismo:
resize2fs -M /dev/xvdf
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.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>
Expanda el FS en la nueva partición:
resize2fs /dev/xvdg1
Instalar
grub
en el bloque de arranque del DVCree temporalmente archivos de dispositivo en el DV:
mount /dev/xvdg1 /mnt; cp -a /dev/xvdg /dev/xvdg1 /mnt/dev/
Instalar archivos grub:
rm -f /mnt/boot/grub/*stage*
cp /mnt/usr/*/grub/*/*stage* /mnt/boot/grub/
rm -f /mnt/boot/grub/device.map
- Instale grub en un entorno chroot:
cat << ARNIE | chroot /mnt grub --batch
device (hd0) /dev/xvdg
root (hd0,0)
setup (hd0)
ARNIE
Después de realizar algunos otros cambios menores en el volumen de destino, ajuste el volumen y cree una AMI a partir de él.
Ordene los archivos temporales del dispositivo:
rm -f /mnt/dev/xvdg /mnt/dev/xvdg1
En
/mnt/boot/grub/grub.conf
, cambieroot (hd0)
aroot (hd0,0)
, agregue (o reemplaceconsole=*
)console=ttyS0
a la línea del kernel y, si es necesario, reempláceloroot=*
conroot=LABEL=/
en la línea del kernelEn
/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
Etiquete el nuevo FS raíz con
e2label /dev/xvdg1 /
Desmonte DV de la instancia temporal, desconecte tanto SV como DV de la instancia temporal.
Ajuste el DV y, a partir de ese ajuste, cree una imagen AMI.
Inicie una instancia HVM desde esa HMI. Esa es su instancia migrada.