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 2008/2012, 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 y virt-manager 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.
En los Debian más nuevos, se debe revisar el script en /etc/kvm que levanta las interfaces TAP, y eventualmente reemplazarlo por:
#! /bin/sh # Script to bring a network (tap) device for qemu-kvm up # The idea is to add the tap device to the same bridge # as we have default routing to. switch=br0 /sbin/ifconfig $1 0.0.0.0 up /usr/sbin/brctl addif $switch $1
En caso contrario, los guests no tendrán conectividad.
Además, quizá haya que configurar el desactivado de IPv6 en sysctl.conf:
net.bridge.bridge-nf-call-ip6tables = 0 net.bridge.bridge-nf-call-iptables = 0 net.bridge.bridge-nf-call-arptables = 0 net.bridge.bridge-nf-filter-vlan-tagged = 0
Nota: según la configuración del host, puede ser necesario o no realizar algunos pasos de los indicados previamente.
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
qemu-img resize imagen.raw 30G
kpartx -l discovirtual.raw
Cada partición tendrá un nombre y un número de bloque donde comienza. Por ejemplo, si es un particionamiento compatible con DOS (deprecated), la primer partición comenzará en un bloque 63 en general. Si es más moderno comenzará en 2048.
mount -o ro,loop,offset=368050176 win8.raw /mnt/win8
Muy importante: se debe recordar desmontar esa partición antes de volver a iniciar la máquina virtual
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
Si es necesario usar direcciones IP externas en las máquinas virtuales, se debe configurar en el Shorewall del host el servicio de proxyarp, según se indica en http://shorewall.net/ProxyARP.htm
En la configuración en que lo probamos, las VMs se encuentran sobre una interfaz interna, br0, hay una conexión a Internet con IP fija en eth1, y las VMs tienen cada una su propia IP externa dentro de la misma red que la eth1 del host.
Si se necesita que las VMs tengan además una dirección IP interna, es decir, si es necesario armar una intranet detrás del host y firewall, esas interfaces internas deben ser configuradas sin un gateway interno, o bien configurar como gateway por defecto el gateway externo. Esto para lograr que las conexiones de salida sean ruteadas por la interfaz externa, en vez de por la interfaz interna.
regedit
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows] "ShutdownWarningDialogTimeout"=dword:00000001
Y cerrar el editor de la registry
gpedit.msc
Directiva de equipo local -> Configuracion del equipo -> Configuración de Windows -> Configuración de seguridad -> Directivas locales -> Opciones de seguridad
En sistemas como Windows Server 2008 R2 también se debe deshabilitar el “Rastreador de eventos (Event Tracker)” que es el encargado de preguntar el motivo del apagado.
Directiva de equipo local -> Configuracion del equipo -> Plantillas administrativas -> Sistema
"Activar la caracteristica Datos de estado del rastrador de eventos de apagado" "Mostrar rastreador de eventos y apagado"