Virtualizzazione · 8 min read · Dec 09, 2025

Paravirtualizzazione Con Xen 4.0 Su Debian Squeeze (AMD64)

Paravirtualizzazione Con Xen 4.0 Su Debian Squeeze (AMD64)

Versione 1.0
Autore: Falko Timme
Seguimi su Twitter

Questo tutorial fornisce istruzioni passo-passo su come installare Xen 4.0 su un sistema Debian Squeeze (6.0) (AMD64) e creare ospiti paravirtualizzati (non confondere con ospiti completamente virtualizzati, cioè virtualizzazione hardware (HVM)).

Xen ti consente di creare sistemi operativi guest (sistemi operativi nix come Linux e FreeBSD), così chiamate “macchine virtuali” o domU, sotto un sistema operativo host (dom0). Utilizzando Xen puoi separare le tue applicazioni in diverse macchine virtuali che sono totalmente indipendenti l’una dall’altra (ad esempio, una macchina virtuale per un server di posta, una macchina virtuale per un sito web ad alto traffico, un’altra macchina virtuale che serve i siti web dei tuoi clienti, una macchina virtuale per DNS, ecc.), ma utilizzare comunque lo stesso hardware. Questo fa risparmiare denaro e, cosa ancora più importante, è più sicuro. Se la macchina virtuale del tuo server DNS viene compromessa, non ha alcun effetto sulle tue altre macchine virtuali. Inoltre, puoi spostare le macchine virtuali da un server Xen all’altro.

Non rilascio alcuna garanzia che questo funzionerà per te!

1 Nota Preliminare

Sto usando un sistema Debian Squeeze (x86_64) con il nome host server1.example.com e l’indirizzo IP 192.168.0.100 come sistema host (dom0). (La configurazione potrebbe differire leggermente se sei su un sistema i386.) Userò Debian Squeeze anche per le macchine virtuali (domU) (ma mostrerò anche le modifiche necessarie se vuoi installare un ospite Ubuntu Maverick).

Questa guida spiegherà come configurare macchine virtuali basate su immagini e anche macchine virtuali basate su LVM.

2 Installazione di Xen

Per installare Xen, eseguiamo semplicemente

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

Dopo apriamo /etc/modules e ci assicuriamo di avere la riga loop max_loop=64 in esso (questo passaggio è necessario solo se vuoi creare macchine virtuali basate su immagini - puoi saltarlo se vuoi creare macchine virtuali basate su LVM):

vi /etc/modules

| [...] loop max_loop=64 |

Successivamente apriamo /etc/xen/xend-config.sxp…

vi /etc/xen/xend-config.sxp

… e decommentiamo/aggiungiamo la riga (network-script ‘network-bridge antispoof=yes’) e commentiamo tutte le altre righe (network-script …) (antispoof=yes abilita il firewall di Xen che impedisce a una VM di utilizzare un indirizzo IP che non è autorizzata a utilizzare, come, ad esempio, il tuo IP gateway). Assicurati anche che la riga (vif-script vif-bridge) sia abilitata:

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

Poi riavvia il sistema:

reboot

Esegui

uname -r

e il tuo nuovo kernel Xen dovrebbe apparire:

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

Ora esegui

xm dmesg 

Se ottieni un output come questo…

root@server1:~# xm dmesg
WARNING! Can’t find hypervisor information in sysfs!
Error: Unable to connect to xend: No such file or directory. Is xend running?
root@server1:~#

… questo significa che stai eseguendo solo un kernel pronto per Xen, ma non l’ipervisore Xen stesso (il che significa che non sarai in grado di avviare macchine virtuali). Per cambiare questo, modifica l’ordine di avvio dei tuoi kernel come segue e aggiorna il bootloader GRUB:

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

Questo assicura che la prossima volta che avvii, l’ipervisore Xen venga caricato.

Riavvia di nuovo:

reboot

Dopo,

xm dmesg

dovrebbe mostrarti che l’ipervisore è in esecuzione:

