Slackware nfsroot

The performance is surprisingly good, and rivals that of a USB flash disk. It can't compare with a USB hard disk though, especially when doing things that make the system swap.

Here's what you do:

Setting up your server

Create the directory /srv/nfsroots (or wherever you want to put the rootfs)

Add the following line to /etc/exports:

/srv/nfsroots 192.168.1.0/24(rw,sync,no_root_squash,no_subtree_check)

192.168.1.X is my LAN.

Start the nfs daemon:

For Slackware:

chmod 755 /etc/rc.d/rc.nfsd

/etc/rc.d/rc.nfsd start

(Follow instructions for whichever distro you're using).

Setting up the rootfs

You can grab the Slackware rootfs from Sourceforge and it should work OK. In fact, you can probably follow most any Debian/Gentoo/Slackware instructions for the Bifferboard, they should work the same. Uncompress the files into /srv/nfsroots/slackware.

Compiling the kernel

I used Linux 3.3 rc1. You can use it completely un-patched for initial testing of nfsroot then try to add any patches you need for desired functionality. At a minimum you want the PIT tick rate patch so your clock doesn't become inaccurate. Use the configuration attached at the bottom of the page as a starting point, it's minimal and fits even on 1MB devices.

Copying the kernel modules

As explained elsewhere, you need to compile and copy any kernel modules , with something like:

make modules_install INSTALL_MOD_PATH=<rootfs location>

Put the generated directory structure in the rootfs, under /lib/modules.

Configuring Biffboot

The kernel configuration at the bottom of this page doesn't embed any command-line options! It leaves this all up to the bootloader. You need to use a Biffboot kernel command-line like this:

console=uart,io,0x3f8 root=/dev/nfs ip=dhcp nfsroot=192.168.1.67:/srv/nfsroots/slackware ro

You can change the ip= part to set a static IP address if you prefer. Look in the kernel source under Documentation/filesystems/nfs/nfsroot.txt for a complete breakdown of all possible options.

Configuring Swap

It probably doesn't make sense to have a huge swap file when the network is going to limit the performance. On the server, create a swapfile, say 64M like this:

dd if=/dev/zero of=/srv/nfsroots/slackware/swapfile bs=1024 count=64k

Then format it for swap (again on the server):

mkswap /srv/nfsroots/slackware/swapfile

You associate a loopback device with the file:

losetup /dev/loop0 /swapfile

Then start using the loopback device for swap:

swapon /dev/loop0

You have to add a startup script somewhere to perform the losetup on every boot, /etc/rc.d/rc.S might be a good candidate.

That's all!