Skip to content

Instantly share code, notes, and snippets.

@nullx5
Last active January 23, 2026 10:49
Show Gist options
  • Select an option

  • Save nullx5/f12f56a5557712f4f9027fbbf052dc66 to your computer and use it in GitHub Desktop.

Select an option

Save nullx5/f12f56a5557712f4f9027fbbf052dc66 to your computer and use it in GitHub Desktop.

qemu libvirt virt-install virsh virt-manager

┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│                                            Herramientas de usuario                                                  │
│                                                                                                                     │
│  qemu-system    virt-install     virt-clone           virsh / virt-manager             qemu-img                     |
│   (crear VM)     (crear VM)    (clonar/backup)      (administrar y snapshots)   (crear manipular discos, snapshot)  │
└───────┬───────────────┬───────────────┬──────────────────────┬───────────────────────────┬──────────────────────────┘
        │               │               │                      │                           │
        │               ▼               ▼                      ▼                           │
        │       ┌──────────────────────────────────────────────────────┐                   │
        │       │                      libvirt                         │                   │
        │       │           (API / daemon libvirtd | XML)              │                   │
        │       │  - Estado de VMs    - Snapshots                      │                   │
        │       │  - Redes            - Storage                        │                   │
        │       └───────────────────────┬──────────────────────────────┘                   │
        │                               │                                                  │
        ▼                               ▼                                                  │
┌──────────────────────────────────────────────────────┐                                   │
│                    qemu-system                       │                                   │
│                 (hipervisor real)                    │<──────────────────────────────────┘
│  - CPU virtual    - RAM                              │          (Prepara los archivos
│  - Discos         - Devices                          │           de disco que usa QEMU)
└───────────────────────┬──────────────────────────────┘
                        │
                        ▼
        ┌────────────────────────────┐
        │         Kernel Linux       │
        │        KVM / VFIO          │
        └────────────────────────────┘

Libvirt te permite usar una sola herramienta (como virsh o Virtual Machine Manager) para manejar diferentes tecnologías de virtualización

| Tecnología      | Tipo                  | ¿Qué virtualiza?                                                                 | Nivel de Aislamiento                                             |
|-----------------|-----------------------|----------------------------------------------------------------------------------|------------------------------------------------------------------|
| KVM             | Hipervisor (Tipo 2*)  | Hardware completo: Permite sistemas operativos distintos al host (Windows, BSD). | Alto: Aislamiento por hardware (VT-x / AMD-V).                   |
| LXC / OpenVZ    | Contenedores          | Entorno de usuario: Comparte el kernel del host Linux.                            | Medio: Aislamiento por namespaces y cgroups.                     |
| Xen / ESX       | Hipervisor (Tipo 1)   | Hardware completo: Corre directamente sobre el “hierro” (bare-metal).            | Muy alto: Control total desde el arranque.                       |
| UML             | Software              | Kernel de Linux: Un kernel corriendo como un proceso de usuario.                  | Bajo: Ideal para pruebas de desarrollo.                          |

image
@nullx5
Copy link
Author

nullx5 commented Jan 9, 2026

@nullx5
Copy link
Author

nullx5 commented Jan 15, 2026

qemu-system-x86_64

Cuando ejecutas QEMU directamente desde la terminal con el comando qemu-system-x86_64, estás creando un proceso independiente que libvirt (la herramienta detrás de virsh) no conoce ni rastrea.

Cuando lanzas QEMU directamente no tienes un panel de control externo. La administración se hace desde el QEMU Monitor, una consola interna que vive dentro del proceso de la máquina virtual.

Si usaste el parámetro -nographic, tu terminal se convierte en la consola de la VM. Para entrar al modo de administración (Monitor):

  • Presiona Ctrl + a y luego suelta y presiona c.
    Verás que el prompt cambia a (qemu). ¡Ya estás en el panel de control!
  • Para volver a la terminal de la VM, repite el comando (Ctrl + a, luego c).
image
sudo qemu-system-x86_64 \
-enable-kvm \
-m 2048 \
-smp 2 \
-cpu host \
-hda ubuntu24.qcow2 \
-cdrom ubuntu-24.04-live-server-amd64.iso \
-boot d \
-net nic -net user \
-nographic

Explicación rápida:

-enable-kvm: usa aceleración KVM

-m 2048: 2 GB de RAM para la VM

-smp 2: 2 CPUs

-cpu host: hereda características del CPU host, necesario para nested virtualization

-hda: disco de la VM

-cdrom: ISO de instalación

-boot d: arranca desde CD

-net nic -net user: red NAT virtual simple

-nographic: sin GUI, solo consola por terminal

Nota: si quieres GUI, puedes usar -display sdl
Nota: Detalles sobre la red:
-net nic: crea una tarjeta de red virtual dentro de la VM.

-net user: activa el modo user-mode networking, también llamado SLIRP.

Lo importante sobre -net user:

  • No necesitas crear ninguna interfaz manual en tu host (ip o ifconfig).
  • QEMU crea un NAT interno y un "puente virtual" entre la VM y tu host automáticamente.
  • La VM puede salir a Internet, pero no es accesible directamente desde tu red local (salvo que configures port forwarding).

Si quieres una red más "real" (bridged)
Si en cambio quieres que tu VM aparezca como un equipo más en tu LAN:

  • Código de ejemplo: ... -hda disco.qcow2 -net nic -net tap,ifname=tap0, ...
  • Aquí sí necesitas crear la interfaz tap0 en tu host con ip o ip tuntap add ....
  • debes tener creada la interfaz tap0 en tu sistema host y asociada a un puente (como br0).
  • Esta configuración permite que la VM tenga su propia IP en la red local, como si fuera otra PC en tu LAN.
image

@nullx5
Copy link
Author

nullx5 commented Jan 15, 2026

virt-install y virsh

image

Una vez creada la VM con virt-install, ya no se usa mas, se usa virsh o virt-manager

sudo virt-install \
  --name ubuntu24_server \
  --memory 2048 \
  --vcpus 2 \
  --cpu host-passthrough \
  --disk path=./ubuntu24.qcow2,bus=virtio \
  --cdrom ./ubuntu-24.04-live-server-amd64.iso \
  --network user,model=virtio \   #NAT
  --graphics none \
  --os-variant ubuntu24.04 \
  --import
image image

En modo bridge, virt-install es mucho más sencillo porque el comando se encarga de gestionar la conexión al puente de red de forma automática.

sudo virt-install \
  --name ubuntu24_server \
  --memory 2048 \
  --vcpus 2 \
  --cpu host-passthrough \
  --disk path=./ubuntu24.qcow2 \
  --network bridge=br0,model=virtio \  #bridge
  --graphics none \
  --os-variant ubuntu24.04 \
  --import

@nullx5
Copy link
Author

nullx5 commented Jan 16, 2026

image image

@nullx5
Copy link
Author

nullx5 commented Jan 23, 2026

image

.OVA

sudo qemu-img convert -f qcow2 /var/lib/libvirt/images/ubuntu24.04.qcow2 -O vmdk ~/ova/ubuntu24.04.vmdk

image image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment