NFS(Network File System) is a distributed file system protocol that allows a user on a client computer to access files over a computer network much like local storage is accessed. It is a popular, cross-platform and distributed file system protocol used to export local file systems over the network so that clients can share directories and files with others over a network and interact with them as though they are mounted locally. This distributed file system protocol allows a user on a client computer to access files over a network in the same way they would access a local storage file. Because it is an open standard, anyone can implement the protocol.
Rocky Linux 8 supports NFS version 3(NFSv3) and 4(NFSv4). The default NFS version is 4.2 which features support for Access Control Lists (ACLs), server-side copy, sparse files, space reservation, labeled NFS, layout enhancements, and much more.
In this guide, we will learn how to install and configure the NFS Server and NFS client on Rocky Linux 8.
- Updated Rocky Linux Server to be used as the server and another one for the client
- Connectivity from the servers
- Sudo access from the servers
Table of content
- Ensure the server is updated
- Install the NFS packages
- Starting and enabling the NFS server
- Enabling the NFS service on Firewall
- Configuring exports on NFS server
- Setting up NFS client systems
1. Ensuring that the server is up to date
Before proceeding, let us ensure that the server is up to date. Use this command to achieve this:
sudo dnf -y update
2. Install the NFS packages
nfs-utils provides a daemon for the kernel NFS server and related tools such as the contains the
showmount program. Use this command to install the package:
sudo dnf install -y nfs-utils
3. Starting and enabling the NFS server
Once the NFS packages is installed successfully, we can start and enable the NFS server. Use this systemctl command to start the server:
sudo systemctl start nfs-server
Confirm the status of the service with this command:
$ sudo systemctl status nfs-server ● nfs-server.service - NFS server and services Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; disabled; vendor preset: disabled) Active: active (exited) since Thu 2022-01-13 17:54:19 UTC; 36s ago Process: 59320 ExecStart=/bin/sh -c if systemctl -q is-active gssproxy; then systemctl reload gssproxy ; fi (code=exited, status=0/SUCCESS) Process: 59308 ExecStart=/usr/sbin/rpc.nfsd (code=exited, status=0/SUCCESS) Process: 59305 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS) Main PID: 59320 (code=exited, status=0/SUCCESS) Jan 13 17:54:18 dev-rockysrv.inv.re systemd: Starting NFS server and services... Jan 13 17:54:19 dev-rockysrv.inv.re systemd: Started NFS server and services.
The above output shows that the service was started successfully. To enable the service to start at system boot, use this command:
sudo systemctl enable nfs-server
Please note that the other services that are required for running an NFS server or mounting NFS shares such as
rpc.idmapd will be started automatically.
4. Enabling the NFS Service in Firewall
If you have firewalld installed and enabled, you need to enable the NFS services. You need to allow traffic to the necessary NFS services (mountd, nfs, rpc-bind) via the firewall, then reload the firewall rules to apply the changes, as follows.
sudo firewall-cmd --permanent --add-service=nfs sudo firewall-cmd --permanent --add-service=rpc-bind sudo firewall-cmd --permanent --add-service=mountd sudo firewall-cmd --reload
5. Configuring exports on NFS server
The configuration files for NFS server are located in these paths:
/etc/nfs.conf– this is the main configuration file for the NFS daemons and tools
/etc/nfsmount.conf– this is the NFS mount configuration file
Let us create file systems to export or share on the NFS server. We will create two file systems to stare,
/mnt/nfs_shares/files for shared files and
/mnt/nfs_shares/backup for backups.
Let us create the directories in the server
sudo mkdir -p /mnt/nfs_shares/files sudo mkdir -p /mnt/nfs_shares/backup
$ sudo ls /mnt/nfs_shares backup files
Then add the above filesystems in the exports file
/etc/exports in the NFS server to determine the local file systems that are exported to the NFS clients.
Open the exports file with your text editor
sudo vim /etc/exports
Then add this content:
/mnt/nfs_shares/files 10.70.5.170(rw,sync) /mnt/nfs_shares/backup 10.70.5.0/24(rw,sync,no_all_squash,root_squash)
These are the export options that can be used:
- rw – allows both read and write access on the file system.
- sync – tells the NFS server to write operations (writing information to the disk) when requested (applies by default).
- all_squash – maps all UIDs and GIDs from client requests to the anonymous user.
- no_all_squash – used to map all UIDs and GIDs from client requests to identical UIDs and GIDs on the NFS server.
- root_squash – maps requests from root user or UID/GID 0 from the client to the anonymous UID/GID.
Once the file systems are defined in the exports file, we need to run the
exportfs command for them to be exported. The exportfs can be run with the
-a flag meaning export or unexport all directories,
-r meaning reexport all directories, synchronizing /var/lib/nfs/etab with /etc/exports and files under /etc/exports.d, and -v enables verbose output.
sudo exportfs -arv
This is the output on my server
$ sudo exportfs -arv exporting 10.70.5.170:/mnt/nfs_shares/files exporting 10.70.5.0/24:/mnt/nfs_shares/backup
To display the current export list, run the following command. Please note that the exportfs table also applies some default options that are not explicitly defined:
$ sudo exportfs -s /mnt/nfs_shares/files 10.70.5.170(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash) /mnt/nfs_shares/backup 10.70.5.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)
6. Setting up NFS Client systems
Now that we have configured the exports on the server, we can access them from the client system. Login to the client system and install the necessary packages to allow NFS shares to be accessed.
On RHEL based systems:
sudo dnf install -y nfs-utils nfs4-acl-tools
On Debian/Ubuntu based distros:
sudo apt install nfs-common nfs4-acl-tools
We can then run the showmount command to show mount information for the NFS Server. The command outputs exported filesystems on the server
showmount -e 10.70.5.221
$ showmount -e 10.70.5.221 Export list for 10.70.5.221: /mnt/nfs_shares/backup 10.70.5.0/24 /mnt/nfs_shares/files 10.70.5.170
Create a local file system directory for mounting the remote NFS file systems and mount it as an nfs file system
mkdir -p ~/backups mkdir -p ~/nfs_files sudo mount -t nfs 10.70.5.221:/mnt/nfs_shares/backup ~/backups sudo mount -t nfs 10.70.5.221:/mnt/nfs_shares/files ~/nfs_files
We can then confirm that the remote file system has been mounted by running the mount command and filter nfs mounts.
sudo mount | grep nfs
Output on my machine
$ sudo mount | grep nfs rpc_pipefs on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw,relatime) 10.70.5.221:/mnt/nfs_shares/backup on /home/rocky/backups type nfs4 (rw,relatime,vers=4.2,rsize=524288,wsize=524288,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=10.70.5.170,local_lock=none,addr=10.70.5.221) 10.70.5.221:/mnt/nfs_shares/files on /home/rocky/nfs_files type nfs4 (rw,relatime,vers=4.2,rsize=524288,wsize=524288,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=10.70.5.170,local_lock=none,addr=10.70.5.221)
To enable the mount to persistent even after a system reboot, add the entries to the
/etc/fstab file. Use these commands(as root) to achieve that:
echo "10.70.5.221:/mnt/nfs_shares/backup /home/rocky/backups nfs defaults 0 0" >> /etc/fstab echo "10.70.5.221:/mnt/nfs_shares/files /home/rocky/nfs_files nfs defaults 0 0" >> /etc/fstab
Lastly, test if NFS setup is working fine by creating a file on the server and check if the file can be seen in the client.
On the server:
sudo touch /mnt/nfs_shares/files/file_on_server.txt
Then on the client machine confirm
$ ls ~/nfs_files/ file_on_server.txt
You can also do the reverse. On the client:
Then on the server confirm:
$ ls /mnt/nfs_shares/files/ file_on_client.txt file_on_server.txt
To unmount the remote file system on the client-side.
sudo umount /mnt/nfs_shares/files sudo umount /mnt/nfs_shares/backup
Please note that you can not
unmount the remote file system if you are operating within it.
In this guide we managed to install and configure an NFS server and client on Rocky Linux 8.