root@server1:~# xm dmesg
(XEN) Versione Xen 4.0.1 (Debian 4.0.1-2) ( [email protected]) (gcc version 4.4.5 (Debian 4.4.5-10) ) Mer Gen 12 14:04:06 UTC 2011
(XEN) Bootloader: GRUB 1.98+20100804-14
(XEN) Command line: placeholder
(XEN) Informazioni video:
(XEN)  VGA è modalità testo 80x25, font 8x16
(XEN)  Metodi VBE/DDC: V2; tempo di trasferimento EDID: 1 secondo
(XEN) Informazioni sul disco:
(XEN)  Trovato 1 firma MBR
(XEN)  Trovata 1 struttura di informazioni EDD
(XEN) Mappa RAM Xen-e820:
(XEN)  0000000000000000 - 000000000009f000 (utile)
(XEN)  000000000009f000 - 00000000000a0000 (riservato)
(XEN)  00000000000e0000 - 0000000000100000 (riservato)
(XEN)  0000000000100000 - 00000000affa0000 (utile)
(XEN)  00000000affa0000 - 00000000affae000 (dati ACPI)
(XEN)  00000000affae000 - 00000000afff0000 (NVS ACPI)
(XEN)  00000000afff0000 - 00000000b0000000 (riservato)
(XEN)  00000000fec00000 - 00000000fec01000 (riservato)
(XEN)  00000000fee00000 - 00000000fef00000 (riservato)
(XEN)  00000000ff700000 - 0000000100000000 (riservato)
(XEN)  0000000100000000 - 0000000140000000 (utile)
(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 di sistema: 3839MB (3931388kB)
(XEN) Heap del dominio inizializzato
(XEN) Processore #0 15:11 versione APIC 16
(XEN) Processore #1 15:11 versione APIC 16
(XEN) IOAPIC[0]: apic_id 2, versione 17, indirizzo 0xfec00000, GSI 0-23
(XEN) Abilitazione modalità APIC:  Flat.  Utilizzando 1 IO APIC
(XEN) Utilizzando scheduler: SMP Credit Scheduler (credit)
(XEN) Processore 2600.088 MHz rilevato.
(XEN) Inizializzazione condivisione memoria.
(XEN) HVM: ASIDs abilitati.
(XEN) HVM: SVM abilitato
(XEN) AMD-Vi: IOMMU non trovato!
(XEN) Virtualizzazione I/O disabilitata
(XEN) AMD: Disabilitazione C1 Clock Ramping Node #0
(XEN) Totale di 2 processori attivati.
(XEN) ABILITAZIONE IO-APIC IRQs
(XEN)  -> Utilizzando nuovo metodo ACK
(XEN) verifica sincronizzazione TSC tra 2 CPU:
(XEN) CPU#0 aveva -2 usecs TSC skew, corretto.
(XEN) CPU#1 aveva 2 usecs TSC skew, corretto.
(XEN) Il timer della piattaforma è 25.000MHz HPET
(XEN) Allocato console ring di 16 KiB.
(XEN) Avviati 2 CPUs
(XEN)  CARICAMENTO DOMINIO 0 
(XEN)  Kernel Xen: 64-bit, lsb, compat32
(XEN)  Kernel Dom0: 64-bit, PAE, lsb, paddr 0x1000000 -> 0x16ba000
(XEN) DISPOSIZIONE MEMORIA FISICA:
(XEN)  Dom0 alloc.:   0000000138000000->000000013c000000 (921455 pagine da allocare)
(XEN) DISPOSIZIONE MEMORIA VIRTUALE:
(XEN)  Kernel caricato: ffffffff81000000->ffffffff816ba000
(XEN)  Init. ramdisk: ffffffff816ba000->ffffffff8323b600
(XEN)  Mappa Phys-Mach: ffffffff8323c000->ffffffff83963b78
(XEN)  Informazioni di avvio:    ffffffff83964000->ffffffff839644b4
(XEN)  Tabelle di pagina:   ffffffff83965000->ffffffff83986000
(XEN)  Stack di avvio:    ffffffff83986000->ffffffff83987000
(XEN)  TOTALE:         ffffffff80000000->ffffffff83c00000
(XEN)  INDIRIZZO DI ENTRATA: ffffffff81509200
(XEN) Dom0 ha massimo 2 VCPUs
(XEN) Scrubbing RAM libera: .done.
(XEN) Buffer di traccia Xen: disabilitati
(XEN) Livello di log Std.: Errori e avvisi
(XEN) Livello di log Guest: Niente (Rate-limited: Errori e avvisi)
(XEN) Xen sta cedendo la console VGA.
(XEN) * Input seriale -> DOM0 (tipo ’CTRL-a’ tre volte per cambiare input a Xen)
(XEN) Liberati 176kB di memoria iniziale.
(XEN) MCE: MSR 417 non è MCA MSR
(XEN) MCE: MSR 417 non è MCA MSR
root@server1:~#

3 Creazione di Macchine Virtuali Basate su Immagini

Utilizzeremo xen-tools per creare macchine virtuali. xen-tools rendono molto facile creare macchine virtuali - ti prego di leggere questo tutorial per saperne di più: https://www.howtoforge.com/xen_tools_xen_shell_argo. Abbiamo già installato xen-tools nel passaggio precedente (capitolo 2).

Ora modifichiamo /etc/xen-tools/xen-tools.conf. Questo file contiene i valori predefiniti utilizzati dallo script xen-create-image a meno che tu non specifichi altri valori sulla riga di comando. Ho cambiato i seguenti valori e lasciato il resto intatto:

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

| [...] dir = /home/xen [...] # lvm = vg0 [...] dist = `xt-guess-suite-and-mirror --suite` # Distribuzione predefinita da installare. [...] 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 #default [...] disk_device = xvda #default [...] |

La riga dir specifica dove verranno memorizzate le immagini delle macchine virtuali. Assicurati che allo stesso tempo, lvm sia commentato (queste impostazioni sono mutuamente esclusive!).

dist specifica la distribuzione da installare nelle macchine virtuali (se esegui il comando

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

sulla riga di comando, vedrai che si traduce in squeeze, quindi in questo caso verrebbe installato Debian Squeeze a meno che tu non specifichi altro sulla riga di comando).

Per scoprire quali distribuzioni puoi installare in una macchina virtuale, esegui:

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

La riga passwd = 1 fa sì che tu possa specificare una password di root quando crei un nuovo dominio guest.

Le righe kernel e initrd specificano il kernel e il ramdisk che vengono installati in una macchina virtuale. Se vuoi installare Debian Squeeze, utilizza le impostazioni come mostrato sopra (altrimenti l’ospite Debian Squeeze potrebbe non avviarsi). Se vuoi installare Ubuntu Maverick, ad esempio, puoi utilizzare le stesse impostazioni, oppure commentare entrambe le righe, nel qual caso verrebbe utilizzato il kernel predefinito di Ubuntu (sì, Xen 4.0 ti consente di utilizzare kernel non-Xen in un ospite!).

Assicurati di specificare un gateway, una netmask e un indirizzo di broadcast. Se non lo fai, e non specifichi un gateway e una netmask sulla riga di comando quando usi xen-create-image, i tuoi domini guest non avranno rete anche se hai specificato un indirizzo IP!

La riga mirror specifica il mirror da utilizzare (il comando

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

si traduce in un mirror Debian per impostazione predefinita. Naturalmente, puoi specificare un altro mirror, ad esempio come segue:

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

oppure

mirror = http://archive.ubuntu.com/ubuntu (per Ubuntu; in questo caso assicurati di specificare una versione di Ubuntu nella riga dist, ad esempio dist = maverick)

)

È molto importante che tu aggiunga la riga serial_device = hvc0 perché altrimenti le tue macchine virtuali potrebbero non avviarsi correttamente!

disk_device = xvda fa sì che i dischi virtualizzati siano denominati xvda1, xvda2, ecc. Questa è l’impostazione corretta per un ospite Debian Squeeze; gli ospiti Ubuntu, specialmente quando utilizzano un kernel non-Xen, potrebbero non avviarsi con questa impostazione, ma puoi sovrascriverla con l’opzione –scsi che passi al comando xen-create-image - in questo caso i dischi virtualizzati saranno denominati sda1, sda2, ecc.

Per riassumere, le impostazioni sopra sono perfette per gli ospiti Debian Squeeze; se vuoi installare Ubuntu Maverick invece, dovrai sovrascrivere alcune delle impostazioni in /etc/xen-tools/xen-tools.conf (–dist, –mirror, –scsi switches; forse anche commentare kernel e initrd) - ci arriverò tra un momento.

Prima di continuare, dobbiamo creare la directory in cui devono essere memorizzate le immagini delle macchine virtuali:

mkdir /home/xen 

Ora creiamo il nostro primo dominio guest, xen1.example.com, con l’indirizzo 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

Le opzioni che specifichi sulla riga di comando sovrascrivono le impostazioni in /etc/xen-tools/xen-tools.conf. Le opzioni che non sono specificate sulla riga di comando vengono prese da /etc/xen-tools/xen-tools.conf. Assicurati di aggiungere –role=udev, altrimenti la tua macchina virtuale potrebbe non avviarsi correttamente!

(Per saperne di più sulle opzioni disponibili, dai un’occhiata alla pagina man di xen-create-image:

man xen-create-image

)

Il comando xen-create-image creerà ora per noi la macchina virtuale xen1.example.com. Questo potrebbe richiedere alcuni minuti. L’output dovrebbe essere simile a questo:

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

Informazioni Generali

Nome host       :  xen1.example.com
Distribuzione   :  squeeze
Mirror         :  http://ftp.de.debian.org/debian/
Partizioni     :  swap            256Mb (swap)
/               4Gb   (ext3)
Tipo di immagine :  sparse
Dimensione memoria    :  256Mb
Percorso kernel    :  /boot/vmlinuz-2.6.32-5-xen-amd64
Percorso Initrd    :  /boot/initrd.img-2.6.32-5-xen-amd64

Informazioni di Rete

Indirizzo IP 1   : 192.168.0.101 [MAC: 00:16:3E:E8:61:97]
Netmask        : 255.255.255.0
Broadcast      : 192.168.0.255
Gateway        : 192.168.0.1

Creazione immagine partizione: /home/xen/domains/xen1.example.com/swap.img
Fatto

Creazione swap su /home/xen/domains/xen1.example.com/swap.img
Fatto

Creazione immagine partizione: /home/xen/domains/xen1.example.com/disk.img
Fatto

Creazione filesystem ext3 su /home/xen/domains/xen1.example.com/disk.img
Fatto
Metodo di installazione: debootstrap
Fatto

Esecuzione hook
Fatto

Ruolo: udev
File: /etc/xen-tools/role.d/udev
Script di ruolo completato.

Creazione file di configurazione Xen
Fatto
Impostazione password root
Inserisci nuova password UNIX:
Reinserisci nuova password UNIX:
passwd: password aggiornata con successo
Tutto fatto

File di log prodotto in:
/var/log/xen-tools/xen1.example.com.log

Riepilogo installazione

Nome host        :  xen1.example.com
Distribuzione    :  squeeze
Indirizzo IP (e)  :  192.168.0.101
Fingerprint RSA :  81:d1:7a:44:3b:07:41:3a:0f:46:d5:d5:30:bc:26:43
Password root   :  N/A

root@server1:~#

Per un ospite Ubuntu Maverick, dovresti usare questo comando invece:

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 

(Per utilizzare il kernel predefinito di Ubuntu invece del kernel Xen di Debian nell’ospite, puoi anche commentare le righe kernel e initrd in /etc/xen-tools/xen-tools.conf.)

Ora dovrebbe esserci un file di configurazione xen1.example.com - /etc/xen/xen1.example.com.cfg. Dai un’occhiata per familiarizzare con i file di configurazione delle macchine virtuali:

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

| # # File di configurazione per l'istanza Xen xen1.example.com, creato # da xen-tools 4.2 il Ven Mar 25 15:56:51 2011. # # Kernel + dimensione 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(i) 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', ] # # Volumi fisici # # # Nome host # name = 'xen1.example.com' # # Rete # vif = [ 'ip=192.168.0.101,mac=00:16:3E:E8:61:97' ] # # Comportamento # on_poweroff = 'destroy' on_reboot = 'restart' on_crash = 'restart' |

(Nota: se hai una CPU dual-core o quad-core e vuoi che la macchina virtuale utilizzi tutti i core della CPU, modifica la riga vcpus in vcpus = ‘2’ o vcpus = ‘4’.)

Per avviare la macchina virtuale, esegui

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

root@server1:~# xm create /etc/xen/xen1.example.com.cfg
Utilizzando il file di configurazione “/etc/xen/xen1.example.com.cfg”.
Dominio xen1.example.com avviato (id=1)
root@server1:~#

Esegui

xm console xen1.example.com

per accedere a quella macchina virtuale (digita CTRL+] se sei alla console, o CTRL+5 se stai usando PuTTY per tornare a dom0), oppure usa un client SSH per connetterti ad essa (192.168.0.101).

