Virtualización · 9 min read · Dec 09, 2025

Paravirtualización Con Xen 4.0 En Debian Squeeze (AMD64)

Paravirtualización Con Xen 4.0 En Debian Squeeze (AMD64)

Versión 1.0
Autor: Falko Timme
Sígueme en Twitter

Este tutorial proporciona instrucciones paso a paso sobre cómo instalar Xen 4.0 en un sistema Debian Squeeze (6.0) (AMD64) y crear invitados paravirtualizados (no confundir con invitados totalmente virtualizados, es decir, virtualización de hardware (HVM)).

Xen te permite crear sistemas operativos invitados (sistemas operativos nix como Linux y FreeBSD), llamadas “máquinas virtuales” o domU s, bajo un sistema operativo anfitrión (dom0). Usando Xen puedes separar tus aplicaciones en diferentes máquinas virtuales que son totalmente independientes entre sí (por ejemplo, una máquina virtual para un servidor de correo, una máquina virtual para un sitio web de alto tráfico, otra máquina virtual que sirve los sitios web de tus clientes, una máquina virtual para DNS, etc.), pero aún así usar el mismo hardware. Esto ahorra dinero, y lo que es aún más importante, es más seguro. Si la máquina virtual de tu servidor DNS es hackeada, no tiene efecto en tus otras máquinas virtuales. Además, puedes mover máquinas virtuales de un servidor Xen a otro.

¡No emito ninguna garantía de que esto funcione para ti!

1 Nota Preliminar

Estoy usando un sistema Debian Squeeze (x86_64) con el nombre de host server1.example.com y la dirección IP 192.168.0.100 como el sistema anfitrión (dom0). (La configuración puede diferir ligeramente si estás en un sistema i386). También usaré Debian Squeeze para las máquinas virtuales (domU) (pero también mostraré los cambios que necesitas si deseas instalar un invitado Ubuntu Maverick).

Esta guía explicará cómo configurar máquinas virtuales basadas en imágenes y también máquinas virtuales basadas en LVM.

2 Instalando Xen

Para instalar Xen, simplemente ejecutamos

apt-get install xen-hypervisor xen-linux-system xen-utils xenstore-utils xenwatch xen-tools

Después abrimos /etc/modules y nos aseguramos de que tengamos la línea loop max_loop=64 en él (este paso es necesario solo si deseas crear máquinas virtuales basadas en imágenes - puedes omitirlo si deseas crear máquinas virtuales basadas en LVM):

vi /etc/modules

| [...] loop max_loop=64 |

A continuación, abrimos /etc/xen/xend-config.sxp…

vi /etc/xen/xend-config.sxp

… y descomentamos/agregamos la línea (network-script ‘network-bridge antispoof=yes’) y comentamos todas las demás líneas (network-script …) (antispoof=yes habilita el firewall de Xen que previene que una VM use una dirección IP que no se le permite usar, como, por ejemplo, la dirección IP de tu puerta de enlace). También asegúrate de que la línea (vif-script vif-bridge) esté habilitada:

| [...] (network-script 'network-bridge antispoof=yes') [...] (vif-script vif-bridge) [...] |

Luego reinicia el sistema:

reboot

Ejecuta

uname -r

y tu nuevo kernel de Xen debería aparecer:

root@server1:~# uname -r
2.6.32-5-xen-amd64
root@server1:~#

Ahora ejecuta

xm dmesg 

Si obtienes una salida como esta…

root@server1:~# xm dmesg
¡ADVERTENCIA! No se puede encontrar información del hipervisor en sysfs!
Error: No se puede conectar a xend: No existe tal archivo o directorio. ¿Está xend en ejecución?
root@server1:~#

… esto significa que solo estás ejecutando un kernel listo para Xen, pero no el hipervisor Xen en sí (lo que significa que no podrás iniciar máquinas virtuales). Para cambiar esto, cambia el orden de arranque de tus kernels de la siguiente manera y actualiza el cargador de arranque GRUB:

mv /etc/grub.d/10_linux /etc/grub.d/50_linux
update-grub2

Esto asegura que la próxima vez que arranques, el hipervisor Xen se cargue.

Reinicia de nuevo:

reboot

Después,

xm dmesg

debes mostrarte que el hipervisor está en ejecución:

