Creating and Booting a Xen Guest domainU using an NFS Mounted Root Filesystem
In this chapter of Xen Virtualization Essentials we will be looking at creating a root filesystem for a Xen domainU system on an NFS mounted filesystem. In many ways this is little different from other techniques covered in preceding chapters in that similar techniques can be used to populate the root filesystem. The difference comes at the point that the domainU system is booted. Instead of running on a local filesystem, the root filesystem for our domainU system is instead located on a remote server. This is particularly useful when performing live migrations of running Xen based systems from one machine to another.
Kernel Requirements for NFS based Root Filesystems
There is one key requirement for booting a Xen domU with an NFS mounted root filesystem. By default, most Linux kernels are not configured to support NFS mounted root filesystems. It is essential, therefore, that a custom kernel with CONFIG_ROOT_NFS support enabled be built and referenced in the kernel= field of the Xen config file for the guest domain.
Populating the Root Filesystem
Once a custom Xen kernel with NFS root filesystem is available the next step is to populate a suitable disk partition with a root filesystem. In this tutorial we will assume that this partition is mounted at /xen. A number of options for creating the root fielsystem are available and have been covered in preceding chapters. Recommended chapters to read for this are as follows:
Exporting and Mounting the Xen Guest Root Filesystem
Before exporting the filesystem and mounting it on the remote system it is essential that NFS services be running on both systems. The specific steps to achieve this differ between Linux distributions but an internet search will provide a vast number of How To tips on how to achieve this for your distribution.
With the root filesystem populated on the NFS server and NFS services running, the next step is to export it so that it can be mounted on the remote system where we plan to boot our Xen guest domain. This is achieved by adding an entry to the /etc/exports file on the server. For example, to export the /xen filesystem such that it can be mounted over NFS by a system with an IP address of 192.168.2.11 we would add the following line to /etc/exports on the system acting as the NFS server:
The rw indicates that the system with the specified IP address is able to read and write to the NFS mounted filesystem when it mounted. The no_root_squash directive is used to allow the root user of the Xen domU to write to the NFS mounted root filesystem, (if this is not set they the root user will not have access to the guest system).
Once the /etc/exports file has been updated the exportfs command can be run to update the table of exported NFS filesystems. This command needs to be run as root using the -a flag:
su - exportfs -a
In order to verify the filesystem is correctly exported simply run exportfs without the -v command-line option:
exportfs -v /xen 192.168.2.11(rw,async,wdelay,no_root_squash,no_subtree_check)
Creating the Xen Configuration File for the NFS Root Filesystem
Now that we have a populated root filesystem for our Xen domainU system and have the filesystem exported on the NFS server it is now time to move to the remote system and set up the environment for the Xen guest system.
Once we are on the remote system we need to copy the custom kernel with root NFS support enabled to the local system so that it can be referenced in our Xen configuration file. Let's assume the kernel is named vmlinuz-2.6.18-53.1.14.el5.myxen and we have copied it to /boot on the local system.
For the purposes of this tutorial we will also assume that the NFS server hosting our domainU root filesystem has an IP address of 192.168.2.12. You will also recall that the the root filesystem is mounted as /xen on our NFS server. With this information we can create our Xen configuration file which we will name xen_nfs.cfg:
kernel = "/boot/vmlinuz-2.6.18-53.1.14.el5.myxen" memory = 256 name = "XenGuest" dhcp = "dhcp" vif = [''] nfs_root = "/xen" nfs_server = "192.168.2.12" root = "/dev/nfs"
One final change we need to make is to modify /etc/fstab file of our domainU root filesystem so that the root partition is referenced as /dev/nfs. For example:
/dev/nfs / ext3 defaults 1 1 #/dev/sdb2 none swap sw 0 0 none /dev/pts devpts gid=5,mode=620 0 0 none /dev/shm tmpfs defaults 0 0 none /proc proc defaults 0 0 none /sys sysfs defaults 0 0
All being well, it should now be possible to boot the domainU system using an NFS mounted root filesystem.
Booting the Xen domainU
The domainU with the NFS mounted root filesystem is created in the same way that any other domainU would be started, using the xm create command:
xm create xen_nfs.cfg
Xen should now create the guest domain, mount the root filesystem over NFS and boot up the system.