💾
Storage

NFS Server

Network File System for shared storage across Linux servers

🐧 Linux🍎 Mac🪟 Windows
Reviewed: Tested on: Kubernetes 1.29 · Terraform 1.8 · Ubuntu 22.04

What is this?

NFS shares a folder on one server so other computers on the network can use it like a shared drive.

📁

Config files for NFS Server

Where to create or edit the main configuration — paths below match the setup steps.

  • /etc/exports

    Location: NFS server

    Exported paths and client permissions

📥

Step 01

Install NFS

(01)Install NFS server packages

Linux
1# Ubuntu / Debian
2sudo apt-get update
3sudo apt-get install -y nfs-kernel-server
4
5# RHEL / CentOS / Fedora
6sudo dnf install -y nfs-utils
7sudo systemctl enable --now nfs-server
⚙️

Step 02

Configure NFS

(01)Export shared directory (server)

Linux
1# Create shared directory
2sudo mkdir -p /srv/nfs/share
3sudo chown nobody:nogroup /srv/nfs/share
4sudo chmod 777 /srv/nfs/share
5
6# Configure exports
7sudo nano /etc/exports
8
9# Add line (adjust network):
10/srv/nfs/share 192.168.1.0/24(rw,sync,no_subtree_check,no_root_squash)
11
12# Apply exports
13sudo exportfs -ra
14sudo exportfs -v
15sudo systemctl restart nfs-kernel-server

(02)Mount NFS on client

Linux
1# Install client
2sudo apt-get install -y nfs-common
3
4# Create mount point
5sudo mkdir -p /mnt/nfs-share
6
7# Mount
8sudo mount -t nfs 192.168.1.10:/srv/nfs/share /mnt/nfs-share
9
10# Persistent mount in /etc/fstab:
11# 192.168.1.10:/srv/nfs/share /mnt/nfs-share nfs defaults 0 0
12
13df -h | grep nfs

(03)NFSv4 with fsid (recommended)

Linux
1# /etc/exports for NFSv4:
2/srv/nfs *(rw,fsid=0,sync,no_subtree_check)
3
4# Client mount:
5sudo mount -t nfs4 192.168.1.10:/ /mnt/nfs-share

Step 03

Verify NFS

(01)Test read/write

Linux
1# On server
2showmount -e localhost
3
4# On client
5echo "test" | sudo tee /mnt/nfs-share/test.txt
6cat /mnt/nfs-share/test.txt
7sudo nfsstat

Step 04

Manage NFS

(01)Export management and firewall

Linux
1sudo exportfs -v
2sudo exportfs -ua # unexport all
3sudo exportfs -ra # re-export
4
5# Firewall (NFS uses 2049)
6sudo ufw allow from 192.168.1.0/24 to any port nfs
7sudo rpcinfo -p | grep nfs

(02)Kubernetes NFS provisioner

Linux
1# Install nfs-utils on all K8 nodes
2# Create PV manually:
3kubectl apply -f - <<EOF
4apiVersion: v1
5kind: PersistentVolume
6metadata:
7 name: nfs-pv
8spec:
9 capacity:
10 storage: 10Gi
11 accessModes: [ReadWriteMany]
12 nfs:
13 server: 192.168.1.10
14 path: /srv/nfs/share
15EOF
🔧

Step 05

Common Problems

#1Mount failed / access denied

Linux
1# On server — check exports
2sudo exportfs -v
3showmount -e localhost
4# On client:
5sudo mount -t nfs -v server-ip:/path /mnt/nfs