NFS (Network File System) ermöglicht das Freigeben von Verzeichnissen über das Netzwerk. Clients können diese Verzeichnisse wie lokale Dateisysteme nutzen.
Warum NFS?
Vorteile
- Native Linux-Unterstützung
- Keine zusätzliche Software auf Clients
- Hohe Performance
- Transparente Dateizugriffe
- Unix-BerechtigungenNFS-Versionen
| Version | Features | |---------|----------| | NFSv3 | Weit verbreitet, UDP/TCP | | NFSv4 | Firewall-freundlich, Kerberos | | NFSv4.1 | pNFS, Multi-Server | | NFSv4.2 | Server-side Copy, Sparse Files |
Server-Installation
Debian/Ubuntu
apt update
apt install nfs-kernel-serverCentOS/RHEL
dnf install nfs-utilsService aktivieren
systemctl enable --now nfs-server
systemctl status nfs-serverFreigaben konfigurieren
exports-Datei
# /etc/exports
# Einfache Freigabe
/srv/nfs/data 192.168.1.0/24(rw,sync,no_subtree_check)
# Mehrere Clients
/srv/nfs/public 192.168.1.0/24(ro) 10.0.0.0/8(ro)
# Einzelner Host
/home/shared 192.168.1.100(rw,sync,no_root_squash)
# Alle Hosts (unsicher!)
/srv/nfs/open *(ro,sync)Optionen erklärt
| Option | Beschreibung | |--------|--------------| | rw | Lesen und Schreiben | | ro | Nur Lesen | | sync | Synchrones Schreiben (sicher) | | async | Asynchron (schneller, riskanter) | | no_subtree_check | Keine Subtree-Prüfung (Performance) | | no_root_squash | Root-Zugriff behalten | | root_squash | Root → nobody (Standard) | | all_squash | Alle Benutzer → nobody |
Freigabe erstellen
# Verzeichnis erstellen
mkdir -p /srv/nfs/data
chown nobody:nogroup /srv/nfs/data
chmod 755 /srv/nfs/data
# Exports bearbeiten
nano /etc/exports
# Exports anwenden
exportfs -ra
# Aktive Exports anzeigen
exportfs -vClient-Konfiguration
Client-Installation
# Debian/Ubuntu
apt install nfs-common
# CentOS/RHEL
dnf install nfs-utilsManuelles Mounten
# Mount-Punkt erstellen
mkdir -p /mnt/nfs/data
# Mounten
mount -t nfs server:/srv/nfs/data /mnt/nfs/data
# Mit Optionen
mount -t nfs -o rw,soft,timeo=5 server:/srv/nfs/data /mnt/nfs/dataVerfügbarkeit prüfen
# Server-Exports abfragen
showmount -e server-ip
# Beispielausgabe
Export list for server-ip:
/srv/nfs/data 192.168.1.0/24Automatisch beim Boot (fstab)
# /etc/fstab
server:/srv/nfs/data /mnt/nfs/data nfs defaults,_netdev 0 0
# Mit Optionen
server:/srv/nfs/data /mnt/nfs/data nfs rw,soft,timeo=5,_netdev 0 0Autofs (Auto-Mount)
# Installation
apt install autofs
# /etc/auto.master
/mnt/nfs /etc/auto.nfs --timeout=60
# /etc/auto.nfs
data -fstype=nfs,rw server:/srv/nfs/data
# Service neu starten
systemctl restart autofs
# Zugriff triggert Mount
ls /mnt/nfs/dataNFSv4-Konfiguration
Server-Konfiguration
# /etc/exports (NFSv4)
# Root-Export (Pseudo-Filesystem)
/srv/nfs 192.168.1.0/24(rw,sync,fsid=0,crossmnt,no_subtree_check)
# Unterverzeichnisse
/srv/nfs/data 192.168.1.0/24(rw,sync,no_subtree_check)
/srv/nfs/backup 192.168.1.0/24(rw,sync,no_subtree_check)Domain-Mapping
# /etc/idmapd.conf
[General]
Domain = example.localClient mounten (NFSv4)
# NFSv4 explizit
mount -t nfs4 server:/ /mnt/nfs
# Unterverzeichnis
mount -t nfs4 server:/data /mnt/nfs/data
# In fstab
server:/ /mnt/nfs nfs4 defaults,_netdev 0 0Firewall-Konfiguration
NFSv4 (einfach)
# Nur Port 2049
ufw allow from 192.168.1.0/24 to any port 2049NFSv3 (mehrere Ports)
# Ports fixieren
# /etc/default/nfs-kernel-server (Debian)
RPCMOUNTDOPTS="--manage-gids -p 32767"
RPCNFSDOPTS="-p 2049"
STATDOPTS="--port 32765 --outgoing-port 32766"# /etc/modprobe.d/lockd.conf
options lockd nlm_udpport=32768 nlm_tcpport=32768# Firewall-Regeln
ufw allow from 192.168.1.0/24 to any port 111
ufw allow from 192.168.1.0/24 to any port 2049
ufw allow from 192.168.1.0/24 to any port 32765:32768Performance-Optimierung
Mount-Optionen
# Optimierte Mount-Optionen
mount -t nfs -o rw,hard,intr,rsize=131072,wsize=131072,noatime server:/data /mnt/data
# fstab
server:/data /mnt/data nfs rw,hard,intr,rsize=131072,wsize=131072,noatime,_netdev 0 0Optionen erklärt
| Option | Beschreibung | |--------|--------------| | rsize=131072 | Read-Block-Größe (128KB) | | wsize=131072 | Write-Block-Größe (128KB) | | hard | Bei Fehlern warten | | soft | Bei Fehlern Fehler zurückgeben | | intr | Unterbrechbar | | noatime | Keine Zugriffszeiten aktualisieren | | async | Asynchrones Schreiben | | nconnect=4 | Mehrere TCP-Verbindungen (NFSv4.1+) |
Server-Optimierung
# Mehr NFS-Threads
# /etc/default/nfs-kernel-server
RPCNFSDCOUNT=16 # Standard: 8systemctl restart nfs-kernel-serverBerechtigungen
UID/GID-Mapping
NFS nutzt numerische UIDs/GIDs.
Benutzer 1000 auf Client = Benutzer 1000 auf Server
Lösung: UID/GID auf allen Systemen synchron halten
Oder: NFSv4 mit idmapdRoot-Squash
# Standard: Root wird zu nobody
/srv/nfs/data 192.168.1.0/24(rw,root_squash)
# Root-Zugriff behalten (nur vertrauenswürdige Clients!)
/srv/nfs/data 192.168.1.100(rw,no_root_squash)All-Squash
# Alle Benutzer zu einem User mappen
/srv/nfs/data 192.168.1.0/24(rw,all_squash,anonuid=1000,anongid=1000)Kerberos-Authentifizierung
Server-Konfiguration
apt install nfs-common krb5-user
# /etc/exports
/srv/nfs/secure 192.168.1.0/24(rw,sync,sec=krb5p)Security-Stufen
| Stufe | Beschreibung | |-------|--------------| | sys | Standard (UID-basiert) | | krb5 | Kerberos-Authentifizierung | | krb5i | + Integritätsprüfung | | krb5p | + Verschlüsselung |
Client mit Kerberos
mount -t nfs -o sec=krb5p server:/secure /mnt/secureMonitoring
Aktive Mounts
# Auf Server
showmount -a
# Auf Client
mount | grep nfs
df -h | grep nfsNFS-Statistiken
# Server-Statistiken
nfsstat -s
# Client-Statistiken
nfsstat -c
# RPC-Statistiken
nfsstat -rVerbindungen prüfen
# RPC-Services
rpcinfo -p localhost
# NFS-Verbindungen
ss -tn | grep 2049Troubleshooting
Mount fehlgeschlagen
# Server erreichbar?
ping server
# Exports verfügbar?
showmount -e server
# Firewall?
nc -zv server 2049
# Verbose Mount
mount -t nfs -v server:/data /mnt/dataZugriff verweigert
# exports prüfen
cat /etc/exports
exportfs -v
# UID/GID prüfen
id
ls -la /srv/nfs/dataPerformance-Probleme
# Mount-Optionen prüfen
mount | grep nfs
# Netzwerk-Performance
iperf3 -c server
# NFS-Statistiken
nfsstat -cStale NFS Handle
# Unmount erzwingen
umount -f /mnt/nfs
# Lazy Unmount
umount -l /mnt/nfs
# Bei hängenden Mounts
fuser -km /mnt/nfs
umount /mnt/nfsBackup mit NFS
rsync über NFS
# NFS mounten
mount -t nfs server:/backup /mnt/backup
# rsync
rsync -avz /data/ /mnt/backup/data/NFS für Backup-Server
# /etc/exports
/backup backup-server(rw,sync,no_root_squash)Zusammenfassung
| Befehl | Funktion | |--------|----------| | exportfs -ra | Exports neu laden | | exportfs -v | Aktive Exports | | showmount -e server | Server-Exports anzeigen | | nfsstat | NFS-Statistiken | | mount -t nfs | NFS mounten |
| Datei | Beschreibung | |-------|--------------| | /etc/exports | Server-Freigaben | | /etc/fstab | Client-Mounts | | /etc/idmapd.conf | NFSv4 ID-Mapping |
Fazit
NFS ist die native Lösung für Dateifreigaben zwischen Linux-Systemen. NFSv4 vereinfacht die Firewall-Konfiguration und bietet Kerberos-Unterstützung. Achten Sie auf korrekte UID/GID-Synchronisation und nutzen Sie optimierte Mount-Optionen für beste Performance. Für heterogene Umgebungen (Windows/Linux) ist Samba die bessere Wahl.