root@server1:~# xm dmesg
(XEN) Versión Xen 4.0.1 (Debian 4.0.1-2) ( [email protected]) (gcc versión 4.4.5 (Debian 4.4.5-10) ) Mié Ene 12 14:04:06 UTC 2011
(XEN) Cargador de arranque: GRUB 1.98+20100804-14
(XEN) Línea de comando: placeholder
(XEN) Información de video:
(XEN)  VGA es modo texto 80x25, fuente 8x16
(XEN)  Métodos VBE/DDC: V2; tiempo de transferencia EDID: 1 segundos
(XEN) Información del disco:
(XEN)  Se encontró 1 firma MBR
(XEN)  Se encontraron 1 estructuras de información EDD
(XEN) Mapa de RAM Xen-e820:
(XEN)  0000000000000000 - 000000000009f000 (usable)
(XEN)  000000000009f000 - 00000000000a0000 (reservado)
(XEN)  00000000000e0000 - 0000000000100000 (reservado)
(XEN)  0000000000100000 - 00000000affa0000 (usable)
(XEN)  00000000affa0000 - 00000000affae000 (datos ACPI)
(XEN)  00000000affae000 - 00000000afff0000 (NVS ACPI)
(XEN)  00000000afff0000 - 00000000b0000000 (reservado)
(XEN)  00000000fec00000 - 00000000fec01000 (reservado)
(XEN)  00000000fee00000 - 00000000fef00000 (reservado)
(XEN)  00000000ff700000 - 0000000100000000 (reservado)
(XEN)  0000000100000000 - 0000000140000000 (usable)
(XEN) ACPI: RSDP 000FA310, 0014 (r0 ACPIAM)
(XEN) ACPI: RSDT AFFA0000, 0044 (r1 052608 RSDT1415 20080526 MSFT       97)
(XEN) ACPI: FACP AFFA0200, 0084 (r1 052608 FACP1415 20080526 MSFT       97)
(XEN) ACPI: DSDT AFFA0450, 960C (r1  1AAAA 1AAAA000        0 INTL 20051117)
(XEN) ACPI: FACS AFFAE000, 0040
(XEN) ACPI: APIC AFFA0390, 0080 (r1 052608 APIC1415 20080526 MSFT       97)
(XEN) ACPI: MCFG AFFA0410, 003C (r1 052608 OEMMCFG  20080526 MSFT       97)
(XEN) ACPI: OEMB AFFAE040, 0073 (r1 052608 OEMB1415 20080526 MSFT       97)
(XEN) ACPI: HPET AFFA9A60, 0038 (r1 052608 OEMHPET0 20080526 MSFT       97)
(XEN) ACPI: INFO AFFAE0C0, 0124 (r1 052608 AMDINFO  20080526 MSFT       97)
(XEN) ACPI: NVHD AFFAE1F0, 0284 (r1 052608  NVHDCP  20080526 MSFT       97)
(XEN) ACPI: SSDT AFFA9AA0, 028A (r1 A M I  POWERNOW        1 AMD         1)
(XEN) RAM del sistema: 3839MB (3931388kB)
(XEN) Montículo del dominio inicializado
(XEN) Procesador #0 15:11 versión APIC 16
(XEN) Procesador #1 15:11 versión APIC 16
(XEN) IOAPIC[0]: apic_id 2, versión 17, dirección 0xfec00000, GSI 0-23
(XEN) Habilitando modo APIC:  Plano.  Usando 1 IO APICs
(XEN) Usando programador: Programador SMP Credit (credit)
(XEN) Procesador detectado 2600.088 MHz.
(XEN) Iniciando compartición de memoria.
(XEN) HVM: ASIDs habilitados.
(XEN) HVM: SVM habilitado
(XEN) AMD-Vi: ¡IOMMU no encontrado!
(XEN) Virtualización de I/O deshabilitada
(XEN) AMD: Deshabilitando C1 Ramping del Reloj Nodo #0
(XEN) Total de 2 procesadores activados.
(XEN) HABILITANDO IRQs IO-APIC
(XEN)  -> Usando nuevo método ACK
(XEN) verificando sincronización TSC entre 2 CPUs:
(XEN) CPU#0 tenía -2 usecs de desviación TSC, lo arregló.
(XEN) CPU#1 tenía 2 usecs de desviación TSC, lo arregló.
(XEN) El temporizador de plataforma es 25.000MHz HPET
(XEN) Anillo de consola asignado de 16 KiB.
(XEN) Se iniciaron 2 CPUs
(XEN)  CARGANDO DOMINIO 0 
(XEN)  Kernel Xen: 64-bit, lsb, compat32
(XEN)  Kernel Dom0: 64-bit, PAE, lsb, paddr 0x1000000 -> 0x16ba000
(XEN) ARREGLO DE MEMORIA FÍSICA:
(XEN)  Dom0 asign.:   0000000138000000->000000013c000000 (921455 páginas a asignar)
(XEN) ARREGLO DE MEMORIA VIRTUAL:
(XEN)  Kernel cargado: ffffffff81000000->ffffffff816ba000
(XEN)  Init. ramdisk: ffffffff816ba000->ffffffff8323b600
(XEN)  Mapa Phys-Mach: ffffffff8323c000->ffffffff83963b78
(XEN)  Información de inicio:    ffffffff83964000->ffffffff839644b4
(XEN)  Tablas de páginas:   ffffffff83965000->ffffffff83986000
(XEN)  Pila de arranque:    ffffffff83986000->ffffffff83987000
(XEN)  TOTAL:         ffffffff80000000->ffffffff83c00000
(XEN)  DIRECCIÓN DE ENTRADA: ffffffff81509200
(XEN) Dom0 tiene máximo 2 VCPUs
(XEN) Limpiando RAM Libre: .done.
(XEN) Buffers de traza Xen: deshabilitados
(XEN) Nivel de registro Std.: Errores y advertencias
(XEN) Nivel de registro de invitados: Nada (Limitado: Errores y advertencias)
(XEN) Xen está renunciando a la consola VGA.
(XEN) * Entrada serial -> DOM0 (tipo ’CTRL-a’ tres veces para cambiar la entrada a Xen)
(XEN) Se liberaron 176kB de memoria inicial.
(XEN) MCE: MSR 417 no es MSR MCA
(XEN) MCE: MSR 417 no es MSR MCA
root@server1:~#

