Migrar de AHV a VMware

Migrar de AHV a VMware

¡Buenas a todos! Hoy vamos con un artículo en el que os explicaremos como migrar máquinas virtuales de AHV a VMware. Si bien este es un movimiento que se suele hacer a la inversa con Nutanix Move, nunca está de más tenerlo en mente por si nos hace falta en algún momento.

Para evitar problemas con la máquina original y los snapshots que pudiera tener, la clonaremos y trabajaremos sobre dicho clon para la exportación. Es muy importante que la máquina esté apagada en todo momento.


¿Qué vamos a migrar?


Dos máquinas Windows Server 2019 (BIOS y UEFI) y dos máquinas CentOS 7 (BIOS y UEFI) con GNOME Desktop instalado, desde un single node cluster con Nutanix Community Edition a un host VSphere 8. Todas ellas usan un único disco de 100GB.

VM Disks

Versiones y hardware que hemos utilizado


  • Intel NUC “Hades Canyon” NUC8i7HVK con Vsphere 8.0.1, 21495797.
VSphere 8 HadesCanyon
  • HP Z620 con Nutanix Community Edition 2.0, AOS 6.5.2 LTS y AHV 20220304.342.
Nutanix CE HP Z620 Specs
  • Nutanix VirtIO 1.2.1

Instalación de drivers Nutanix VirtIO


A continuación, os describimos las formas más habituales para instalar los drivers de Nutanix

CentOS 7

No necesitan una instalación específica, puesto que ya vienen integrados en el sitema operativo.

Windows Server 2019

Necesitan una instalación manual, se puede hacer de dos formas:

Durante la instalación del sistema operativo

Aquí cargamos todos los drivers de forma manual mediante una ISO para su instalación. En este caso desde agregar o quitar programas no veremos que están instalados.

VirtIO Windows Server 2019

Después de la instalación del sistema operativo

Durante la instalación de Windows cargamos la ISO con los drivers de forma manual e instalamos exclusivamente VirtIO SCSI pass-through controller para poder ver el disco duro. Cuando se haya completado procedemos a instalar los VirtIO desde la ISO en Windows.

Nutanix VirtIO SCSI

Desde “Agregar o Quitar Programas” veremos que efectivamente están instalados.

Nutanix VirtIO Windows

Da igual la forma que hayamos elegido para instalar los VirtIO. Una vez migrada la máquina tendremos que desinstalarlos de forma manual.


Exportación de los discos


Podemos exportar los discos de dos formas diferentes:

  • Usando qemu-img convert desde nuestra workstation con Windows.
  • Usando qemu-img convert desde la CVM.

AHV usa los discos en formato RAW, por lo que tendremos que convertirlos a VMDK para poder usarlos en VMware. Este procedimiento tiene un consumo elevado de CPU lo que implica que si lo realizamos desde una CVM podemos afectar a sus servicios. Aunque explicaremos las dos opciones, lo recomendable es hacer la conversión del disco desde nuestra workstation.

Tal y como comentábamos al principio, trabajaremos sobre un clon apagado de la máquina de la que queramos exportar los discos. Esto garantiza que no tendremos snapshots y que no afectaremos a la máquina original.

Apertura del puerto 2222

Si tenéis una versión muy vieja de AOS, es posible que el puerto 2222 esté cerrado. Nosotros lo hemos observado en una versión 5.5. Si esto fuera así no os podréis conectar por winSCP.

Para solucionarlo tendremos que abrir el puerto en todas las CVM con el siguiente comando:

allssh modify_firewall -f -o open -i eth0 -p 2222 -a

Desde nuestra workstation con Windows

Lo primero que tenemos que hacer es descargar qemu-img para Windows desde este enlace. Al final de la página tendremos el botón de descarga.

Download qemu-img

Seguidamente descomprimimos el fichero en la carpeta que más nos guste. Nosotros hemos elegido C:\Work\Software\qemu-img-win-x64-2_3_0

qemu-img unzip

Nos conectamos por Putty a la VIP de nuestro clúster

Putty Nutanix Cluster

Ejecutamos este comando para listar los discos de la máquina que queremos exportar y nos quedamos con el vmdisk_uuid.

