This article covers a version of Ubuntu that is no longer supported. If you are currently operate a server running Ubuntu 12.04, we highly recommend upgrading or migrating to a supported version of Ubuntu:
Reason: Ubuntu 12.04 reached end of life (EOL) on April 28, 2017 and no longer receives security patches or updates. This guide is no longer maintained.
See Instead:
This guide might still be useful as a reference, but may not work on other Ubuntu releases. If available, we strongly recommend using a guide written for the version of Ubuntu you are using. You can use the search functionality at the top of the page to find a more recent version.
NFS mounts work to share a directory between several virtual servers. This has the advantage of saving disk space, as the home directory is only kept on one virtual private server, and others can connect to it over the network. When setting up mounts, NFS is most effective for permanent fixtures that should always be accessible.
An NFS mount is set up between at least two virtual servers. The machine hosting the shared network is called the server, while the ones that connect to it are called ‘clients’.
This tutorial requires 2 servers: one acting as the server and one as the client. We will set up the server machine first, followed by the client. The following IP addresses will refer to each one:
Master: 12.34.56.789
Client: 12.33.44.555
The system should be set up as root. You can access the root user by typing
sudo su-
Start off by using apt-get to install the nfs programs.
apt-get install nfs-kernel-server portmap
The next step is to decide which directory we want to share with the client server. The chosen directory should then be added to the /etc/exports file, which specifies both the directory to be shared and the details of how it is shared.
Suppose we wanted to share two directories: /home and /var/nfs.
Because the /var/nfs/ does not exist, we need to do two things before we can export it.
First, we need to create the directory itself:
mkdir /var/nfs/
Second, we should change the ownership of the directory to the user, nobody and the group, no group. These represent the default user through which clients can access a directory shared through NFS.
Go ahead and chown the directory:
chown nobody:nogroup /var/nfs
After completing those steps, it’s time to export the directories to the other VPS:
nano /etc/exports
Add the following lines to the bottom of the file, sharing both directories with the client:
/home 12.33.44.555(rw,sync,no_root_squash,no_subtree_check) /var/nfs 12.33.44.555(rw,sync,no_subtree_check)
These settings accomplish several tasks:
Once you have entered in the settings for each directory, run the following command to export them:
exportfs -a
Start off by using apt-get to install the nfs programs.
apt-get install nfs-common portmap
Once the programs have been downloaded to the the client server, create the directories that will contain the NFS shared files
mkdir -p /mnt/nfs/home mkdir -p /mnt/nfs/var/nfs
Then go ahead and mount them
mount 12.34.56.789:/home /mnt/nfs/home mount 12.34.56.789:/var/nfs /mnt/nfs/var/nfs
You can use the df -h command to check that the directories have been mounted. You will see them last on the list.
df -h
Filesystem Size Used Avail Use% Mounted on /dev/sda 20G 948M 19G 5% / udev 119M 4.0K 119M 1% /dev tmpfs 49M 208K 49M 1% /run none 5.0M 0 5.0M 0% /run/lock none 122M 0 122M 0% /run/shm 12.34.56.789:/home 20G 948M 19G 5% /mnt/nfs/home 12.34.56.789:/var/nfs 20G 948M 19G 5% /mnt/nfs/var/nfs
Additionally, use the mount command to see the entire list of mounted file systems.
mount
Your list should look something like this:
/dev/sda on / type ext4 (rw,errors=remount-ro,barrier=0) [DOROOT] proc on /proc type proc (rw,noexec,nosuid,nodev) sysfs on /sys type sysfs (rw,noexec,nosuid,nodev) none on /sys/fs/fuse/connections type fusectl (rw) none on /sys/kernel/debug type debugfs (rw) none on /sys/kernel/security type securityfs (rw) udev on /dev type devtmpfs (rw,mode=0755) devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620) tmpfs on /run type tmpfs (rw,noexec,nosuid,size=10%,mode=0755) none on /run/lock type tmpfs (rw,noexec,nosuid,nodev,size=5242880) none on /run/shm type tmpfs (rw,nosuid,nodev) rpc_pipefs on /run/rpc_pipefs type rpc_pipefs (rw) 12.34.56.789:/home on /mnt/nfs/home type nfs (rw,vers=4,addr= 12.34.56.789,clientaddr=12.33.44.555) 12.34.56.789:/var/nfs on /mnt/nfs/var/nfs type nfs (rw,vers=4,addr=12.34.56.78,clientaddr=12.33.44.555)
Once you have successfully mounted your NFS directories, you can test that they work by creating files on the Client and checking their availability on the Server.
Create a file in each directory to try it out:
touch /mnt/nfs/home/example /mnt/nfs/var/nfs/example
You should then be able to find the files on the Server in the /home and /var/nfs directories.
ls /home
ls /var/nfs/
You can ensure that the mount is always active by adding the directories to the fstab file on the client. This will ensure that the mounts start up after the server reboots.
nano /etc/fstab
12.34.56.789:/home /mnt/nfs/home nfs auto,noatime,nolock,bg,nfsvers=3,intr,tcp,actimeo=1800 0 0 12.34.56.789:/var/nfs /mnt/nfs/var/nfs nfs auto,noatime,nolock,bg,nfsvers=3,intr,tcp,actimeo=1800 0 0
You can learn more about the fstab options by typing in:
man nfs
Any subsequent restarts will include the NFS mount—although the mount may take a minute to load after the reboot
You can check the mounted directories with the two earlier commands:
df -h
mount
Should you decide to remove a directory, you can unmount it using the umount command:
cd sudo umount /directory name
You can see that the mounts were removed by then looking at the filesystem again.
df -h
You should find your selected mounted directory gone.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!
This is missing in tutorial: server $ sudo service nfs-kernel-server start client $ sudo chmod og+w /mnt/nfs/home
now it mounts… :P
DO, please add this to the manual:
server
$ sudo service nfs-kernel-server start
client
$ sudo chmod -R og+w /mnt/nfs/*
Is this supposed to work just like that? Without opening some ports on the server?
Excellent tutorial. However I have one question. My goal is: to isolate the file structure of use upload-able content from the application code to allow better scaling of the application using load balancers etc.
Will using 2 droplets to achieve this NFS setup result in much latency or increase in load time for the additional trip from one node to the other?
Thanks, Stefan
Getting a “An error occurred while mounting 0.” whenever I reboot now. Any ideas?
Solving my own post… There must be some kind of delay with the directory listings … After refreshing the folder a couple of times from the windows box the files that were moved via rsync were removed out of the list.
Further expansion of previous post…
The source box shows the files as gone and removed using ls in shell…
Windows 7 samba shows the files still there and i can copy them even though linux shows they are gone…
What gives lol
Tutorial worked like a charm, but when using rsync to move files from one server to another, the files aren’t removed from the source server… for example: rsync -avh --remove-source-files --progress /mnt/nfs/xfer/series /srv/fs1/work/iso
I’d been using cifs for this but it was painfully slow on linux to linux … NFS is much faster.
I’ve got the nfs mount as follows in fstab:
192.168.0.50:/srv/xfer /mnt/nfs/xfer nfs auto,noatime,nolock,bg,nfsvers=3,rsize=32768,wsize=32768,intr,tcp,actimeo=1800 0 0
the export from the nfs server is:
/srv/xfer 192.168.0.42(rw,sync,no_root_squash,no_subtree_check)
all folders and files within /srv/xfer are owned by nobody with nogroup
Any ideas?
Thanks!
@kourtzis What’s the output of ‘uname -rsi’?
:-( On the server: $ service nfs-kernel-server start FATAL: Could not load /lib/modules/3.8.0-19-generic/modules.dep: No such file or directory