3 Creando Máquinas Virtuales Basadas en Imágenes

Usaremos xen-tools para crear máquinas virtuales. xen-tools facilitan mucho la creación de máquinas virtuales - por favor lee este tutorial para aprender más: https://www.howtoforge.com/xen_tools_xen_shell_argo. Ya hemos instalado xen-tools en el paso anterior (capítulo 2).

Ahora editamos /etc/xen-tools/xen-tools.conf. Este archivo contiene los valores predeterminados que se utilizan por el script xen-create-image a menos que especifiques otros valores en la línea de comandos. Cambié los siguientes valores y dejé el resto sin tocar:

vi /etc/xen-tools/xen-tools.conf

| [...] dir = /home/xen [...] # lvm = vg0 [...] dist = `xt-guess-suite-and-mirror --suite` # Distribución predeterminada a instalar. [...] gateway = 192.168.0.1 netmask = 255.255.255.0 broadcast = 192.168.0.255 [...] passwd = 1 [...] kernel = /boot/vmlinuz-`uname -r` initrd = /boot/initrd.img-`uname -r` [...] mirror = `xt-guess-suite-and-mirror --mirror` [...] serial_device = hvc0 #predeterminado [...] disk_device = xvda #predeterminado [...] |

La línea dir especifica dónde se almacenarán las imágenes de las máquinas virtuales. Asegúrate de que al mismo tiempo, lvm esté comentado (¡estas configuraciones son mutuamente excluyentes!).

dist especifica la distribución que se instalará en las máquinas virtuales (si ejecutas el comando

xt-guess-suite-and-mirror --suite

en la línea de comandos, verás que se traduce a squeeze, así que en este caso se instalaría Debian Squeeze a menos que especifiques algo más en la línea de comandos).

Para averiguar qué distribuciones puedes instalar en una máquina virtual, ejecuta:

gunzip /usr/share/doc/xen-tools/README.gz
cat /usr/share/doc/xen-tools/README

La línea passwd = 1 hace que puedas especificar una contraseña de root cuando creas un nuevo dominio invitado.

Las líneas kernel e initrd especifican el kernel y el ramdisk que se instalan en una máquina virtual. Si deseas instalar Debian Squeeze, por favor usa la configuración como se muestra arriba (de lo contrario, el invitado Debian Squeeze podría no arrancar). Si deseas instalar Ubuntu Maverick, por ejemplo, puedes usar la misma configuración, o comentar ambas líneas, en cuyo caso se usaría el kernel predeterminado de Ubuntu (sí, Xen 4.0 te permite usar kernels no-Xen en un invitado!).

