Máquina virtual Xen en Linux
Xen (xen.xensource.com) es un programa que ejecuta máquinas virtuales, de manera que permite tener funcionando varias instancias de diferentes Sistemas Operativos simultáneamente en un mismo ordenador. Se utiliza habitualmente en grandes servidores para abstraer y proteger las aplicaciones poniéndolas en máquinas virtuales diferentes (semejante a una jaula chroot). Además, la técnica utilizando por Xen, denominada paravirtualización, posibilita que las máquinas virtuales Xen pueden ser migradas en vivo entre equipos físicos sin pararlas, muy útil en clusters.
Equivalencias en Windows: VMware.
Xen está formado por los siguientes componentes:
- el hypervisor.
- un parche para el kernel Linux.
- herramientas para la línea de comandos (Xen Tools) y para el entorno gráfico (Xenman).
El hypervisor es la pieza fundamental de Xen: es lo primero que ejecuta GRUB y se encarga de controlar el hardware (CPU, memoria, etc.) y distribuir su uso entre las diversas máquinas virtuales. Xen denomina a las máquinas virtuales dominios y pueden ser de dos tipos:
- dom0: es la máquina virtual que bootea cuando arrancamos el ordenador, el anfitrión, la máquina con privilegios desde donde lanzamos las otras máquinas virtuales.
- domU (dom1, dom2, ...): son las demás máquinas virtuales, guest, unprivileged.
Pueden establecerse varias configuraciones de red para las máquinas virtuales Xen. Nosotros instalaremos la configuración en puente (bridge) que hace que todos los dominios aparezcan en la red como hosts independientes.
Instalar Xen
- Instalar Xen (paquete xen-linux-system-2.6.18-5-xen-686): instalando este paquete se instalará por dependencias el hypervisor (paquete xen-hypervisor-3.0.3-1-i386), que es el archivo que cargará primero GRUB al arrancar (/boot/xen-3.0.3-1-i386.gz) y el kernel Xen (paquete linux-image-xen-686), un kernel que ya incorpora el parche Xen (podemos descargarnos el parche y compilar el kernel desde las fuentes pero es más cómodo instalar el kernel ya compilado).
- Configurar GRUB: después de instalar el paquete con el kernel aparecerá
una entrada en /boot/grub/menu.lst donde se indica que el hypervisor debe cargarse en primer
lugar, antes que el kernel y la imagen initrd.
title Xen 3.0.3-1-i386 / Debian GNU/Linux, kernel 2.6.18-5-xen-686 root (hd0,0) kernel /boot/xen-3.0.3-1-i386.gz module /boot/vmlinuz-2.6.18-5-xen-686 root=/dev/hda1 ro console=tty0 module /boot/initrd.img-2.6.18-5-xen-686 savedefault
- Deshabilitar TLS: por dependencias se instalará el paquete libc6-xen,
en cuyo caso no es necesario deshabilitar TLS. En caso contrario, deshabilitaremos TLS (Thread Local Storage)
para que el rendimiento de Xen no se vea mermado:
# mv /lib/tls /lib/tls.disabled
- Reparto de memoria entre dom0 y el resto de dominios: si al crear un nuevo dominio se nos
informa de que no hay memoria disponible, se puede solucionar limitando la memoria para dom0 mediante
un parámetro al arrancar el kernel, añadiendo en /boot/grub/menu.lst la opción
dom0_mem a la línea kernel (por ejemplo para limitar la memoria a 256 MB):
kernel /boot/xen-3.0.3-1-i386.gz dom0_mem=256M
- Aumentar el número de dispositivos loop: dado que el número máximo
de dispositivos loop que existen en el sistema es por defecto 8 y que cada máquina
virtual usa 2, para arrancar más de 4 máquinas virtuales tendremos que incrementar
este valor. Para ello utilizaremos un parámetro al arrancar el kernel, añadiendo en
/boot/grub/menu.lst la opción max_loop a la línea module
(por ejemplo para permitir montar hasta 64 dispositivos loop):
module /boot/vmlinuz-2.6.18-xen-686 root=/dev/hda1 ro console=tty0 max_loop=64
Para crear los dispositivos loop, por ejemplo /dev/loop8, usaremos el comando:
# mknod /dev/loop8 b 7 8
- Configurar la red: para que dom0 funcione en modo puente
(paquete bridge-utils) editaremos /etc/xen/xend-config.sxp,
comentaremos la línea:
# (network-script network-dummy)
y descomentaremos las siguientes líneas:
(network-script network-bridge) (vif-script vif-bridge) (dom0-min-mem 196) (dom0-cpus 0)
- Reiniciar con el kernel Xen: reiniciamos el ordenador con el kernel Xen y veremos en
los mensajes de inicio cómo se carga Xen. Para comprobar que está realmente funcionando
verificaremos si aparece dom0 en la lista de máquinas virtuales:
# xm list Name ID Mem(MiB) VCPUs State Time(s) Domain-0 0 941 2 r----- 3441.8
Para ver los mensajes de inicio del hypervisor:
# xm dmesg
Para obtener información sobre Xen:
# xm info
Para comprobar que se ha activado el puente:
# ifconfig eth0 Link encap:Ethernet HWaddr 00:10:60:BA:05:BF inet addr:192.168.0.5 Bcast:192.168.0.255 Mask:255.255.255.0 inet6 addr: fe80::210:60ff:feba:5bf/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:2529 errors:0 dropped:0 overruns:0 frame:0 TX packets:59 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:2312102 (2.2 MiB) TX bytes:7933 (7.7 KiB) peth0 Link encap:Ethernet HWaddr FE:FF:FF:FF:FF:FF inet6 addr: fe80::fcff:ffff:feff:ffff/64 Scope:Link UP BROADCAST RUNNING NOARP MTU:1500 Metric:1 RX packets:16467 errors:0 dropped:43520 overruns:0 frame:0 TX packets:71 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:14040624 (13.3 MiB) TX bytes:8821 (8.6 KiB) vif0.0 Link encap:Ethernet HWaddr FE:FF:FF:FF:FF:FF inet6 addr: fe80::fcff:ffff:feff:ffff/64 Scope:Link UP BROADCAST RUNNING NOARP MTU:1500 Metric:1 RX packets:59 errors:0 dropped:0 overruns:0 frame:0 TX packets:2532 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:7933 (7.7 KiB) TX bytes:2315196 (2.2 MiB) xenbr0 Link encap:Ethernet HWaddr FE:FF:FF:FF:FF:FF inet6 addr: fe80::200:ff:fe00:0/64 Scope:Link UP BROADCAST RUNNING NOARP MTU:1500 Metric:1 RX packets:27 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:1350 (1.3 KiB) TX bytes:0 (0.0 b)
- Scrip de inicio de Xen: para arrancar/parar xend, el demonio de Xen,
disponemos del script de inicio /etc/init.d/xend. Por ejemplo, si modificamos la
configuración podremos reiniciar Xen con los nuevos parámetros con el comando:
# /etc/init.d/xend restart
Crear y manejar máquinas virtuales Xen
- Instalar Xen Tools (xen-tools.org, paquete xen-tools): las Xen Tools son una serie de scripts que facilitan la administración de máquinas virtuales Xen.
- Crear la imagen de un domU: para crear la imagen de un nuevo domU el comando es:
# xen-create-image --hostname xen01 --ip 192.168.0.130
- --hostname: nombre del nuevo dominio.
- --ip: dirección IP del nuevo dominio.
Este comando hace bastantes cosas:
- creará la imagen de xen01 en /home/xen/domains/xen01/disk.img, con formato ext3.
- creará la swap en /home/xen/domains/xen01/swap.img
- instalará el sistema mediante debootstrap (igual que chroot) usando el mirror seleccionado.
- nos pedirá un password para root y creará en xen01 los mismos usuarios que tiene dom0.
- creará el fichero de configuración /etc/xen/xen01.cfg que se usará para activar xen01.
El archivo imagen del nuevo dominio /home/xen/domains/xen01/disk.img es la imagen de un sistema de ficheros, por lo que puede montarse y comprobarse su contenido:
# mount -o loop /home/xen/domains/xen01/disk.img /mnt
Vemos que tiene la estructura completa de un sistema Linux de tamaño reducido:
# ls /mnt bin dev home lib media opt root srv tmp var boot etc initrd lost+found mnt proc sbin sys usr # df /mnt S.ficheros Bloques Usado Dispon Uso% Montado /home/xen/domains/xen01/disk.img 4128448 388268 3530468 10% /mnt
Para comprobar que el nuevo dominio ha sido creado y su configuración:
# xen-list-images Name: xen01 Memory: 128 IP: 192.168.0.130
El comando que crea las imágenes de los nuevos dominios (xen-create-image) utiliza el archivo de configuración /etc/xen-tools/xen-tools.conf, que contiene los parámetros comunes a todos los domU que creemos (en la línea de comandos sólo pondremos los parámetros específicos de cada dominio, --hostname y --ip). Su contenido será similar a:
# Directorio por defecto para las imágenes dir = /home/xen # Método para obtención de los paquetes debootstrap = 1 # Opciones de disco y tamaño size = 4Gb # Disk image size. memory = 128Mb # Memory size swap = 256Mb # Swap size fs = ext3 # Use the ext3 filesystem for the disk image. dist = etch # Default distribution to install. image = sparse # Specify sparse vs. full disk images. # Configuración de red gateway = 192.168.0.1 netmask = 255.255.255.0 # Establecer password para root al crear la imagen passwd = 1 # Mismos usuarios que dom0 accounts = 1 # Kernel para el nuevo dominio kernel = /boot/vmlinuz-`uname -r` initrd = /boot/initrd.img-`uname -r` # Mirror a utilizar por debootstrap mirror = ftp://ftp.rediris.es/debian/
- Activar un domU: una vez creados los ficheros de imagen y swap del nuevo dominio
usaremos el comando xm (Xen management user interface) para activarlo:
# xm create xen01.cfg Using config file "/etc/xen/xen01.cfg" Started domain xen01
El comando xm utiliza el archivo de configuración /etc/xen/xen01.cfg que se generó al crear la imagen del dominio y cuyo contenido será similar a:
# Configuration file for the Xen instance xen01, created # by xen-tools 3.7 on Fri May 18 00:19:16 2007. # Kernel + memory size kernel = '/boot/vmlinuz-2.6.18-5-xen-686' ramdisk = '/boot/initrd.img-2.6.18-5-xen-686' memory = '128' # Boot device root = '/dev/sda2 ro' # Storage devices disk = ['file:/home/xen/domains/xen01/swap.img,sda1,w', 'file:/home/xen/domains/xen01/disk.img,sda2,w'] # Hostname name = 'xen01' # Networking vif = [ 'ip=192.168.0.130,mac=00:16:3E:9C:64:6E' ] # Behaviour on_poweroff = 'destroy' on_reboot = 'restart' on_crash = 'restart'
Para comprobar que el nuevo dominio funciona:
# xm list Name ID Mem(MiB) VCPUs State Time(s) Domain-0 0 875 2 r----- 4135.2 xen01 2 128 1 -b---- 4.5 # ping 192.168.0.130 PING 192.168.0.130 (192.168.0.130) 56(84) bytes of data. 64 bytes from 192.168.0.130: icmp_seq=1 ttl=64 time=0.206 ms ... # ssh [email protected] [email protected]'s password: ***** francis@xen01:/$
- Manejar un domU
Para abrir un shell e iniciar sesión en el nuevo dominio:
# xm console xen01 Debian GNU/Linux 4.0 xen01 tty1 xen01 login: francis Password: ***** francis@xen01:/$
Para comprobar que la red está correctamente configurada haremos algunos ping (xen01 tendrá los mismos servidores DNS que dom0, de lo contrario los añadiremos a /etc/resolv.conf):
$ ping 192.168.0.1 PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data. 64 bytes from 192.168.0.2: icmp_seq=1 ttl=64 time=1.206 ms ... $ ping 80.58.61.250 PING 80.58.61.250 (80.58.61.250) 56(84) bytes of data. 64 bytes from 80.58.61.250: icmp_seq=1 ttl=119 time=38.2 ms ... $ ping www.orange.es PING a443.x.akamai.net (194.224.66.105) 56(84) bytes of data. 64 bytes from 194.224.66.105: icmp_seq=1 ttl=55 time=41.6 ms ...
Para salir de la consola del domU:
francis@xen01:/$ <Ctrl + AltGr + ]> root@asterix:/#
Para apagar el dominio xen01:
# xm shutdown xen01
Atención
Si hacemos shutdown sobre dom0 se apagarán todos los dominios.
- Migrar dominios en caliente: para habilitar la posibilidad de migrar dominios en caliente
a otro equipo con Xen instalado editaremos en /etc/xen/xend-config.sxp las siguientes líneas:
(xend-relocation-port 8002) (xend-relocation-address '') (xend-relocation-server yes) (xend-relocation-hosts-allow '') (xend-address '') #(xend-address localhost)
Y ejecutaremos (por ejemplo para migrar el dominio xen01 a pc300):
# xm migrate --live xen01 pc300
En unos segundos podremos ver con xm list que xen01 ha migrado al host pc300.
Atención
- La imagen del dominio tiene que estar en un filesystem compartido.
- Ambos ordenadores tienen que tener un procesador de la misma familia. - Manejar Xen desde el entorno gráfico: con Xenman (xenman.sourceforge.net, paquete xenman, ejecutarlo como root), nos permite administrar las máquinas virtuales Xen a través de una GUI.
- Ejecutar las X en un domU: en un domU no podemos arrancar las X desde
una consola por la sencilla razón de que buscará la tarjeta gráfica y no la
encontrará, obteniendo un error similar a:
# startx Fatal server error: xf86OpenConsole: Cannot open /dev/tty0 (No such file or directory)
Pero lo que sí podemos hacer es iniciar una sesión X Window remota vía SSH en un domU desde dom0: eso nos permitirá ejecutar en el domU un entorno gráfico y ver su salida en dom0.
También podemos iniciar una sesión X Window remota vía VNC.
Crear un entorno de 4 máquinas virtuales Xen para un cluster
Xen nos permite crear un cluster virtual en un único ordenador sobre un grupo de máquinas virtuales Xen. Veamos cómo crear un entorno de 4 máquinas virtuales Xen (4 domU, 1 master + 3 esclavos) para poder configurar posteriormente un cluster PVM, MPI, etc.
- Instalamos Xen en nuestra máquina.
- Creamos 4 domU: uno de ellos (master) se encargará de administrar el cluster, los otros 3 (slave1, slave2, slave3) serán los esclavos.
- DNS local: en cada domU añadiremos en el archivo
/etc/hosts sus IPs y sus nombres:
192.168.0.200 master 192.168.0.201 slave1 192.168.0.202 slave2 192.168.0.203 slave3
- Filesystem compartido: el master exportará mediante NFS
(paquete nfs-kernel-server) su directorio /home, añadiendo en
el archivo /etc/exports la línea:
/home 192.168.0.0/255.255.255.0(rw,sync)
En los esclavos usaremos mount para montar el directorio exportado:
# mount -t nfs 192.168.0.200:/home /home
Para que los esclavos lo monten al arrancar editaremos /etc/fstab y añadiremos la línea:
# File_system Mount_point Type Options Dump Pass 192.168.0.200:/home /home nfs rw,hard,intr 0 0
Comprobaremos en cada esclavo que podemos escribir en /home:
# touch delete.me
- Habilitar SSH sin password: para que el master pueda ejecutar
comandos remotos en los esclavos vía SSH instalaremos en los esclavos el
servidor SSH (paquete openssh-server) y los configuraremos para que
acepten conexiones desde el master sin pedir password ni pass-phrase (utilizaremos
el mismo usuario en todas las máquinas). Para ello:
- crearemos una clave RSA en el master:
francis@master:~$ ssh-keygen -t rsa -f ~/.ssh/id_rsa
- activaremos ssh-agent en el master para que no nos pida la pass-phrase:
francis@master:~$ eval `ssh-agent -s` Agent pid 12297 francis@master:~$ ssh-add Enter passphrase for /home/francis/.ssh/id_rsa: Identity added: /home/francis/.ssh/id_rsa (/home/francis/.ssh/id_rsa)
- copiaremos la clave pública (~/.ssh/id_rsa.pub) en todos los esclavos:
francis@master:~$ scp ~/.ssh/id_rsa.pub francis@slave1:~/.ssh/id_rsa.pub
- la añadiremos al final del fichero ~/.ssh/authorized_keys en cada esclavo:
francis@slave1:~$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
- y comprobaremos que podemos iniciar sesión SSH en los esclavos sin que nos pida password:
francis@master:~$ ssh slave1 francis@slave1:~$
15 Comentarios en “Máquina virtual Xen en Linux”
Deja un comentario
Para realizar la instalación de la maquina virtual me pide conexión a Internet para acceder a los repositorio, ¿como puedo hacer esto si mi acceso a Internet es por medio de red inalámbrica? Tengo los paquetes para el kernel xen, pero cuando configura la tarjeta esta se conecta y desconecta constantemente sin permitir la conexión correctamente. Tengo una tarjeta de red ipw3945 de un laptop y con esta me conecto correctamente desde un kernel distinto a el xen. Estoy tratando de configurarla para la conexión peth2 para mi caso. Agradezco de antemano a los que me puedan colaborar.
mmm creo q tienes q descargarte los bootstrap, los cuales yo tambien quiero y no se como conseguirlos… si alquien sabe como instalar los domU sin tener conexion a internet…
APOOOOOOOOOOOOOOOOOOOYENNOS!!!!
mi correo es [email protected]
Hola, lo primero felicitarte por el gran documento. Te escribo para ver si me das luz en mi problema. Llevo 5 dias intentando instalar Windows (lo he intentado con 2000, xp, xp sp2, 2000 server) en Xen.
Todo funciona a la perfección con maquinas virtuales GNU/Linux (knoppix, wifiway, debian desde cd) pero al meter el cd de XP (por ejemplo ya que en todas hace lo mismo) comienza la instalacion sin ningun problema, me sale el “Pulse F6 para drivers de otro fabricante” el “F2 para ASR” se pone a cargar archivos y de repente, antes de sacara el “Lea el Cluster y pulse F8″ casca y se reinicia.
Mi sistema es Debian 4.0r3 etch. He probado con Xen 3.2 (de backports) con Xen 3.0.3.1 (estable a este momento en debian) con amd64, con i686 y ocurre lo mismo siempre.
Podrias arrojar algo de luz a mi Xen ;-)
Mil gracias por adelantado.
Juanmi date una vuelta por aca, para ver si te sirve: http://doc.pablolibo.com.ar
hola,tengo un problema con mi maquina virtual instalada, mi host es una suse linux enterprise server 10 y tengo mi máquina virtual igual con suse, todo funciona bien pero cuando apago mi máquina host o se va la luz, pierdo mi máquina virtual,hay una opción donde dice que puedo guardar mi máquina virtual…intento guardarla y se queda haciendo el proceso pero no aparece nada más…¿como puedo resolver este problema y con que extensión guardo mi máquina?¿Hay alguna otro procedimiento para no tener que instalarla de nuevo?
primeramente, instala debian etch 4.0 y ya tengo instalado xen y ya pude crear mi maquina virtual en xen
lo que no se hacer es como poder instalar un sistema operativa dentro de mi maquina virtual xen
quisiera instalar un debian ahi en mi maquina virtual
gracias espero y me puedan dar unos tips, soy principiante en linux
Hola,
Primeramente felicitarte por esta guia tan lograda.
Mi duda es la siguiente, tengo un PC con dos particiones (una Linux y una Windows) y me gustaria crear un servidor como el que explicas en la particion Linux (solo es para pruebas, un trabajo de la uni, pero tiene que funcionar claro), entonces mi duda es:
¿puedo montar el servidor sin problemas o corro el riesgo de perder la particion Windows, o no poder arrancarla, o algo por el estilo? ¿me seguira dando a elegir que SO ejecutar al arrancar el PC?
Espero que no tardes mucho en contestar.
Gracias anticipadas.
[...] Cómo instalar y configurar Xen sobre debian lenny [...]
Hola..
y como uso el puerto serie fisico desde la maquina virtual.. ?
estoy usando minicom con ttyS0, hvc0, y no funciona..
alguna idea..
saludos y gracias..
Hola,
quería saber si es posible de alguna forma configurar Xen para que se cargue una máquina virtual y esa sea posible verla desde el mismo equipo local. Lo que querría es digamos tener una máquina virtual creada que sea independiente del hardware subyacente. Esa independencia la daría Xen. De forma que el ordenador cargara Xen, luego la máquina virtual, pero que se pudiera acceder directamente a esta máquina virtual como cuando carga una sistema operativo normal. No se si me he explicado bien.
Un saludo
Felicitaciones por el post!! muy bueno!
a ver si alguien me puede iluminar, me es IMPOSIBLE conectarme por vnc al domU en el que estoy instalando WinXP
> que tengo que instalar?
> que tengo que configurar?
> como me tengo que conectar?
luego de “xm create win.cfg”, me fijo con “netstat -na” y no veo ningun puerto vnc abierto…
Saludos!
Muchas Gracias!
Hola felicitaciones, ahora la pregunta…como puedo instalar una maquina virtual sin que me pida una repo de red, tengo la iso en el equipo pero cuando trato de instalar me pide http
Gracias
Buenas.. Primeramente felicitarte por el post y mi pregunta es: tengo instalado un Debian 6 y en esta version vienen supuestamente los paquetes de xen pero el tipo de grub es diferente ya no lleva el menu.lst si no que es un follon de algo de exportar algo desde 40_custom como instalo xen en mi maquina? espero me puedas contestar mis dudas me mandes un mail o lo que sea
gracias de antemano
Muy buen documento, bien explicado y entendible, ahora sólo falta ponerlo en práctica.
Enhorabuena por el post, me ha servido de mucha ayuda. Pero tengo una duda:
-Cómo accedo a una máquina virtual que ya está encendida? Es decir, imaginemos que quiero administrar mi servidor web virtual: Arranco la máquina con ‘xm create virtualweb’ y accedo desde consola con ‘xm console virtualweb’, hago lo que tengo que hacer y hago un ‘logout’. Entonces vuelvo a la pantalla de login. Cierro la terminal y mi servidor queda corriendo.
¿Cómo accedo de nuevo a la máquina virtual? Si hago un ‘xm console virtualweb’ no responde y no se cómo hacerlo!
Saludos!