Introducción
Cuando trabajas con un servidor remoto en la nube, generalmente estás trabajando con una máquina virtual: una instancia aislada y encapsulada de un sistema operativo completo que se ejecuta dentro de un clúster de servidores más grande. También puedes trabajar con máquinas virtuales localmente en tu escritorio, utilizando software como QEMU o VirtualBox. Las máquinas virtuales pueden incluir toda una interfaz de escritorio, o simplemente ejecutar un servidor SSH para permitir conexiones a través de terminal. En ambos casos, son técnicamente similares y hacen suposiciones similares. Aparte de las optimizaciones en la nube a gran escala, la única diferencia significativa entre los entornos de virtualización radica en los discos duros y las opciones de configuración de la máquina virtual. Estos se conocen como imágenes de máquinas virtuales y tienen formatos diferentes según los proveedores.
En este tutorial, aprenderás cómo convertir entre formatos de imágenes de máquinas virtuales (incluyendo qcow2
, vdi
, vhd
y vmdk
), para que puedas llevar tus entornos virtuales desde tu escritorio hasta la nube y viceversa según sea necesario.
Requisitos previos
Los comandos en este tutorial se pueden ejecutar en Windows, macOS o Linux, siempre y cuando puedas instalar QEMU y VirtualBox junto con sus herramientas de línea de comandos. Este tutorial proporciona instrucciones de instalación utilizando el gestor de paquetes Homebrew. Puedes instalar Homebrew en macOS, en Linux, o en Windows bajo WSL2.
Si estás ejecutando en un droplet de DigitalOcean, deberías tener al menos 2 CPUs y 2GB de memoria.
También necesitarás al menos 10GB de espacio libre para ejecutar los comandos en este tutorial.
Nota: Si estás utilizando macOS con un CPU Apple Silicon (fabricado en 2020 y posterior), solo podrás usar QEMU y no VirtualBox.
QEMU
QEMU es el software de virtualización de código abierto más potente y ampliamente compatible. Se ejecuta en todas las plataformas principales (incluidas Windows, macOS, Linux y otros sistemas operativos como Android) y es capaz tanto de virtualización como de emulación según sea necesario. Por ejemplo, si estás ejecutando una imagen de servidor Linux en un escritorio con Windows (un caso de uso común), ambas plataformas comparten una arquitectura subyacente común (Intel/AMD x86), por lo que QEMU puede lograr un rendimiento completo mediante la virtualización. Si estás utilizando QEMU para combinar arquitecturas, por ejemplo, ejecutando Linux o Windows x86 (como sistema operativo “host” o “invitado”) con las arquitecturas ARM de macOS o Android, QEMU utilizará automáticamente la emulación para traducir arquitecturas.
En comparación con la virtualización, la emulación generalmente no se utiliza en entornos de producción porque agrega una penalización significativa al rendimiento. Sin embargo, el enfoque de QEMU que trata la virtualización y la emulación como prácticamente equivalentes proporciona ventajas de compatibilidad significativas, ya que significa que se pueden utilizar los mismos formatos de imagen y las mismas herramientas en todos los escenarios.
QEMU es un software de línea de comandos y tiene una curva de aprendizaje alta en comparación con el software de virtualización de escritorio como VMware o VirtualBox debido a la gran cantidad de opciones con las que se pueden configurar las máquinas virtuales. Opcionalmente, se puede utilizar con interfaces gráficas de usuario como QtEmu en Windows o Linux y UTM en macOS. Este tutorial proporcionará instrucciones de línea de comandos para trabajar con QEMU.
Instalación de QEMU
Para instalar QEMU, utiliza el comando brew install
de Homebrew:
- brew install qemu
Esto proporcionará el conjunto completo de herramientas y comandos de QEMU, incluido qemu-img
, que se utiliza para convertir imágenes de máquinas virtuales desde la línea de comandos. Verifica que tienes acceso al comando qemu-img
ejecutando which qemu-img
:
- which qemu-img
Output/usr/local/bin/qemu-img
Nota: También puedes instalar QEMU en Windows utilizando su instalador nativo, si prefieres trabajar en Windows sin WSL2.
QEMU proporciona la mayor parte de la funcionalidad que necesitarás en este tutorial. También puedes instalar VirtualBox, otro paquete de virtualización popular.
VirtualBox
VirtualBox es un software de virtualización de código abierto proporcionado por Oracle. Admite todos los sistemas operativos x86 (Windows, Linux y macOS) de computadoras fabricadas antes de 2020. No admite emulación o arquitecturas no x86, lo que lo hace principalmente útil para ejecutar Linux en Windows y viceversa. Sin embargo, también es más fácil de usar que QEMU, proporciona configuraciones predeterminadas ampliamente compatibles e incluye una interfaz de escritorio por defecto.
No ofrece tanta funcionalidad de línea de comandos como QEMU, por lo que a menudo se combina con software de orquestación dedicado como Vagrant para automatizar y reproducir configuraciones de máquinas virtuales. Sin embargo, incluye la herramienta de línea de comandos VBoxManage
, que se puede utilizar para manipular algunas imágenes de máquinas virtuales.
Instalación de VirtualBox
Para instalar VirtualBox en macOS, usa brew install
con la bandera --cask
, ya que VirtualBox se distribuye como un paquete de aplicación completo, que Homebrew llama cask:
- brew install --cask virtualbox
Para instalar VirtualBox en Ubuntu u otras distribuciones de Linux derivadas de Debian (incluido WSL2), primero usa apt update
para actualizar tus fuentes de paquetes, luego apt install
:
- sudo apt update
- sudo apt install virtualbox
Para instalar VirtualBox en Windows sin WSL2, consulta su página de descargas.
Después de instalar VirtualBox, verifica que tengas acceso al comando vboxmanage
ejecutando which vboxmanage
:
- which vboxmanage
Output/usr/local/bin/vboxmanage
Hay alternativas disponibles a QEMU y VirtualBox para la virtualización. Sin embargo, la mayoría de estas son específicas de la plataforma (como Hyper-V en Windows) o diseñadas para uso empresarial a gran escala (como VMware). No se tratarán directamente en este tutorial, pero convertirás sus formatos de imagen en los siguientes pasos.
Creando una imagen de máquina virtual usando QEMU
Para demostrar cómo convertir imágenes de máquinas virtuales, puedes comenzar creando una imagen con QEMU. Puedes saltarte esta sección si ya tienes una imagen para convertir.
Usa el comando qemu-img create
con la bandera -f qcow2
para crear una imagen en el formato qcow2
predeterminado de QEMU:
- qemu-img create -f qcow2 ubuntu-desktop-22.04.qcow2 10G
En este punto, habrás creado una imagen de máquina virtual vacía. Aunque la hayas nombrado como ubuntu-desktop-22.04.qcow2
y hayas proporcionado una capacidad de 10G
, en este momento ni tendrá instalado Ubuntu 22.04 ni ocupará 10 GB de espacio.
OutputFormatting 'ubuntu-desktop-22.04.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=10737418240 lazy_refcounts=off refcount_bits=16
Las imágenes de QEMU siempre ocuparán el menor espacio posible en tu disco, mientras reflejan su capacidad máxima declarada a cualquier software que se ejecute dentro de la máquina virtual. En este caso, 10 GB sería la capacidad que tu máquina virtual cree que tiene disponible y el tamaño máximo al que la imagen de la máquina virtual se ampliará automáticamente.
A typical next step would be to install Ubuntu 22.04 onto the virtual machine, using a Ubuntu 22.04 ISO. However, you can skip this step for this tutorial, as you won’t actually be working directly with this virtual machine. An ISO is another type of disk image that is usually read-only, and was historically written onto CD and DVD installation media, rather than an image of a writable hard disk. Other software exists for manipulating ISO images, such as mkisofs and dd. To learn more about installing Linux using QEMU, refer to the QEMU documentation.
Convirtiendo una imagen de QEMU a otro formato
Una vez que hayas creado una imagen de VM, puedes usar qemu-img convert
para convertirla a otros formatos. vdi
es el formato de imagen predeterminado de VirtualBox. Por defecto, esto no borrará la imagen original de la VM, solo creará una nueva:
- qemu-img convert -f qcow2 ubuntu-desktop-22.04.qcow2 -O vdi ubuntu-desktop-22.04.vdi
La bandera -f
se utiliza para especificar el formato de entrada y el nombre del archivo de entrada. La bandera -O
se utiliza para especificar el formato de salida y el nombre del archivo de salida. También puedes incluir la bandera -p
para mostrar una barra de progreso, lo cual es útil al convertir imágenes muy grandes. La imagen que creaste en el último paso se convertirá instantáneamente, porque aún no tiene ningún contenido. Puedes confirmar que creaste ubuntu-desktop-22.04.vdi
usando ls
:
- ls ubuntu-desktop-22.04.vdi
Outputubuntu-desktop-22.04.vdi
Otros formatos comunes incluyen vmdk
, utilizado principalmente por VMware, y vhd
, utilizado principalmente por Hyper-V de Microsoft. También puedes crear una imagen “raw” si tu software lo requiere, siguiendo el próximo paso.
Convirtiendo otros formatos de máquinas virtuales a QEMU
Si tienes una imagen en formato `vdi`, puedes usar el comando `vboxmanage` proporcionado por VirtualBox para convertirla:
- vboxmanage clonemedium ubuntu-desktop-22.04.vdi ubuntu-desktop-22.04.img --format raw
Output0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone medium created in format 'raw'. UUID: 0501e707-c94e-4103-9069-d7b64a933d78
Ten en cuenta que esto registrará automáticamente la imagen creada con la configuración local de VirtualBox, lo cual puede ser inconveniente si estás intentando crear copias transitorias. Es posible que debas eliminar manualmente cualquier nueva entrada de la interfaz de VirtualBox si registras duplicados inadvertidamente.
Las imágenes de máquinas virtuales en bruto no están comprimidas en absoluto, por lo que este comando realmente creará un archivo completo de 10GB, a diferencia de antes. Puedes convertirlo de vuelta al formato `qcow2` para usarlo con QEMU invirtiendo la sintaxis del último paso:
- qemu-img convert -f raw ubuntu-desktop-22.04.img -O qcow2 ubuntu-desktop-22.04-new.qcow2
Ahora puedes eliminar la imagen en bruto para recuperar espacio en disco:
- rm ubuntu-desktop-22.04.img
Finalmente, puedes usar los comandos `qemu-img check` y `qemu-img info` para obtener algunos metadatos de tus imágenes de máquinas virtuales:
- qemu-img check ubuntu-desktop-22.04.qcow2
OutputNo errors were found on the image.
Image end offset: 262144
- qemu-img info ubuntu-desktop-22.04.qcow2
Outputimage: ubuntu-desktop-22.04.qcow2
file format: qcow2
virtual size: 10 GiB (10737418240 bytes)
disk size: 196 KiB
cluster_size: 65536
Format specific information:
compat: 1.1
compression type: zlib
lazy refcounts: false
refcount bits: 16
corrupt: false
extended l2: false
Para obtener más información sobre cómo convertir imágenes con `qemu-img`, consulta la página del manual de `qemu-img` o su documentación oficial.
Nota: También puedes cargar estas imágenes de máquinas virtuales en DigitalOcean para usarlas como imágenes de servidor en la nube, siguiendo la documentación de Imagen Personalizada de DigitalOcean.
Conclusión
En este tutorial, utilizaste las herramientas de línea de comandos de QEMU y VirtualBox para crear, convertir y exportar imágenes de máquinas virtuales. Revisaste algunos ejemplos comunes de formatos de imágenes de máquinas virtuales, así como algunas suposiciones predeterminadas útiles para trabajar con máquinas virtuales. Siempre es útil comprender las tecnologías subyacentes de conceptos comunes como la virtualización, especialmente si necesitas migrar arquitecturas o proveedores de nube.
A continuación, es posible que desees revisar nuestra guía para escalar máquinas virtuales según tus necesidades.
Source:
https://www.digitalocean.com/community/tutorials/how-to-convert-virtual-machine-image-formats