Die Xen Implementierung in OpenSolaris nennt sich aus markenrechtlichen Gründen xVM und wird standardmäßig mitgeliefert. Die Installation erfolgt über das Paketmanagement:
pkg install SUNWxvm SUNWxvmdom SUNWxvmhvm SUNWxvmipa SUNWxvmpv xvm xvm-gui SUNWlibvirt SUNWvirt-manager SUNWvirtinst
Nach Abschluss der Installation sollte man folgende Dienste aktivieren (svcadm enable dienst
):
online 11:10:27 svc:/system/xvm/vnc-config:default
online 11:39:10 svc:/system/xvm/store:default
online 11:39:11 svc:/system/xvm/xend:default
online 11:39:12 svc:/system/xvm/console:default
online 11:39:12 svc:/system/xvm/domains:default
online 11:55:04 svc:/system/xvm/virtd:default
Jetzt noch einen zusätzlichen Eintrag im grub Menü erstellen, damit der Hypevisor auch vor dem OpenSolaris Kernel geladen wird. Hier zu sollte folgender Eintrag zu /rpool/boot/grub/menu.lst
hinzugefügt werden (In meinem Beispiel liegt das System auf dem zpool rpool
):
title OpenSolaris 2009.06 xVM
findroot (pool_rpool,0,a)
bootfs rpool/ROOT/opensolaris
splashimage /boot/solaris.xpm
foreground d25f00
background 115d93
kernel$ /boot/$ISADIR/xen.gz
module$ /platform/i86xpv/kernel/$ISADIR/unix /platform/i86xpv/kernel/$ISADIR/unix -B $ZFS-BOOTFS,console=graphics
module$ /platform/i86pc/$ISADIR/boot_archive
Nach einem Reboot in OpenSolaris 2009.06 xVM sollte nun die Virtualisierungsumgebung bereit sein. Dies sieht man am schnellsten über virsh list
. Hier sollte zumindestens so etwas zurückgegeben werden:
Id Name State
----------------------------------
0 Domain-0 running
Andernfalls ist wahrscheinlich etwas schief gelaufen. Debugging Informationen gibt es in
Jetzt kann man sich einen ZFS Poo erstellen, wenn gewünscht, (zpool create xvmpool raidz2 c7t0d0 c7t1d0 c7t2d0 c7t3d0 c7t4d0
) und darin Volumes für die VMs einrichten (zfs create -V 10G xvmpool/domain
). Diese stehen dann unter /dev/zvol/dsk/xvmpool/domain
zur Verfügung. VMs lassen sich jetzt z.B. per virt-manager
oder virt-install
installieren. Hierbei ist das jeweilige zvol als file anzugeben. Falls man bereits vorhandene (Xen) VMs hat, kann man diese z.B. per cat domainimage > /dev/zvol/rdsk/xvmpool/domain
importieren. Auch das ggf. vorhandene Xen Configfile lässt sich per xm create domainconfig
importieren. Da allerdings einige Anpassungen notwendig sind und man xVM lieber über virsh steuern möchte, empfiehlt es sich gleich das XML Format von virsh zu nutzen. Ich poste hier mal eine Config für ein paravirtualisiertes Ubuntu, welches als Vorlage genutzt werden kann:
<domain type='xen'>
<name>ubuntu</name>
<bootloader>/usr/lib/xen/bin/pygrub</bootloader>
<os>
<type>linux</type>
</os>
<memory>262144</memory>
<vcpu>1</vcpu>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<clock offset='utc'/>
<devices>
<interface type='bridge'>
<source bridge='rge0'/>
<script path='vif-vnic'/>
</interface>
<disk type='block' device='disk'>
<driver name='phy'/>
<source dev='/dev/zvol/dsk/xvmpool/ubuntu'/>
<target dev='hda'/>
</disk>
<console tty='/dev/pts/7'/>
</devices>
</domain>
Das ganze als z.B. ubuntu.xml speichern, via virsh define ubuntu.xml
importieren, mit virsh start ubuntu
starten und über virt-console ubuntu
beim booten zuschauen.
Neue VMs habe ich einfach voll virtualisiert installiert und dann innerhalb der VM einen Xen Kernel installiert. Bei ubuntu muss man aufpassen, dass ein update-grub
in der Vollvirtualisierung keinen Grub Eintrag für den Xen Kernel erzeugt. Diesen muss man händisch zur /boot/grub/menu.lst
hinzufügen und als default Kernel einrichten. Anschließend kann man die Config per virsh dumpxml domain > domain.xml
exportieren, anhand obiger Beispielconfig anpassen und per virsh define domain.xml
wieder importieren.