Per ottenere un elenco delle macchine virtuali in esecuzione, digita

xm list 

L’output dovrebbe apparire simile a questo:

root@server1:~# xm list
Nome                                        ID   Mem VCPUs      Stato   Tempo(s)
Domain-0                                     0  2811     2     r—–    137.2
xen1.example.com                             1   256     1     -b—-      1.7
root@server1:~#

Per spegnere xen1.example.com, fai questo:

xm shutdown xen1.example.com 

Se vuoi che xen1.example.com si avvii automaticamente al prossimo avvio del sistema, fai questo:

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

Ecco i comandi Xen più importanti:

xm create -c /path/to/config - Avvia una macchina virtuale.
xm shutdown - Ferma una macchina virtuale.
xm destroy - Ferma una macchina virtuale immediatamente senza spegnerla. È come se spegnessi il pulsante di alimentazione.
xm list - Elenca tutti i sistemi in esecuzione.
xm console - Accedi a una macchina virtuale.
xm help - Elenco di tutti i comandi.

Un elenco di tutte le macchine virtuali create con il comando xen-create-image è disponibile sotto

xen-list-images

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

Per saperne di più su cosa puoi fare con xen-tools, dai un’occhiata a questo tutorial: https://www.howtoforge.com/xen_tools_xen_shell_argo

Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.