Xen udostępnia dwa odmienne rodzaje wirtualizacji: pełną wirtualizację (wspieraną sprzętowo) oraz parawirtualizację, czyli tzw lekka wirtualizacja, która to jest flagową innowacją Xena.
Jest tym co wyróżnia Xena spośród innych produktów. W odróżnieniu do pełniej wirtualizacji, technika parawirtualizacji osłabia nieco podejście tworzenia pełnej iluzji fizycznego sprzętu dla VM. W tym przypadku wirtualna maszyna ma dostęp do pewnej części rzeczywistych, fizycznych zasobów komputera poprzez specjalne API. Wszystkie odwołania do tych zasobów są jednak weryfikowane przez nadzorcę. API to zajmuje się podziałem fizycznych zasobów pomiędzy maszyny wirtualne. Aby VM potrafiła się komunikować z takim API, musi zostać wcześniej zmodyfikowana, tak aby „wiedziała”, że nie pracuje bezpośrednio na fizycznym sprzęcie.1 Po takiej modyfikacji nie będzie próbowała wykonywać zastrzeżonych poleceń samodzielnie, lecz przekaże je do API, instrukcje uprzywilejowane są parawirtualizowane. Wadą tego rozwiązania jest utrudnienie instalacji VM. Sterowniki urządzeń instalowanego systemu operacyjnego muszą potrafić współpracować z Xenem. Zaletą natomiast wysoka wydajność dzięki ograniczeniu środowiska, które trzeba symulować.
• PAE, wpisujemy w konsoli:
Jeśli wynikiem jest jedno lub kilka wystąpień hvm-*, oznacza to, że w BIOSie wirtualizacja jest aktywowana
Sprawdzenia instrukcji w /proc/cpuinfo można dokonać jedynie przed instalacją hypervisora Xen, ponieważ tylko wtedy mamy dostęp do fizycznego procesora. Po uruchomieniu jądra Xen (hypervisora) w /proc/cpuinfo nie zobaczymy już rzeczywistego procesora. Flagi vmx/svm nie będą widoczne.
Ponad to Xen pracuje na platformach wieloprocesorowych oraz wspiera Hyper-Threading Technology.
1) Wymagania wstępne:
Zainstalujmy Debiana Squeeze, w wersji 64-bitowej, oczywiście procesor który posiadamy musi wspierać wirtualizację (inaczej nici z zainstalowania XEN’a), do tego nasz system nazwiemy server1.example.local, ustawmy IP na 192.168.0.100.
2) Instalacja XEN:
apt-get install xen-hypervisor xen-linux-system xen-utils xenstore-utils xenwatch xen-tools
Poniższe kroki wykonujemy jeżeli instalujemy system jako maszynę wirtualną bez LVM (łączenie w partycje rozproszonych wolnych przestrzeni na dyku / dyskach, które mogą znajdować się w różnych lokacjach), jeżeli będzie to instalacja LVM te kroki pomijamy.
vi /etc/xen/xend-config.sxp
dodajemy / odkomentowujemy:
(network-script 'network-bridge antispoof=yes’)
Pozostałe wiersze zawierające network-script komentujemy
(vif-script vif-bridge)
następnie
reboot
po uruchomieniu sprawdzamy czy XEN się poprawnie zainstalował:
uname -r
Startujemy XEN
xm dmesg
Jeżeli dostaniemy w odpowiedzi coś takiego:
XEN) Xen version 4.0.1 (Debian 4.0.1-2) (waldi@debian.org) (gcc version 4.4.5 (Debian 4.4.5-10) ) Wen May 01 14:04:06 UTC 2013
(XEN) Bootloader: GRUB 1.98+20100804-14
(XEN) Command line: placeholder
(XEN) Video information:
(XEN) VGA is text mode 80×25, font 8×16
(XEN) VBE/DDC methods: V2; EDID transfer time: 1 seconds
(XEN) Disc information:
(XEN) Found 1 MBR signatures
(XEN) Found 1 EDD information structures
(XEN) Xen-e820 RAM map:
(XEN) 0000000000000000 – 000000000009f000 (usable)
(XEN) 000000000009f000 – 00000000000a0000 (reserved)
(XEN) 00000000000e0000 – 0000000000100000 (reserved)
(XEN) 0000000000100000 – 00000000affa0000 (usable)
(XEN) 00000000affa0000 – 00000000affae000 (ACPI data)
(XEN) 00000000affae000 – 00000000afff0000 (ACPI NVS)
(XEN) 00000000afff0000 – 00000000b0000000 (reserved)
(XEN) 00000000fec00000 – 00000000fec01000 (reserved)
(XEN) 00000000fee00000 – 00000000fef00000 (reserved)
(XEN) 00000000ff700000 – 0000000100000000 (reserved)
(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) System RAM: 3839MB (3931388kB)
(XEN) Domain heap initialised
(XEN) Processor #0 15:11 APIC version 16
(XEN) Processor #1 15:11 APIC version 16
(XEN) IOAPIC[0]: apic_id 2, version 17, address 0xfec00000, GSI 0-23
(XEN) Enabling APIC mode: Flat. Using 1 I/O APICs
(XEN) Using scheduler: SMP Credit Scheduler (credit)
(XEN) Detected 2600.088 MHz processor.
(XEN) Initing memory sharing.
(XEN) HVM: ASIDs enabled.
(XEN) HVM: SVM enabled
(XEN) AMD-Vi: IOMMU not found!
(XEN) I/O virtualisation disabled
(XEN) AMD: Disabling C1 Clock Ramping Node #0
(XEN) Total of 2 processors activated.
(XEN) ENABLING IO-APIC IRQs
(XEN) -> Using new ACK method
(XEN) checking TSC synchronization across 2 CPUs:
(XEN) CPU#0 had -2 usecs TSC skew, fixed it up.
(XEN) CPU#1 had 2 usecs TSC skew, fixed it up.
(XEN) Platform timer is 25.000MHz HPET
(XEN) Allocated console ring of 16 KiB.
(XEN) Brought up 2 CPUs
(XEN) *** LOADING DOMAIN 0 ***
(XEN) Xen kernel: 64-bit, lsb, compat32
(XEN) Dom0 kernel: 64-bit, PAE, lsb, paddr 0x1000000 -> 0x16ba000
(XEN) PHYSICAL MEMORY ARRANGEMENT:
(XEN) Dom0 alloc.: 0000000138000000->000000013c000000 (921455 pages to be allocated)
(XEN) VIRTUAL MEMORY ARRANGEMENT:
(XEN) Loaded kernel: ffffffff81000000->ffffffff816ba000
(XEN) Init. ramdisk: ffffffff816ba000->ffffffff8323b600
(XEN) Phys-Mach map: ffffffff8323c000->ffffffff83963b78
(XEN) Start info: ffffffff83964000->ffffffff839644b4
(XEN) Page tables: ffffffff83965000->ffffffff83986000
(XEN) Boot stack: ffffffff83986000->ffffffff83987000
(XEN) TOTAL: ffffffff80000000->ffffffff83c00000
(XEN) ENTRY ADDRESS: ffffffff81509200
(XEN) Dom0 has maximum 2 VCPUs
(XEN) Scrubbing Free RAM: .done.
(XEN) Xen trace buffers: disabled
(XEN) Std. Loglevel: Errors and warnings
(XEN) Guest Loglevel: Nothing (Rate-limited: Errors and warnings)
(XEN) Xen is relinquishing VGA console.
(XEN) *** Serial input -> DOM0 (type 'CTRL-a’ three times to switch input to Xen)
(XEN) Freed 176kB init memory.
(XEN) MCE: MSR 417 is not MCA MSR
(XEN) MCE: MSR 417 is not MCA MSR
3) Maszyny wirtualne:
Przy tworzeniu maszyn wirtualnych wykorzystamy napisane w PHP narzędzie xen-tools. Po instalacji mamy domyślną konfigurację naszych maszyn wirtualnych, oczywiście możemy to zmienić:
nano /etc/xen-tools/xen-tools.conf
Zmieńmy jedynie poniższe opcje, pozostałe możemy zostawić jako domyślne:
[…]
dir = /home/xen #Miejsca składowania obrazów maszyn
[…]
# lvm = vg0
[…]
dist = xt-guess-suite-and-mirror --suite
# Domyślne dystrybujce do zainstalowania
[…]
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
[…]
Utworzymy katalog dla xen:
mkdir /home/xen
Utworzymy pierwszy wirtualny system:
General Information
——————–
Hostname : xen1.example.com
Distribution : squeeze
Mirror : http://ftp.de.debian.org/debian/
Partitions : swap 256Mb (swap)
/ 4Gb (ext3)
Image type : sparse
Memory size : 256Mb
Kernel path : /boot/vmlinuz-2.6.32-5-xen-amd64
Initrd path : /boot/initrd.img-2.6.32-5-xen-amd64
Networking Information
———————-
IP Address 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
Creating partition image: /home/xen/domains/xen1.example.com/swap.img
Done
Creating swap on /home/xen/domains/xen1.example.com/swap.img
Done
Creating partition image: /home/xen/domains/xen1.example.com/disk.img
Done
Creating ext3 filesystem on /home/xen/domains/xen1.example.com/disk.img
Done
Installation method: debootstrap
Done
Running hooks
Done
Role: udev
File: /etc/xen-tools/role.d/udev
Role script completed.
Creating Xen configuration file
Done
Setting up root password
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
All done
Logfile produced at:
/var/log/xen-tools/xen1.example.com.log
Installation Summary
———————
Hostname : xen1.example.com
Distribution : squeeze
IP-Address(es) : 192.168.0.101
RSA Fingerprint : 81:d1:7a:44:3b:07:41:3a:0f:46:d5:d5:30:bc:26:43
Root Password : N/A
uname -r
oraz initrd =/boot/initrd.img-uname -r
cat /etc/xen/xen1.example.com.cfg
#
# Configuration file for the Xen instance xen1.example.com, created
# by xen-tools 4.2 on Fri Mar 25 15:56:51 2011.
#
#
# Kernel + memory size
#
kernel = '/boot/vmlinuz-2.6.32-5-xen-amd64′
ramdisk = '/boot/initrd.img-2.6.32-5-xen-amd64′
vcpus = '1′
memory = '256′
#
# Disk device(s).
#
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’,
]
#
# Physical volumes
#
#
# Hostname
#
name = 'xen1.example.com’
#
# Networking
#
vif = [ 'ip=192.168.0.101,mac=00:16:3E:E8:61:97′ ]
#
# Behaviour
#
on_poweroff = 'destroy’
on_reboot = 'restart’
on_crash = 'restart’
Dodatkowo jeżeli mamy procesor dwu lub czterordzeniowy (czy też z większą ilością) możemy ustawić tak XEN’a aby wykorzystywał możliwości jakie dają:
nano /etc/xen/xen1.example.com.cfg
xm create /etc/xen/xen1.example.com.cfg
W odpowiedzi otrzymamy:
Using config file „/etc/xen/xen1.example.com.cfg”.
Started domain xen1.example.com (id=1)
Możemy zalogować się do naszej maszyny poprzez konsole:
xm console xen1.example.com
lub poprzez SSH przy pomocy 192.168.0.101
Możemy również sprawdzić jakie maszyny mamy uruchomione w naszym środowisku:
xm list
Otrzymamy w odpowiedzi (o ile mamy tylko jedną ):
Name ID Mem VCPUs State Time(s)
Domain-0 0 2811 2 r—– 137.2
xen1.example.com 1 256 1 -b—- 1.7
Jeżeli chcemy wyłączyć maszynę:
xm shutdown xen1.example.com
Aby maszyna startowała automatycznie wraz ze starem systemu (głównego):
mkdir /etc/xen/auto
ln -s /etc/xen/xen1.example.com.cfg /etc/xen/auto
Pozostałe ważne dla pracy przy XEN’ie polecenia:
xm create -c /path/to/config – Start maszyny wirtualnej,
xm shutdown
xm destroy
xm list – Wylistowanie wszystkich maszyn,
xm console
xm help – Pomoc
Możemy wylistować maszyny stworzone przy pomocy:
xen-list-images
Wykonanie polecenie zawiera mało, ale za to ważne informacje:
To na tyle, jeżeli chodzi o instalowanie środowiska jako zwykłej maszyny. Dalej instalacja na dyskach LVM.
4) Tworzenie maszyn z wykorzystaniem LVM’a:
Przechowywanie maszyn na zwykłych dyskach jest dobre jedynie w przypadku testów (czyli teraz:)), w środowisku produkcyjnym lepiej mieć możliwość rozszerzania przestrzeni dyskowej szczególnie w nagłych przypadkach, temu właśnie służy LVM (więcej po kliknięciu na link). Przyjmijmy że posiadamy dysk 500GB, z czego 100GB jest obecnie wykorzystywane, pozostała przestrzeń jest wolna, możemy ją wykorzystać do utworzenia na niej naszych maszyn.
Możemy sprawdzić ja zajętość miejsca ma się na naszym dysku:
vgdisplay
Możemy sprawdzić bardziej dokładne informacje o naszym dysku:
lvdisplay
Teraz będziemy postępować podobnie jak przy tworzeniu zwykłych maszyn wirtualnych:
nano /etc/xen-tools/xen-tools.conf
[…]
# dir = /home/xen # Komentoujemy
[…]
lvm = vg0 3Usuwamy komentarz
[…]
dist = xt-guess-suite-and-mirror --suite
# Domyślnie instalowana dystrybucja
[…]
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
[…]
Utwórzmy maszynę opartą na Debianie:
xen-create-image –hostname=xen1.example.com –size=4Gb –swap=256Mb –ip=192.168.0.101 –memory=256Mb –arch=amd64 –role=udev
Otrzymamy informacje na temat utworzonej maszyny:
eneral Information
——————–
Hostname : xen1.example.com
Distribution : squeeze
Mirror : http://ftp.de.debian.org/debian/
Partitions : swap 256Mb (swap)
/ 4Gb (ext3)
Image type : full
Memory size : 256Mb
Kernel path : /boot/vmlinuz-2.6.32-5-xen-amd64
Initrd path : /boot/initrd.img-2.6.32-5-xen-amd64
Networking Information
———————-
IP Address 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
Creating swap on /dev/vg0/xen1.example.com-swap
Done
Creating ext3 filesystem on /dev/vg0/xen1.example.com-disk
Done
Installation method: debootstrap
Done
Running hooks
Done
Role: udev
File: /etc/xen-tools/role.d/udev
Role script completed.
Creating Xen configuration file
Done
Setting up root password
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
All done
Logfile produced at:
/var/log/xen-tools/xen1.example.com.log
Installation Summary
———————
Hostname : xen1.example.com
Distribution : squeeze
IP-Address(es) : 192.168.0.101
RSA Fingerprint : 6b:88:61:9a:ea:8a:7b:0d:24:34:ae:ee:2e:75:d6:53
Root Password : N/A
Jeżeli chcemy utworzyć maszynę opartą na Ubuntu – Maverik:
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
Otrzymamy ponownie informację opisującą utworzoną maszynę. następnie możemy sprawdzić jak zmieniła się zajętość naszego dysku:
vdisplay
Widzimy dwie partycje wykorzystywane przez maszynę (główną oraz swap):
disk = [
'file:/home/xen/domains/xen1.example.com/disk.img,xvda2,w’,
'file:/home/xen/domains/xen1.example.com/swap.img,xvda1,w’,
]
Dodatkowo jeżeli mamy procesor dwu lub czterordzeniowy (czy też z większą ilością) możemy ustawić tak XEN’a aby wykorzystywał możliwości jakie dają:
nano /etc/xen/xen1.example.com.cfg
xm create /etc/xen/xen1.example.com.cfg
W odpowiedzi otrzymamy:
Using config file „/etc/xen/xen1.example.com.cfg”.
Started domain xen1.example.com (id=1)
Możemy zalogować się do naszej maszyny poprzez konsole:
xm console xen1.example.com
lub poprzez SSH przy pomocy 192.168.0.101
Możemy również sprawdzić jakie maszyny mamy uruchomione w naszym środowisku:
xm list
Otrzymamy w odpowiedzi (o ile mamy tylko jedną ):
Name ID Mem VCPUs State Time(s)
Domain-0 0 2811 2 r—– 137.2
xen1.example.com 1 256 1 -b—- 1.7
Jeżeli chcemy wyłączyć maszynę:
xm shutdown xen1.example.com
Aby maszyna startowała automatycznie wraz ze starem systemu (głównego):
mkdir /etc/xen/auto
ln -s /etc/xen/xen1.example.com.cfg /etc/xen/auto
Pozostałe ważne dla pracy przy XEN’ie polecenia:
xm create -c /path/to/config – Start maszyny wirtualnej,
xm shutdown
xm destroy
xm list – Wylistowanie wszystkich maszyn,
xm console
xm help – Pomoc
Możemy wylistować maszyny stworzone przy pomocy:
xen-list-images
Wykonanie polecenie zawiera mało, ale za to ważne informacje:
W wolnej chwili postaram się jeszcze opisać, najważniejsze narzędzie całego systemu XEN czyli xen-tools.
Dziękuję Ci, za poświęcony czas na przeczytanie tego artykułu. Jeśli był on dla Ciebie przydatny, to gorąco zachęcam Cię do zapisania się na mój newsletter, jeżeli jeszcze Cię tam nie ma. Proszę Cię także o “polubienie” mojego bloga na Facebooku oraz kanału na YouTube – pomoże mi to dotrzeć do nowych odbiorców. Raz w tygodniu (niedziela punkt 17.00) otrzymasz powiadomienia o nowych artykułach / projektach zanim staną się publiczne. Możesz również pozostawić całkowicie anonimowy pomysł na wpis/nagranie.
Link do formularza tutaj: https://beitadmin.pl/pomysly
Pozostaw również komentarz lub napisz do mnie wiadomość odpisuję na każdą, jeżeli Masz jakieś pytania:).