Asegúrate de especificar una puerta de enlace, máscara de red y dirección de difusión. Si no lo haces, y no especificas una puerta de enlace y máscara de red en la línea de comandos al usar xen-create-image, tus dominios invitados no tendrán red incluso si especificaste una dirección IP.

La línea mirror especifica el espejo a usar (el comando

xt-guess-suite-and-mirror --mirror

se traduce a un espejo de Debian por defecto. Por supuesto, puedes especificar otro espejo, por ejemplo, de la siguiente manera:

mirror = http://ftp.de.debian.org/debian/

o mirror = http://archive.ubuntu.com/ubuntu (para Ubuntu; en este caso asegúrate de especificar una versión de Ubuntu en la línea dist, por ejemplo, dist = maverick)

)

Es muy importante que agregues la línea serial_device = hvc0 porque de lo contrario tus máquinas virtuales podrían no arrancar correctamente.

disk_device = xvda hace que los discos virtualizados se nombren xvda1, xvda2, etc. Esta es la configuración correcta para un invitado Debian Squeeze; los invitados de Ubuntu, especialmente al usar un kernel no-Xen, podrían no arrancar con esta configuración, pero puedes anularlo con el interruptor –scsi que pasas al comando xen-create-image - en este caso los discos virtualizados se nombrarán sda1, sda2, etc.

Para resumir, la configuración anterior es perfecta para invitados Debian Squeeze; si deseas instalar Ubuntu Maverick en su lugar, tendrás que anular algunas de las configuraciones en /etc/xen-tools/xen-tools.conf (interruptores –dist, –mirror, –scsi; tal vez también comentar kernel e initrd) - llegaré a eso en un momento.

Antes de continuar, debemos crear el directorio donde se deben almacenar las imágenes de las máquinas virtuales:

mkdir /home/xen 

Ahora vamos a crear nuestro primer dominio invitado, xen1.example.com, con la dirección IP 192.168.0.101:

xen-create-image --hostname=xen1.example.com --size=4Gb --swap=256Mb --ip=192.168.0.101 --memory=256Mb --arch=amd64 --role=udev

Las opciones que especifiques en la línea de comandos anulan las configuraciones en /etc/xen-tools/xen-tools.conf. Las opciones que no se especifican en la línea de comandos se toman de /etc/xen-tools/xen-tools.conf. ¡Por favor asegúrate de agregar –role=udev, o tu máquina virtual podría no arrancar correctamente!

(Para aprender más sobre las opciones disponibles, echa un vistazo a la página del manual de xen-create-image:

man xen-create-image

)

El comando xen-create-image ahora creará la máquina virtual xen1.example.com para nosotros. Esto puede tardar unos minutos. La salida debería ser similar a esta:

root@server1:~# xen-create-image –hostname=xen1.example.com –size=4Gb –swap=256Mb –ip=192.168.0.101 –memory=256Mb –arch=amd64 –role=udev

Información General

Nombre de host       :  xen1.example.com
Distribución   :  squeeze
Espejo         :  http://ftp.de.debian.org/debian/
Particiones     :  swap            256Mb (swap)
/               4Gb   (ext3)
Tipo de imagen     :  sparse
Tamaño de memoria    :  256Mb
Ruta del kernel    :  /boot/vmlinuz-2.6.32-5-xen-amd64
Ruta de initrd    :  /boot/initrd.img-2.6.32-5-xen-amd64

Información de Red

Dirección IP 1   : 192.168.0.101 [MAC: 00:16:3E:E8:61:97]
Máscara de red        : 255.255.255.0
Dirección de difusión  : 192.168.0.255
Puerta de enlace        : 192.168.0.1

Creando imagen de partición: /home/xen/domains/xen1.example.com/swap.img
Hecho

Creando swap en /home/xen/domains/xen1.example.com/swap.img
Hecho

Creando imagen de partición: /home/xen/domains/xen1.example.com/disk.img
Hecho

Creando sistema de archivos ext3 en /home/xen/domains/xen1.example.com/disk.img
Hecho
Método de instalación: debootstrap
Hecho

Ejecutando hooks
Hecho

Rol: udev
Archivo: /etc/xen-tools/role.d/udev
Script de rol completado.

Creando archivo de configuración Xen
Hecho
Configurando contraseña de root
Ingresa nueva contraseña UNIX:
Vuelve a escribir nueva contraseña UNIX:
passwd: contraseña actualizada exitosamente
Todo listo

Archivo de registro producido en:
/var/log/xen-tools/xen1.example.com.log

