Mastering NFS Server Deployment & Configuration
Table of Contents
Introduction #
Welcome back, my tech-savvy readers! This is your go-to guy for all things OpenShift, Platform Engineering, and DevSecOps, Nick Miethe, the meat behind MeatyBytes.io. As always, I’m here to guide you through the entire lifecycle of all things tech, and today we’re getting back to basics on a fairly foundational topics - mastering the deployment and configuration of an NFS server. In this case, we’re deploying on a DAS attached to a Dell R730 running RHEL 9.0 (don’t chew me out!), but that is largely inconsequential.
Overview #
Why does this matter, you may ask? Well, NFS or Network File System is a widely-used distributed file system protocol that allows sharing of files and directories over a network. Understanding how to effectively deploy and configure an NFS server is key to efficiently managing file sharing and storage, especially in a homelab setup. And when you’re working with a Direct Attached Storage (DAS) unit like the Supermicro CSE-847 attached to my Dell R730, it’s important to get the configuration just right to maximize storage utility and network performance.
Synopsis #
In this post, we’re going to deep dive into how to deploy and configure an NFS server on a DAS, or anywhere for that matter! We’ll cover everything from the basics of NFS, example configurations, best practices, and a detailed setup guide for an NFS server and client. Along the way, I’ll share some personal tips and tricks from my own homelab experiences.
So, if you’re ready to take your NFS game to the next level, read on. Because this guide is about to beef up your server deployment and configuration skills like never before!
Understanding NFS #
Before diving into the technicalities of the deployment, it’s essential to understand what NFS is and how it works. Network File System, or NFS, is a popular distributed file system protocol that operates based on the client-server model, with an NFS server hosting the files and directories to share, and the NFS client accessing the shared content over a network.
By leveraging NFS, users and programs can access files on remote systems as if they were local files.
NFS Advantages #
Network File System (NFS) provides several benefits, such as:
- Transparent Access: It provides the same access rights to the client as if the resources were local to the client’s system.
- Network Independence: NFS protocols are designed to be independent of the physical network.
- Machine Independence: NFS is implemented on various machines and operating systems.
- File System Semantics: NFS offers a set of standard file operations, like open, close, read, write, etc.
Mount Filesystem #
Before we can setup NFS, we must mount a filesystem to our drives. If you’ve already done this, consider moving on to NFS Server Configuration.
DAS Prerequisites #
Ensure your Dell R730 is equipped with 12 10TB HDDs, and you have RHEL installed on your server.
Step 1: Installing Necessary Packages #
First, we need to install the required packages for NFS and XFS file system. You can do this by running the following command:
sudo yum install -y nfs-utils xfsprogs
Step 2: Preparing the DAS #
To use the DAS for NFS, we first need to format it with the XFS file system. Before doing so, confirm the name of the disk (replace /dev/sdb
with your actual disk name):
sudo fdisk -l
Next, format the disk to XFS:
sudo mkfs.xfs /dev/sdb
Step 3: Mounting the DAS #
We’ll now mount the DAS as the /nfs
directory:
sudo mkdir /nfs
sudo mount /dev/sdb /nfs
To ensure the DAS is automatically mounted on boot, we need to add it to the /etc/fstab
file. Add the following line to the end of the file (replace /dev/sdb
with your actual disk name):
sudo echo "/dev/sdb /nfs xfs defaults 0 0" >> /etc/fstab
Next, we’ll proceed to the share configuration.
NFS Server Configuration #
Now, let’s dive into the core part of this guide: deploying and configuring an NFS server on a DAS attached to a Dell R730 running RHEL.
NFS Prerequisites #
A mounted filesystem, preferably XFS, such as explained above. Be sure the filesystem is blank, or has been backed up before proceeding!
Step 1 (optional): Ensure Necessary Packages are Installed #
If you skipped the instructions on mounting a filesystem for whatever reason, you will need to install the nfs-utils
:
sudo yum install -y nfs-utils
Step 2: Configuring the Shares #
After installing the NFS packages, we will configure the shares. Shares represent the directories that you want to share over the network.
sudo mkdir /nfs
sudo chown nfsnobody:nfsnobody /nfs
sudo chmod 755 /nfs
Next, we will edit the /etc/exports
file to add our share as an export point/directory. This should be structured as follows:
/SHARE HOST(rw,sync,no_root_squash)
Each directory line should contain:
/SHARE
- Your above configured shareHOST
- List of clients allowed to access share - hostnames, IP address, networks, wildcard “*”, etc
Options per client:
rw
- filesystem access permissionssync
- reply to client that data was storedno_root_squash
- do not maproot
or other UID/GID to anonymous
Multiple clients per share might look like this:
/SHARE HOST0(option0,option1,...) HOST1(...)
Our command will look like this:
sudo echo "/nfs *(rw,sync,no_root_squash)" >> /etc/exports
Note: If you were to change the configuration after starting nfs-server
, you can reload with the below command:
sudo exportfs -r
Step 3: Configuring the Firewall #
Ensure the firewall allows NFS services by running these commands:
sudo firewall-cmd --permanent --add-service=nfs
sudo firewall-cmd --permanent --add-service=mountd
sudo firewall-cmd --permanent --add-service=rpc-bind
sudo firewall-cmd --reload
Step 4: Starting the NFS Services #
Finally, we can start the NFS services:
sudo systemctl enable nfs-server
sudo systemctl start nfs-server
Finalize #
Your NFS server is now up and running, ready to serve files to any client within the network! It’s worth noting that it’s always a good idea to ensure that all the machines within the network have their clocks synchronized. You can use NTP for this.
NFS Client Configuration #
After configuring the NFS server, we need to set up the NFS client. The following steps explain how to mount the NFS share on a RHEL client system.
Step 1: Installing NFS Packages #
Install the required NFS packages on the client machine:
sudo yum install -y nfs-utils
Step 2: Mounting the NFS Share #
Create a directory to mount the NFS share:
sudo mkdir /mnt/nfs
Mount the NFS share on the client:
sudo mount -t nfs <server-ip>:/nfs /mnt/nfs
Check if the NFS share is mounted successfully:
df -h
Conclusion #
This tutorial guided you through the process of deploying and configuring an NFS server on an XFS filesystem, in this case hosted on a DAS attached to a Dell R730 running RHEL. It also walked you through setting up an NFS client. With this knowledge, you should be well-equipped to set up your own NFS environment and manage your shared directories and files over a network with ease. Remember, the keys to an effective NFS server setup lie in a well-prepared DAS, correctly configured shares, a correctly configured firewall, and services started in the right order.