How can I cache NFS shares on a local disk?

Solution 1:

Stefan led me down the right track. This will work on any system 12.04 and newer.

Your filesystem will also need extended attribute support. If you're using EXT4 you're fine, if you're using EXT3 you'll need to ensure your filesystem is mounted with the user_xattr attribute.

Here's how I set it up on the client machine, you don't need to do anything on the server side.

  1. First, install the user space daemon: sudo apt-get install cachefilesd

  2. Then turn it on by editing /etc/default/cachefilesd and changing the run line to RUN=yes

  3. Ensure your NFS mount in /etc/fstab has an fsc option. Don't forget to remount it after you've made the changes. Here's my excerpt (modify to your needs):

    192.168.1.115:/home/jorge /home/jorge/Backup nfs fsc

  4. Start the service: sudo /etc/init.d/cachefilesd start

Configuration of the cache is done in /etc/cachefilesd.conf, see the references for what the setting options are.

References:

  • Linux Magazine
  • /usr/share/doc/cachefilesd/howto.txt.gz
  • /usr/share/doc/cachefilesd/README.gz
  • How do I enable extended attributes on ext4?

Solution 2:

I'm not sure if there is any way to do this currently with Ubuntu 10.04 LTS.

However, the newer versions of the Linux kernel include a feature called FS-Cache & CacheFS, which sounds exactly like what you (and I) want.

Also see Local Caching For Network Filesystems.