Virtualizacia s Xen 2.0 a NetBSD 3

od haad ( | | )

V sucastnosti je mojou srdcovou zalezitostou Xen, instaloval som zopar serverov s nim a tak som sa rozhodol napisat o nom nejaky serial. Najprv si objasnime nejake pojmy aby sme kazdy vedeli o com sa bavime a mozme sa pustit do toho.

Virtualizacia, co to je?

Je to velmi stara technologia, ktorej princip spociva v behu roznych operacnych systemov na jednom zeleze paralelne. Prvy krat, pokial viem, ju zacala pouzivat firma IBM na svojej rade Mainframe, v sucastnosti zSeries. Prava virtualizacia nevyzaduje ziadne zasahy do virtualizovaneho OS. XEN ako technologia umoznuje v sucastnosti oba typy virtualizacie aj klasicku (treba na nu specialny CPU ktory ma podporu technologie IntelVT) aj paravitualizacie. Prikladom pravej virtualizacie je napr. Vmware, Bochs, Qemu.

Paravirtualizacia je sposob virtualizacie OS, v ktorom je nutne modifikovat beziaci OS tak, aby bol schopny behu. Tento sposob pouziva Xen v pripade, ze nemate to stastie a nieste vlastnikom CPU, ktory ma podporu IntelVT.

Ring je uroven opravnenia na ktorej bezi dany kod, resp. ktoru ma nastavena dana stranka v pamati. Od procesora 80286, su podporovane 4 urovne ochrany ring0-ring3. Normalne bezi kernel v ring0 a userspace v ring3. V pripade pouzitia Xen enabled kernelu a hypervisora, ktory bezi v ring 0 sa kernel aj hlavnej domene (tzv. Dom0) aj virtualizovanej domeny (tzv. DomU) posuva do ring1. Userspace opat bezi v ring3.

Domena DomU, virtualizovany Operacny system.

V sucastnosti je to pre verziu Xen 2 NetBSD, FreeBSD, Linux, a Plan9. Pre Xen 3 Solaris, NetBSD a Linux. Ak to nie je nutne DomU nema realnu predstavu o hardveri, ktory bezi na masine, pozna len zariadenia, ktore jej exportuje Hypervisor cez Dom0.

Domena Dom0 a hypervisor

Hypervisor je velmi maly kod, ktory vlastne umoznuje celu tu srandu s virtualizaciou. Hypervisor sa loadne do pamate ako prvy a nasledne zavedie do pamate aj kernel prislusnej Dom0. Stara sa o odchytavanie preruseni, ich spravne spracovanie, o vypadky a mapovanie stranok pamati (treba si uvedomit, ze kazdy DomU OS ma svoju pamat zacinajucu na addrese 0), exportovanie zariadeni ako su sietova karta a disk. Takztiez umoznuje vybrat jednotlive PCI zariadenia a tie pridavat jednotlivym domenam.

Dom0 je operacny system ktory, natiahne do pamati hypervisor a ten umoznuje nasledovne spustanie DomU a ich managovanie. Dom0 ma vsetky potrebne ovladace na HW pocitaca. Exportuje zariadenia ako disky, sietove karty operacnym systemom ktore bezia v rezime DomU.

Instalacia

V Operacnom systeme NetBSD je instalacia XENu velmi jednoducha, ako prvu vec potrebujeme zdrojaky kernulu a xen Dom0 enabled kernel. Pokial mame stiahnute zdrojaky konfigurak najdeme v /usr/src/sys/arch/i386/conf/XEN2_DOM0. Tento si skompilujeme a nainstalujeme standardnym sposobom.

Dalej potrebujem pkgsrc (co je framework velmi podobny portom vo FreeBSD a portage v Gentoo). Z neho si nainstalujeme sysutils/xenkernel20, sysutils/xentools20 a ako posledne sysutils/grub. Grub nainstalujeme do MBR a jeho kofigurak okrem standardnych veci nastavime takto: (Pricom dom0_mem=65536 predstavuje velkost pamate pridelenej Dom0 ktora sa stara o DomU)