acli vm.get <Nombre_de_la_máquina> include_vmdisk_paths=1 | grep -E 'disk_list|vmdisk_nfs_path|vmdisk_size|vmdisk_uuid'

Ejemplo:

acli vm.get Server\ 2019\ BIOS include_vmdisk_paths=1  | grep -E 'disk_list|vmdisk_nfs_path|vmdisk_size|vmdisk_uuid'
VM disk UUID

Ejecutamos este otro comando para ver si hay snapshots y el Storage Container donde están los discos.

nfs_ls -Rlai | grep -E '^/|<disco_1>|...|<disco_n>'

Ejemplo:

nfs_ls -Rlai | grep -E '^/|647eecb2-2352-4b7d-88c2-e3965113efc5'

Como podemos ver en la imágen de abajo, el disco se encuentra en el storage container “SC-Z620” y además tiene un snapshot, por lo que debemos clonar la máquina para eliminarlo.

VM disk with snapshot

Este sería el resultado con la máquina clonada, como véis está en el mismo storage container y NO tiene snapshots.

VM Disk Correct

Para descargar el disco, nos conectaremos por WinSCP a la VIP de nuestro clúster por puerto 2222 con las credenciales de admin que usamos en Prism Element.

WinSCP Login

Nos dirigimos al storage container donde se encuentra el disco de la máquina que vamos a exportar y veremos que inicialmente está “vacío” porque las carpetas están ocultas.

WinSCP hidden files

Para mostrar los ficheros ocultos pichamos en el menú Options de WinSCP y seleccionamos Prefences.

WinSCP Preferences

Seleccionamos el apartado Panels de la izquierda y activamos el check de Show Hidden Files.

Putty Show Hidden Files

A partir de ahora podremos ver los elementos ocultos.

WinSCP hidden files shown

Entramos en .acropolis y pinchamos sobre Find Files.

WinSCP find files

En file mask introducimos el vmdisk_uuid de nuestra máquina y pinchamos sobre Start para que nos aparezca listado.

WinSCP Find

Pinchamos sobre Download y lo descargamos a nuestro disco local.

WinSCP Download File

Sed pacientes porque la transferencia puede tardar bastante en función del tamaño del disco de nuestra máquina. Para 100GB nosotros hemos tardado cerca de una horita.

WinSCP Download

Con este método tanto las IOPS que generamos en el clúster como el consumo de CPU son mínimos.

Nutanix Cluster Usage

Con el disco descargado procederemos a su conversión con qemu. Abrimos un cmd como adminisrtrador y nos dirigimos a la carpeta donde hayamos descomprimido el qemu. Seguidamente ejecutamos el siguiente comando:

qemu-img.exe convert -p -O <formato_de_conversión> <vdisk_descargado_del_cluster> <vmdk_de_salida>

Ejemplo:

qemu-img.exe convert -p -O vmdk "c:\Users\bla_bla_bla\Downloads\VM Exports\044f8eb2-cace-43dc-a9b2-df62f0cfc8f0" "c:\Users\bla_bla_bla\Downloads\VM Exports\Windows Server 2019 BIOS"
qemu-img.exe convert

Obtendremos el disco convertido en formato vmdk y con el tamaño de los datos escritos.

Converted Disk

Le pondremos al archivo una extensión .vmdk y podemos proceder a importarlo en nuestro VMware.

Converted disk with extension

Desde la CVM

Para convertir el disco desde la CVM y descargarlo lo primero que haremos será configurar Putty para que no haga timeout mientras estamos exportando la máquina. Configuraremos por ejemplo a 30 segundos el Seconds between keepalives.

Putty Seconds between keepalives

Seguidamente nos conectamos a la VIP de nuestro clúster.

Putty connection

Listamos los discos de la máquina que queremos exportar y nos quedaremos con el vmdisk_uuid con el siguiente comando:.

acli vm.get <Nombre_de_la_máquina> include_vmdisk_paths=1 | grep -E 'disk_list|vmdisk_nfs_path|vmdisk_size|vmdisk_uuid'

Ejemplo:

