FreeBSD nullfs

mount_nullfs can be used in FreeBSD to create ‘aliases’ of filesystem trees. These are similar to the effect that can be achieved with regular symlinks, like for instance:

# cd /
# ln -s home/opt opt

The main difference of doing the same thing with mount_nullfs is that system functions like stat(2) and realpath(3) will return the nullfs-aliased path instead of the real path. For example, if you create /opt as a nullfs-alias of /hugedisk/opt:

# mkdir /opt
# mount_nullfs /hugedisk/opt /opt

You will see something like this:

$ mount | fgrep /opt
/hugedisk/opt on /opt (nullfs, local)
$ cd /opt
$ realpath .
/opt
$ stat .
151060228 2096128 drwxr-xr-x 4 root wheel 8373856 512 "Apr  2 03:06:26 2006" "Mar 31 14:17:13 2006" "Mar 31 14:17:13 2006" "Nov 14 17:46:16 2004" 4096 4 0 .
$

Note how the ‘real’ path of /opt is not /hugedisk/opt and how the stat(1) utility reports that /opt is not a symbolic link but a directory (the first letter of file flags is ‘d’)!

One useful application of this, if you are running multiple chroot or jail environments is filesystem sharing between many chrooted or jailed environments. Mounting the common parts as read-only from parts of the host system of the chroot or jails is an easy and cool way to do this with mount_nullfs.

One thought on “FreeBSD nullfs

  1. سيف عبدالرزاق

    I thing you have first to load nullfs module to whose setting up MODULES_OVERRIDE in make.conf.

    cd /usr/src/sys/modules/nullfs
    make && make install clean
    kldload nullfs

Comments are closed.