title Xen 2.0 / NetBSD (hda0, vga)
root(hd0,0)
kernel (hd0,a)/xen.gz dom0_mem=65536
module (hd0,a)/NetBSD root=/dev/hda1 ro console=tty0

Po skopirovani spustacich skriptov pre xend a xendomains do /etc/rc.d/ do /etc/rc.conf napiseme


xend=YES

a


xendomains="mena domen ktorych configuraky chcem startovat automaticky po boote Dom0"

Konfiguraky najdem v /usr/pkg/etc/xen/.

Na spustenie xend taktiez potrebujem zariadenia v /dev ktore nie suv defaultnej instalacii pritomne. Preto spravime cd /dev && sh MAKEDEV xen .

Nasledne uz mozme xend nastartovat.

Prikazom xm list si mozme skontrolovat ci nam xend bezi ako ci nam bezia vsetky virtualne masiny a ked ano ako su na tom.


#xm list
Name Id Mem(MB) CPU State Time(s) Console
Domain-0 0 64 0 r---- 58.1

Vytvorenie DomU

Na vytvorenie DomU namtreba jej konfigurak ktory najjednoduchsie spravime tak, ze upravime xmexample1 ktory je dodavany s instalaciou na nase potreby.

pozn.: Jestlize vytvarime DomU, asi nas bude zajimat, jak jej naplnime adresarovou strukturou guest OS. Pro naplneni DomU VM adresarovou strukturou je vice postupu. Nejjednodussi podle NetBSD/xen HOWTO je pouzit pri prvnim spusteni DomU specialni ramdisk kernel obsahujici sysinst (instalacni program). Tedy kernel netbsd-INSTALL_XENU nebo netbsd-INSTALL_XEN2_DOMU. Dalsi tipy, jako pouziti instalacniho cdrom najdete rovnez v NetBSD/xen HOWTO. Po instalaci muzeme pouzit standardni netbsd-XENU nebo netbsd-XEN2_DOMU. (jirib)


kernel = "/NetBSD-XEN2_DOMU"
#kernel = "/NetBSD-INSTALL_XEN2_DOMU"
#kernel = "/NetBSD-INSTALL_XENU" # in NetBSD 3.0

# Memory allocation (in megabytes) for the new domain.
memory = 128

# A handy name for your new domain. This will appear in 'xm list',
# and you can use this as parameters for xm in place of the domain
# number. All domains must have different names.
#
name = "NetBSD"

# Which CPU to start domain on (only relevant for SMP hardware). CPUs
# numbered starting from ``0''.
#
cpu = -1 # leave to Xen to pick

#----------------------------------------------------------------------------
# Define network interfaces for the new domain.

# Number of network interfaces (must be at least 1). Default is 1.
nics = 1

# Define MAC and/or bridge for the network interfaces.
#
# The MAC address specified in ``mac'' is the one used for the interface
# in the new domain. The interface in domain0 will use this address XOR'd
# The MAC address specified in ``mac'' is the one used for the interface
# in the new domain. The interface in domain0 will use this address XOR'd
# with 00:00:00:01:00:00 (i.e. aa:00:00:51:02:f0 in our example). Random
# MACs are assigned if not given.
#
# ``bridge'' is a required parameter, which will be passed to the
# vif-script called by xend(8) when a new domain is created to configure
# the new xvif interface in domain0.
#
# In this example, the xvif is added to bridge0, which should have been
# set up prior to the new domain being created -- either in the
# ``network'' script or using a /etc/ifconfig.bridge0 file.
#
vif = [ 'mac=aa:00:00:50:02:f0, bridge=bridge0' ]