acli vm.get Server\ 2019\ BIOS include_vmdisk_paths=1 | grep -E 'disk_list|vmdisk_nfs_path|vmdisk_size|vmdisk_uuid'
vmdis_uuid

Comprobamos si hay snapshots y el storage container donde están los discos.

nfs_ls -Rlai | grep -E '^/|<disco_1>|...|<disco_n>'

Ejemplo:

nfs_ls -Rlai | grep -E '^/|647eecb2-2352-4b7d-88c2-e3965113efc5'

En este caso no hay snapshots pero sí que hay discos en la papelera de reciclaje del clúster que no nos afectan para convertir y exportar los discos.

Nutanix Recycle Bin

Para convertir el disco del formato RAW que usa AHV a VMDK de VMware usaremos el siguiente comando:

qemu-img convert -p -c -f raw nfs://127.0.0.1/[Storage_Container_Donde_Esté_la_VM]/.acropolis/vmdisk/[VMDISK_UUID] -O vmdk nfs://127.0.0.1/[Storage_Container_Que_Queramos]/[Nombre_Del_Disco_Exportado].vmdk

Ejemplo:

qemu-img convert -p -c -f raw nfs://127.0.0.1/SC-Z620/.acropolis/vmdisk/647eecb2-2352-4b7d-88c2-e3965113efc5 -O vmdk nfs://127.0.0.1/SC-Z620/WS2019BIOS.vmdk
qemu-img convert

Con un clúster de laboratorio, prácticamente vacío, juzgad vosotros mismos el consumo del proceso.

Nutanix Cluster Usage

Una vez se ha convertido el disco procederemos a descargarlo. Abrimos WinSCP y nos contectamos por el puerto 2222 y las credenciales de admin de Prism Element a nuestro clúster.

WinSCP Nutanix Cluster

Entramos al storage container donde hayamos convertido el disco.

Storage Container

Lo descargamos a nuestra workstation. Estará listo para importarlo a nuestro VMware.

Disk Download

Importar las máquinas a VMware


Veamos como importar los discos que hemos exportado a nuestro host de VMware. Lo primero que haremos será crear una nueva máquina virtual.

VMware create new virtual machine

Introducimos el nombre e indicaremos los datos del sistema operativo que usará

VMware virtual machine details

Seleccionamos el datastore donde estará ubicada.

VMware virtual machine datastore

Eliminamos el disco duro (que configuraremos más adelante)  y la controladora USB si no la vamos a utilizar.

VMware virtual machine configuration

Dentro de la pestaña VM Options desplegamos Boot Options y configuramos el firmware según el que tuviera nuestra máquina original. En nuestro caso es BIOS

VMware Boot Options

Pinchamos sobre Finish para que se cree la máquina.

VMware virtual machine review

Subimos el disco que hemos convertido al datastore donde hemos creado la máquina.

Disk upload

Editamos la configuración de la máquina y seleccionamos add Existing Hard Disk

Add existing virtual disk

Seleccionamos el disco que acabamos de subir y guardamos los cambios.

Select virtual disk

Si comprobamos de nuevo las propiedades del disco, veremos que aparece como Thick provisioned, lazily zeroed.

Disk Thick provisioned

Si esta opción no os sirve, desde un vCenter podréis clonar la máquina o hacer un storage vMotion para cambiarlo a Thin Provision.

VMware new disk

CentOS 7

Después de añadir el disco, cuando intentemos arrancar la máquina, es posible que nos devuelva el error “Unsupported or invalid disk type 2”.

Unsupported or invalid disk type 2

Para solucionarlo nos conectamos por SSH a nuestro host de VMware y ejecutamos el comando detallado más abajo que realizará un clon del disco solucionando el problema. Si el disco ya estuviera en thin provision omitid el “-d thin”.

vmkfstools -i /vmfs/volumes/datastore/carpeta_de_la_maquina/disco_de_la_maquina.vmdk /vmfs/volumes/datastore/carpeta_de_la_maquina/nuevo_disco_de_la_maquina.vmdk -d thin

Ejemplo:

