Herramientas de usuario

Herramientas del sitio


servidores:virtualizacion:kvm

KVM: instalación y tips

Por Félix Molinuevo, FMSI Sistemas de Informática ::: Fecha creación: 20110628

Introducción

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.

Comenzando la configuración

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.

Bridge

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

Incrementar el tamaño de discos virtuales

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.

  1. Realizar una copia de resguardo de la imagen
  2. Si la imagen está en otro formato que no sea raw, debe ser convertida previamente:
    kvm-img convert -O raw discovirtual.qcow2 discovirtual.raw
  3. Agrandar la imagen con el comando dd. Por ejemplo, si se quiere llevar el tamaño del disco virtual discovirtual.raw a 15GB, ejecutar:
    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
  4. Luego iniciar con una distro que permita redimensionar las particiones del disco virtual, como System Rescue CD, utilizando como disco virtual el disco con el nuevo tamaño. En esta distribución, se puede usar por ejemplo Gparted
  5. Si se desea, como paso final del redimensionamiento, se puede convertir la imagen otra vez a qcow2:
    kvm-img convert -O qcow2 discovirtual.raw discovirtual.qcow2
  6. Finalmente, iniciar el sistema operativo guest que estaba en el disco redimensionado para ver si todo quedó correcto. En el caso de Windows, realizará varios reinicios, primero luego de realizar un checkdisk y seguramente luego de reconocer el nuevo tamaño de disco lo hará nuevamente.

Reducir el tamaño de discos virtuales

  1. Primero se debe reducir el tamaño del sistema de archivos de la última partición, para dejar lugar a la reducción del disco.
  2. Para evitar errores de cálculo, quizá sea buena idea reducir un poco más el tamaño del sistema de archivos, que lo que realmente sea necesario para reducir el disco. Después se puede aumentar su tamaño otra vez si es necesario.
  3. Por ejemplo, si un disco de 120GB quiere ser reducido a 30GB, utilizar el parámetro resize de qemu-img:
    qemu-img resize imagen.raw 30G
  4. Finalmente, si se desea se puede convertir otra vez ese disco a qcow2

Montar discos RAW

  1. Primero se debe ver qué particiones hay con el utilitario kpartx:
    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.

  2. Ese número de bloques del comienzo de la partición debe ser multiplicado por 512 bytes, dando así el offset que se debe usar para montar. Por ejemplo, si se desea montar la partición 2 de una unidad que tiene un Windows 8.1, el número de bloques donde comienza la segunda puede ser algo como 718848. Multiplicando este valor por 512 bytes da 368050176. Este valor se usará en el comando mount, en el parámetro offset
  3. Entonces, para montar esa partición considerando los números de ejemplo anteriores:
    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

Agregado de dispositivos al vuelo

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

Snapshots (qcow2)

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
    

Direcciones IP externas en las VMs

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.

Tips

Windows: apagado automático

  1. Inicio/Ejecutar:
    regedit
  2. Cambiar o agregar la siguiente variable asignándole valor 1:
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows]
    "ShutdownWarningDialogTimeout"=dword:00000001

    Y cerrar el editor de la registry

  3. Inicio/Ejecutar:
    gpedit.msc
  4. Ingresar a las siguientes ramas:
    Directiva de equipo local -> Configuracion del equipo -> Configuración de Windows -> Configuración de seguridad -> Directivas locales -> Opciones de seguridad
  5. Allí activar la opción “Apagado: permitir apagar el sistema sin tener que iniciar sesión”

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.

  1. Ingresar a las siguientes ramas:
    Directiva de equipo local -> Configuracion del equipo -> Plantillas administrativas -> Sistema
  2. Deshabilitar las siguientes configuraciones:
    "Activar la caracteristica Datos de estado del rastrador de eventos de apagado"
    "Mostrar rastreador de eventos y apagado"

Bibliografía

servidores/virtualizacion/kvm.txt · Última modificación: 2017/02/27 14:04 por fmolinuevo