#----------------------------------------------------------------------------
# Define the disk devices you want the domain to have access to, and
# what you want them accessible as.
#
# Each disk entry is of the form:
#
# phy:DEV,VDEV,MODE
#
# where DEV is the device, VDEV is the device name the domain will see,
# and MODE is r for read-only, w for read-write. You can also create
# file-backed domains using disk entries of the form:
#
# file:PATH,VDEV,MODE
#
# where PATH is the path to the file used as the virtual disk, and VDEV
#
# where PATH is the path to the file used as the virtual disk, and VDEV
# and MODE have the same meaning as for ``phy'' devices.
#
# VDEV doesn't really matter for a NetBSD guest OS, but it does for Linux.
# Worse, the device has to exists in /dev/ of domain0, because xm will
# try to stat() it. This means that in order to load a Linux guest OS
# from a NetBSD domain0, you'll have to create /dev/hda1, /dev/hda2, ...
# on domain0, with the major/minor from Linux :(

disk = [ 'phy:/dev/wd0e,wd0d,w' ]
#disk = [ 'file:/var/xen/nbsd-disk,wd0d,w' ]

#----------------------------------------------------------------------------
# Set the kernel command line for the new domain.

# Set root device. This one does matter for NetBSD
root = "/dev/wd0d"
# extra parameters passed to the kernel
#extra = ""

#----------------------------------------------------------------------------
# Set according to whether you want the domain restarted when it exits.
# The default is False.
#autorestart = True

NetBSD sa dodava spolu so specialnym kernelom, ktory je schopny nabootovat a spustit instalaciu OS na virtualny disk. Takto najlahsie nainstalujete NetBSD na virtualny disk a mozete ho zacat pouzivat.

Tento kernel sa vola NetBSD-INSTALL_XENU a normalny kernel pre domU ma nazov NetBSD-XENU Tieto kernely sa daju stiahnut z oficialneho ftp servera ftp.NetBSD.org alebo samostatne skompilovat.

Virtualny network interface definujeme v DomU konfiguraku takto:


vif = [ 'mac=aa:00:00:50:02:f0, bridge=bridge0' ]

Ak prvu cast kde je mac nechame prazdnu pri kazdom boote sa nam vygeneruje nova MAC adresa. bridge je nazov bridgu ku ktoremu sa nasa virtualne sietovka pripoji aby mohla komunikovat s okolim.

Virtualny disk sa definuje takto:


disk = [ 'phy:/dev/wd0e,wd0d,w' ]
#disk = [ 'file:/var/xen/nbsd-disk,wd0d,w' ]

phy znamena, ze sa bavime o fyzickom zariadeni teda reaknej particii na disku a file ze sa bavime o file v suborovom systeme na Dom0. wd0d je meno pod ktorym sa zobrazi DomU kernelu pri bootovani a 'w' je write mod ktory hovori ze na disk sa da aj zapisovat.

Ak mame konfigurak spraveny horsa do virtualizacie.

Running

Prikazom xm create {meno konfiguraku} vytvorime virtualnu domenu. xm create xmexample1 vytvori domenu podla konfiguraku v /usr/pkg/etc/xen/xmexample1

ak dame po uspesnom vytvoreni xm list uvidime


Name Id Mem(MB) CPU State Time(s) Console
Domain-0 0 63 0 r---- 25086.1
NetBSD 2 128 0 -b--- 9014.0 9602

Vela zdaru vam pri uspesnom virtualizovani zelam :).

Odkazy

P.S. V momente ako updatnem moj domaci XEN server na XEN3 tak napisem nove HOWTO a to opat uverejnim tu.

P.S.2 Thanks Manuel Boyuer port maintainer of netbsd/xen.

napísal celeb, Št, 2006-08-17 19:57

vsimol som si, ze "Instalaciu OS na virtualny disk.Takto najlahsie nainstalujete NetBSD na virtualny disk a mozete ho zacat pouzivat. " je tam 2krat

© Copyright 2006 NetBSD.sk. Ďakujem za mnoho KeNNymu, xyzZovi a Furbymu. Design by Dewden Services.