vmkfstools -i /vmfs/volumes/970\ EVO\ 1024/Migrated\ CentOS\ 7\ BIOS/CentOSBIOS.vmdk /vmfs/volumes/970\ EVO\ 1024/Migrated\ CentOS\ 7\ BIOS/Migrated_CentOS_7_BIOS.vmdk -d thin
vmkfstools -i

Si no tenéis posibilidad de conectaros al host de ESX por SSH podemos solucionar el problema haciendo una copia del disco desde el “Datastore Browser”. Para ello nos dirigimos al datastore donde hayamos creado la máquina y copiamos el disco que acabamos de subir.

Datstore Browser

Como destino usamos la carpeta de la máquina y le ponemos el nombre que más nos guste con extensión .vmdk

VMDK Copy

Ahora editamos las propiedades de la máquina virtual para eliminar el disco anterior que no permitía el arranque de la máquina virtual. Seleccionamos que se elimine también del datastore y guardamos los cambios.

VMware delete disk

Volvemos a editar las propiedades de la máquina y añadimos el disco que acabamos de clonar.

VMware add existing disk

Guardamos los cambios y esta vez la máquina arrancará.

VMware update virtual machine

Aunque técnicamente la máquina arranque lo hará en el initframs con un dracut-initqueue timeout si la configuramos con BIOS o se quederá esperando infinitamente antes de la pantalla de login si la iniciamos en modo UEFI. Alessandro Nuccio nos explica como solucionarlo en este enlace.

CentOS 7 dracut-initqueue

No obstante, veámoslo. Primero forzaremos un reinicio de la máquina y arrancaremos en modo rescue.

CentOS 7 Rescue Shell

Si nuestra máquina tiene interfaz gráfica abrimos la terminal y localizamos el último initramfs con el comando

ls -lrt /boot/initramfs-*
/boot/initramfs-*

Ahora comprobamos la última versión del kernel dentro del directorio /boot/modules

ls -lrt /lib/modules
/lib/modules

Ahora reconstruiremos el initramfs con el comando

sudo dracut -f [última_versión_intramfs_en_/boot] [última_versión_del_Kernel_en_/boot/modules]

Ejemplo:

sudo dracut -f /boot/initramfs-3.10.0-1160.71.1.el7.x86_64.img 3.10.0-1160-71-1-el7-x86_64
dracut -f

Por último reiniciamos la máquina con un reboot y veremos que arranca perfectamente.

CentOS 7 boot

Nuestro CentOS 7 con GNOME Desktop está listo para iniciar sesión.

CentOS 7 Login

Además las tools funcionan correctamente.

CentOS 7 VMware tools

Windows Server 2019

En el caso de Windows Server 2019 la máquina arranca sin problemas. Lo primero que haremos será montar e instalar las VMware Tools. Después reiniciaremos la máquina.

Install VMare Tools

Ahora eliminaremos los drivers de AHV:

  • Nutanix VirtIO Balloon Driver
  • Nutanix VirtIO Ethernet Adapter
  • Nutanis VirtIO SCSO pass-through controller
  • QEMU FWCfg Device (null driver)

Abrimos el administrador de dispositivos

demgmt.msc

En vista pinchamos sobre mostrar dispositivos ocultos

Windows Device Manager

En Disk Drives desinstalamos el dispositivo NUTANIX VDISK SCSI Disk Device.

NUTANIX VDISK SCSI Disk Device

En DVD/CD-ROM drives desinstalamos QEMU QEMU DVD-ROM ATA Device.

QEMU QEMU DVD-ROM ATA Device.

En Network Adapters desinstalamos Nutanix VirtIO Ethernet Adapter.

Nutanix VirtIO Ethernet Adapter.

En Procesadores desinstalamos los que no estén en uso.

Unused Windows Processors

En System Devices desinstalamos Nutanix VirtIO Balloon Driver y QEMU FWCfg Device (null driver)

Windows System Devices

Si hubieramos realizado la instalación desde Windows de los VirtIO, los desinstalaremos desde “Agregar o Quitar Programas” y reiniciaremos la máquina.

Nutanix VirtIO Windows

Esperamos que el artículo os haya sido de utilidad. ¡Nos vemos!

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *