Nexenta is an OpenSolaris distribution that combines a GNU userland with an OpenSolaris kernel. Because it’s based on OpenSolaris (kernel 104 for this release), we should be able to get it up and running on XenServer in a manner similar to what I’ve covered in previous blog entries.
Unfortunately, I haven’t yet been fully successful. Nonetheless, I thought it might be useful to post my findings:
1. The boot archive on the installation CD (miniroot) does not include the paravirtualized kernel.
2. The boot process doesn’t seem to recognize the CDROM device as a CDROM.
3. Once booted, all of the disks and virtualized devices seem to be detected successfully (except the CDROM). See the output below for details.
4. Installing via HVM (which does work, but is terribly slow) and attempting to convert the installation to PV doesn’t seem to work – the kernel will not boot the “syspool/root-nmu-000″ ZFS environment. This isn’t surprising; I couldn’t get this to work with OpenSolaris either. With OpenSolaris I was able to just install directly into a PV environment, thereby circumventing that difficulty altogether.
I solved the first problem by modifying the miniroot archive (/platform/i86pc/miniroot on the installation CD) using an OpenSolaris box. It’s a gzipped UNIX Fast File System file. To alter it, you’ll need to unzip and mount the file (use “-o loop”) on OpenSolaris and just add the /platform/i86xpv files from a fully installed Nexenta instance to the archive. After adding the files, unmount it, re-gzip it and transfer it over to the XenServer as the VM’s PV-ramdisk.
Similarly, take the /platform/i86xpv/kernel/unix file and move it over to the XenServer as the VM’s PV-kernel.
Now, with the PV-args set thusly:
xe vm-param-set uuid=[VM UUID] PV-args='/platform/i86xpv/kernel/unix -B console=ttya -m milestone=0 -v'
. . . you should be able to boot the PV kernel. What you should see is:
module /platform/i86xpv/kernel/unix: text at [0xf4c00000, 0xf4cdca6f] data at 0xf5000000
module /kernel/genunix: text at [0xf4cdca70, 0xf4ea541f] data at 0xf506c140
v3.2.1 chgset '58bf50a2c754.3c18e9e0f827 (3.2.1 5.0.0.235.17085)'
SunOS Release 5.11 Version NexentaOS_20081207 32-bit
Loading Nexenta...
features: 611e66c6
mem = 1048576K (0x40000000)
Using default device instance data
root nexus = i86xpv
pseudo0 at root
pseudo0 is /pseudo
scsi_vhci0 at root
scsi_vhci0 is /scsi_vhci
ramdisk0 at root
ramdisk0 is /ramdisk
root on /ramdisk:a fstype ufs
/cpus (cpunex0) online
pseudo-device: dld0
dld0 is /pseudo/dld@0
xpvd0 at root
xencons@0, xencons0
xencons0 is /xpvd/xencons@0
cpu0: x86 (chipid 0x0 GenuineIntel F64 family 15 model 6 step 4 clock 2660 MHz)
cpu0: Intel(r) Xeon(tm) CPU 2.66GHz
pseudo-device: lofi0
lofi0 is /pseudo/lofi@0
pseudo-device: stmf_sbd0
stmf_sbd0 is /pseudo/stmf_sbd@0
pseudo-device: devinfo0
devinfo0 is /pseudo/devinfo@0
Hostname: hardy_installcd
iscsi0 at root
iscsi0 is /iscsi
xsvc0 at root: space 0 offset 0
xsvc0 is /xsvc@0,0
pseudo-device: pseudo1
pseudo1 is /pseudo/zconsnex@1
pseudo-device: profile0
profile0 is /pseudo/profile@0
pseudo-device: ramdisk1024
ramdisk1024 is /pseudo/ramdisk@1024
pseudo-device: lockstat0
lockstat0 is /pseudo/lockstat@0
pseudo-device: llc10
llc10 is /pseudo/llc1@0
pseudo-device: dtrace0
dtrace0 is /pseudo/dtrace@0
pseudo-device: systrace0
systrace0 is /pseudo/systrace@0
pseudo-device: fbt0
fbt0 is /pseudo/fbt@0
pseudo-device: sdt0
sdt0 is /pseudo/sdt@0
pseudo-device: fasttrap0
fasttrap0 is /pseudo/fasttrap@0
pseudo-device: power0
power0 is /pseudo/power@0
pseudo-device: zfs0
zfs0 is /pseudo/zfs@0
pseudo-device: srn0
srn0 is /pseudo/srn@0
pseudo-device: stmf0
stmf0 is /pseudo/stmf@0
pseudo-device: fct0
fct0 is /pseudo/fct@0
pseudo-device: ucode0
ucode0 is /pseudo/ucode@0
pseudo-device: fcsm0
fcsm0 is /pseudo/fcsm@0
pseudo-device: fcp0
fcp0 is /pseudo/fcp@0
/xpvd/xnf@0 (xnf0) online
xdf@51712, xdf0
xdf0 is /xpvd/xdf@51712
/xpvd/xdf@51712 (xdf0) online
xdf@51760, xdf1
xdf1 is /xpvd/xdf@51760
/xpvd/xdf@51760 (xdf1) online
xenbus@0, xenbus0
xenbus0 is /xpvd/xenbus@0
domcaps@0, domcaps0
domcaps0 is /xpvd/domcaps@0
balloon@0, balloon0
balloon0 is /xpvd/balloon@0
NOTICE: xdf@51712: failed to read feature-barrier
xdf@51712: 41943040 blocksxdf@51760: 1034668 blocksCD-ROM: discovery failed
ERROR: svc:/system/filesystem/usr:default failed to mount /dev/fd (see 'svcs -x' for details)
Apr 2 12:42:44 svc.startd[7]: svc:/system/filesystem/usr:default: Method "/lib/svc/method/fs-usr" failed with exit status 95.
Apr 2 12:42:44 svc.startd[7]: system/filesystem/usr:default failed fatally: transitioned to maintenance (see 'svcs -xv' for details)
Requesting System Maintenance Mode
(See /lib/svc/share/README for more information.)
Console login service(s) cannot run
Enter user name for system maintenance (control-d to bypass):
From here, you can log in as root (blank password), but you can’t do much. If someone knows how to solve the CDROM detection problem, I think we can move further.
Hopefully Nexenta includes provisions to allow booting the system as a domU in their next release. It seems silly not to, considering that the framework is already pretty much there.