Todos sabemos que la virtualización está de moda y que cada vez está ganando más terreno en el ámbito práctico y que es una herramienta fundamental en casi cualquier campo de la informática, hoy veremos como virtualizar un sistema con KVM.

KVM, es el sistema de virtualización por defecto en Linux. Su funcionamiento consta del módulo kvm.ko que lleva varios años integrado en el kernel del pinguino.

En muchos casos, se utiliza libvirt, una API de virtualización de un proyecto independiente, en este caso la explicación será sin esto, pues no interesa ir cambiando los valores manualmente y a nuestro gusto.

Una vez que hayamos comprobado que nuestro procesador es capaz de virtualizar otros sistemas, vamos a hacer las configuraciones previas a la virtualización en sí.

Bridge:

A diferencia de VMware o de Virtualbox que utilizan sus configuraciones de red propias, KVM utiliza las nativas de linux, lo que nos permite modificar hasta el último detalle de estas.

Teniendo una máquina Debian, en /etc/network/interfaces debemos de tener la siguiente configuracion:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp 

Ahora con el comando "ip" vamos a crear un bridge "volátil" y un brigde permanente. El primer bridge se borrará en el momento en el que reiniciemos nuestro pc, esto hará que si tuviéramos cualquier problema con nuestra configuración de red con reiniciar volvería al momento inicial.
# ip link add br0 type bridge
# ip link set eth0 master br0
# ip l set br0 up 
Con estos comando en la consola, creamos el brigde, hacemos br0 el maestro de eth0 o con otras palabras, conectamos eth0 a el dispositivo tipo bridge y por último levantamos el bridge para que empiece a ser operativo. 

Para hacer un bridge permanente, vamos a editar el fichero /etc/network/interfaces con nuestro editor de texto, la configuración a realizar sería la siguiente:

allow-hotplug br0
iface br0 inet dhcp 
      bridge_ports br0

# ip link add br0 type bridge
# ip link set eth0 master br0
# ip l set br0 up

 Instalación y creación de la máquina virtual:

Para crear una imagen de Debian Jessie, nos descargamos una ISO de Debian netinst y creamos con qemu-img (del paquete qemu-utils) un fichero de imagen que tendrá un máximo de 10GiB y será el disco duro que utilizará nuestra máquina.

$ qemu-img create -f qcow2 jessie.qcow2 10G

Ahora, crearemos una interfaz de red virtual que hará la conexión entre nuestro br0 y nuestra máquina virtual, para realizar esta tarea utilizaremos dispositivos "tap", que tendrán que ser del usuario que vaya a virtualizar.
# ip tuntap add mode tap user manu
# ip l set tap0 master br0
# ip l set tap0 up
El siguiente paso, es asignar una dirección MAC a nuestra nueva interfaz de red, para ello utilizaremos una variable:
$ MAC0=$(echo "02:"`openssl rand -hex 5 | sed 's/\(..\)/\1:/g; s/.$//'`)
Y por fin, vamos a levantar nuestra máquina virtual, para ello ''solo'' tenemos que picar en nuestra consola:
$ kvm -m 512 -hda jessie.qcow2 \
-cdrom debian-8.3.0-amd64-netinst.iso \
-device virtio-net,netdev=n0,mac=$MAC0 \
-netdev tap,id=id=n0,ifname=tap0,script=no,downscript=n0
Si vemos línea a línea el comando:
  1. Asignamos 512 de memoria ram y como disco duro utilice jessie.qcow2
  2. Como cdrom la iso de debian
  3. Le damos un dispositivo de red virtio de nombre n0 y con la dirección MAC creada.
  4. Asociamos el dispositivo n0 de la máquina virtual con la interfaz tap0 y sin utilizar ningún script al levantarla o bajarla.
Después de ejecutar el pequeño comando, nos aparecerá la pantalla de instalación de Debian, en el caso que la máquina virtual que vayamos a utilizar no vaya a tener una carga de trabajo muy fuerte, podemos utilizar la característica de compresión de qemu para hacerla más ligera:
$ qemu-img convert -O qcow2 -c jessie.qcow2 jessie-min.qcow2

Aprovisionamiento ligero

Una característica muy interesante que encontramos con las imágenes qcow2, es la capacidad de hacer aprovisionamiento ligero. Se trata de coger una imagen base y montar varias máquinas desde esa imagen principal. Esto no ayudará a crear máquinas más rápidamente.
$ qemu-img create -b jessie-min.qcow2 -f jessie1.qcow2

Fuente: KVM a pelo