Virtulización con KVM-Cómo recuperar un servidor de forma rápida

From zerutek.com
Jump to: navigation, search

Virtulización vía KVM - Cómo recuperar un servidor de forma "rápida"

Imagina un servidor que muere por causas ajenas, y no tienes ni tiempo ni dinero para arreglarlo, pero necesitas que funcione cuanto antes. Si no has perdido los datos, esta es tu receta.

Ingredientes

  • Una caja externa USB
  • Una máquina con posibilidades de virtualización. Lenovo a61e
  • Mucha memoria ram
  • kernel > 2.6.20
  • Una distribución medianamente moderna y con soporte KVM.

En este caso la máquina a virtualizar era una Debian Sarge, y la máquina anfitriona un Ubuntu Hardy Heron.

Elaboración

Se instalan los paquetes necesarios (y todas sus dependencias) para que funcione KVM:

  • kvm
  • bridge-utils (Para montar "bridges" de red)
  • uml-utilities (Para utilizar dispositivos tun/tap)

Se coloca el disco de la máquina a virtualizar en una caja externa USB.

Se enchufa la caja al "anfitrión" y se anota la unidad asignada (/dev/sdf).

Se carga el módulo 'kvm' del kernel, este se encargará de cargar el módulo 'kvm-amd' o 'kvm-intel' que corresponda:

modprobe kvm

Se arranca la máquina virtual, con 512M de RAM, asignándole una MAC y asignándole una interfaz de red "tap". La visualización vía VNC:

kvm -hda /dev/sdb -m 512 -boot c -net nic,macaddr 00:1d:60:f0:f8:18 -net tap,script no,ifname=tap0 -vnc localhost:1,none -k es

La red

Para la red he optado por un método bastante "bruto", donde creo una interfaz virtual, que la coloco en "bridge" con la física, asignándole la IP al "bridge".

Forma Manual

  • Se crea el dispositivo virtual tap0

tunctl -t tap0

  • Se crea el dispositivo de "bridge" br0

brctl addbr br0

  • Se añade al "bridge" br0 el dispositivo virtual tap0

brctl addif br0 tap0

  • Se añade al "bridge" br0 el dispositivo físico eth0

brctl addif br0 eth0

  • Se asigna una IP al bridge

ifconfig br0 192.168.1.12 netmask 255.255.255.0

  • Configurar rutas y demás para que la máquina llegue a dónde tenga que llegar)

Forma Automática

Para esto utilizo el '/etc/network/interfaces', para distribuciones herederas de Debian:

auto br0
iface br0 inet static
pre-up tunctl -t tap0 && tunctl -t tap1
post-down tunctl -d tap0 && tunctl -d tap1 && brctl delbr br0
	address 192.168.1.12
	netmask 255.255.255.0
	gateway 192.168.1.254
	dns-nameservers LOS QUE SEAN
bridge_ports eth0 tap0 tap1

Notas

Seguro que hay formas mejores de hacer algunas cosas, pero así funciona.

Hay que automatizar todo el proceso, así como levantar la máquina sin utilizar las X (por medio de VNC), pero hasta que no apague el anfitrión, así está funcionando.

El router ADSL al que está conectado el anfitrión se vuelve "gilipollas" al cabo de unos días, posiblemente por algún efecto colateral del "bridge", pero quitar este supondría reconfigurar el los NAT's configurados en el router.

Anexo

A partir de la versión de kernel 2.6.25, existe soporte para paravirtualizar tanto los discos como la red. Para conseguirlos hay que definir los discos con la opciones "-drive,ifvirtio,booton" (no vale -hda o similar), y la red con las opciones "-net model=virtio", sin olvidarnos de cargar los módulos "virtio_blk" y "virtio_net" en la máquina virtualizada.