Virtulización con KVM-Cómo recuperar un servidor de forma rápida
Contents
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,boot
on" (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.