¡Esta es una revisión vieja del documento!
Por Félix Molinuevo, FMSI Sistemas de Informática ::: Fecha creación: 20110628
La tecnología de virtualización (VT, virtualization technology) es una serie de características de los procesadores para mejorar el rendimiento de las máquinas virtuales (VM, virtual machine). Se trata de un set de instrucciones que descargan en los propios microprocesadores algunas tareas para compartir los recursos físicos entre las VMs.
KVM es un sistema de virtualización que aprovecha esas características de virtualización de los procesadores x86, tanto de AMD como de Intel. Permite virtualizar diversos sistemas operativos, entre los que se cuentan GNU/Linux, FreeBSD, OpenBSD, NetBSD, Windows XP, Windows 7, Windows Server 2003/2008, y otros.
Necesita algunos módulos en el kernel de Linux, pero que ya vienen por defecto en la rama estable. Utiliza algunos utilitarios y sistemas de Qemu, con el que está muy relacionado, y permite con una sola línea de comandos crear máquinas virtuales. A través de libvirt se puede tener una interfaz gráfica para manejarlo.
Antes de comenzar el trabajo de configuración, se debe revisar si el hardware tiene soporte para virtualización, tanto el microprocesador como el motherboard.
Para ver si el micro soporta virtualización, se debe observar entre los sets de instrucciones del procesador, si se encuentran los de virtualización:
egrep --color '(vmx|svm)' /proc/cpuinfo
Si alguno de esos flags está presente, el procesador soporta virtualización:
SVM → AMD
VMX → Intel
También se debe revisar en la BIOS del motherboard, que la VT esté activada. Cada motherboard es distinto en esto, así que se debe consultar el manual del equipo.
Puede ocurrir que el motherboard o el microprocesador no soporten virtualización; en este caso, no se podrá usar KVM.
Se debe configurar un bridge para simplificar el acceso de las VMs a la red local.
Para configurar la interfaz de red bridge, seguir los pasos descritos para Qemu.
Luego, para tener acceso en forma transparente desde las VMs, se debe configurar el host para actuar como gateway:
echo "1" > /proc/sys/net/ipv4/ip_forward iptables -t nat -A POSTROUTING -o br0 -j MASQUERADE
Iniciar una VM con KVM, y bridging:
qemu-system-x86_64 -hda dsrv01.qcow2 -net nic,macaddr=00:16:3E:11:12:11 -net tap,script=/etc/kvm/kvm-ifup
Tiene que ser una imagen raw o una unidad LVM. Los otros formatos no pueden incrementarse. Con la unidad LVM se procede de similar manera, sólo que se redimensiona la unidad primero y luego se siguen los pasos para redimensionar el disco internamente. El procedimiento sirve incluso si el sistema operativo guest es Windows.
kvm-img convert -O raw discovirtual.qcow2 discovirtual.raw
dd bs=1 if=/dev/zero of=discovirtual.raw seek=15G count=1 conv=notrunc
Hecho esto, se puede ver el tamaño nuevo con
kvm-img info discovirtual.raw
kvm-img convert -O qcow2 discovirtual.raw discovirtual.qcow2
Para que el agregado de dispositivos PCI funcione, en el guest se deben cargar los siguientes módulos:
acpiphp pci_hotplug
Pueden ponerse en /etc/modules (en Debian GNU/Linux, o el que corresponda a la distribución en cuestión) para que sean cargados en forma automática.
Agregar una unidad de almacenamiento en caliente:
pci_add pci_addr=auto storage file=/kvm/imgs/nuevo.img,if=scsi
También puede usarse if=virtio, pero IDE no es agregable en caliente.
Agregar una tarjeta de red en caliente:
pci_add pci_addr=auto nic model=rtl8139
Cambiar un CD en la compactera (CDROM):
info block # Muestra el listado de dispositivos de bloques change ide1-cd0 /kvm/isos/dsl-4.4.10.iso
Crear snapshot:
kvm-img snapshot -c "win200301-"`/bin/date +"%Y%m%d-%H%M%S"` /datos/kvm/imgs/win200301.qcow2
Listas snapshots de una imagen:
kvm-img snapshot -l /datos/kvm/imgs/win200301.qcow2
Eliminar snapshots de una imagen:
kvm-img snapshot -d win200301-20120317-1037 /datos/kvm/imgs/win200301.qcow2
Aplicar una snapshot guardada (volver disco a una imagen salvada):
kvm-img snapshot -a win200301-20120317-1037 /datos/kvm/imgs/win200301.qcow2