Resumen de Instalación

Nombre de host        :  xen1.example.com
Distribución    :  squeeze
Dirección IP(s)  :  192.168.0.101
Huella RSA :  81:d1:7a:44:3b:07:41:3a:0f:46:d5:d5:30:bc:26:43
Contraseña de Root   :  N/A

root@server1:~#

Para un invitado Ubuntu Maverick, deberías usar este comando en su lugar:

xen-create-image --hostname=xen1.example.com --size=4Gb --swap=256Mb --ip=192.168.0.101 --memory=256Mb --arch=amd64 --role=udev --scsi --dist maverick --mirror=http://archive.ubuntu.com/ubuntu 

(Para usar el kernel predeterminado de Ubuntu en lugar del kernel Xen de Debian en el invitado, también puedes comentar las líneas kernel e initrd en /etc/xen-tools/xen-tools.conf.)

Ahora debería haber un archivo de configuración xen1.example.com - /etc/xen/xen1.example.com.cfg. Échale un vistazo para familiarizarte con los archivos de configuración de máquinas virtuales:

cat /etc/xen/xen1.example.com.cfg

| # # Archivo de configuración para la instancia Xen xen1.example.com, creado # por xen-tools 4.2 el Vie Mar 25 15:56:51 2011. # # Kernel + tamaño de memoria # kernel = '/boot/vmlinuz-2.6.32-5-xen-amd64' ramdisk = '/boot/initrd.img-2.6.32-5-xen-amd64' vcpus = '1' memory = '256' # Dispositivo(s) de disco. # root = '/dev/xvda2 ro' disk = [ 'file:/home/xen/domains/xen1.example.com/disk.img,xvda2,w', 'file:/home/xen/domains/xen1.example.com/swap.img,xvda1,w', ] # # Volúmenes físicos # # # Nombre de host # name = 'xen1.example.com' # # Red # vif = [ 'ip=192.168.0.101,mac=00:16:3E:E8:61:97' ] # # Comportamiento # on_poweroff = 'destroy' on_reboot = 'restart' on_crash = 'restart' |

(Nota: si tienes una CPU de doble núcleo o de cuatro núcleos y deseas que la máquina virtual use todos los núcleos de CPU, por favor cambia la línea vcpus a vcpus = ‘2’ o vcpus = ‘4’.)

Para iniciar la máquina virtual, ejecuta

xm create /etc/xen/xen1.example.com.cfg

root@server1:~# xm create /etc/xen/xen1.example.com.cfg
Usando el archivo de configuración “/etc/xen/xen1.example.com.cfg”.
Dominio xen1.example.com (id=1) iniciado
root@server1:~#

Ejecuta

xm console xen1.example.com

para iniciar sesión en esa máquina virtual (escribe CTRL+] si estás en la consola, o CTRL+5 si estás usando PuTTY para volver a dom0), o usa un cliente SSH para conectarte a ella (192.168.0.101).

Para obtener una lista de máquinas virtuales en ejecución, escribe

xm list 

La salida debería verse así:

root@server1:~# xm list
Nombre                                        ID   Mem VCPUs      Estado   Tiempo(s)
Dominio-0                                     0  2811     2     r—–    137.2
xen1.example.com                             1   256     1     -b—-      1.7
root@server1:~#

Para apagar xen1.example.com, haz esto:

xm shutdown xen1.example.com 

Si deseas que xen1.example.com se inicie automáticamente en el próximo arranque del sistema, entonces haz esto:

mkdir /etc/xen/auto
ln -s /etc/xen/xen1.example.com.cfg /etc/xen/auto

Aquí están los comandos más importantes de Xen:

xm create -c /ruta/al/config - Iniciar una máquina virtual.
xm shutdown - Detener una máquina virtual.
xm destroy - Detener una máquina virtual inmediatamente sin apagarla. Es como si apagas el botón de encendido.
xm list - Listar todos los sistemas en ejecución.
xm console - Iniciar sesión en una máquina virtual.
xm help - Lista de todos los comandos.

Una lista de todas las máquinas virtuales que se crearon con el comando xen-create-image está disponible bajo

xen-list-images

root@server1:~# xen-list-images
Nombre: xen1.example.com
Memoria: 256
IP: 192.168.0.101
root@server1:~#

Para aprender más sobre lo que puedes hacer con xen-tools, echa un vistazo a este tutorial: https://www.howtoforge.com/xen_tools_xen_shell_argo

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.