NFS (Network File System) ermöglicht das Freigeben von Verzeichnissen über das Netzwerk. Clients können NFS-Freigaben wie lokale Dateisysteme mounten.
NFS-Versionen
| Version | Features | |---------|----------| | NFSv3 | Stabil, weit verbreitet | | NFSv4 | Stateful, bessere Sicherheit | | NFSv4.1 | pNFS, Session Trunking | | NFSv4.2 | Server-side Copy, Sparse Files |
Server-Installation
Debian/Ubuntu
apt install nfs-kernel-serverCentOS/RHEL
dnf install nfs-utils
systemctl enable nfs-server
systemctl start nfs-serverFreigaben konfigurieren
/etc/exports
# /etc/exports
# Syntax: Verzeichnis Client(Optionen)
# Einzelner Client
/srv/nfs/data 192.168.1.100(rw,sync,no_subtree_check)
# Subnetz
/srv/nfs/shared 192.168.1.0/24(rw,sync,no_subtree_check)
# Alle Clients
/srv/nfs/public *(ro,sync,no_subtree_check)
# Mehrere Clients
/srv/nfs/project 192.168.1.100(rw,sync) 192.168.1.101(rw,sync)Wichtige Optionen
| Option | Beschreibung | |--------|--------------| | rw | Lesen und Schreiben | | ro | Nur Lesen | | sync | Synchrones Schreiben | | async | Asynchrones Schreiben | | no_subtree_check | Bessere Performance | | no_root_squash | Root-Rechte behalten | | root_squash | Root wird zu nobody | | all_squash | Alle User zu nobody | | anonuid/anongid | UID/GID für anonyme User |
Freigabe-Verzeichnis erstellen
mkdir -p /srv/nfs/data
chmod 755 /srv/nfs/data
chown nobody:nogroup /srv/nfs/dataExports aktivieren
# Exports neu laden
exportfs -ra
# Freigaben anzeigen
exportfs -v
# Einzelne Freigabe
exportfs 192.168.1.0/24:/srv/nfs/dataClient-Installation
Debian/Ubuntu
apt install nfs-commonCentOS/RHEL
dnf install nfs-utilsFreigaben mounten
Manuell mounten
# NFSv4
mount -t nfs4 server:/srv/nfs/data /mnt/nfs
# NFSv3
mount -t nfs -o vers=3 server:/srv/nfs/data /mnt/nfs
# Mit Optionen
mount -t nfs4 -o rw,soft,timeo=100 server:/srv/nfs/data /mnt/nfsAutomatisch via fstab
# /etc/fstab
# NFSv4
server:/srv/nfs/data /mnt/nfs nfs4 defaults,_netdev 0 0
# NFSv3
server:/srv/nfs/data /mnt/nfs nfs vers=3,defaults,_netdev 0 0
# Mit Optionen
server:/srv/nfs/data /mnt/nfs nfs4 rw,soft,timeo=100,_netdev 0 0Mit autofs (On-Demand)
apt install autofs
# /etc/auto.master
/mnt/nfs /etc/auto.nfs --timeout=60
# /etc/auto.nfs
data -fstype=nfs4,rw server:/srv/nfs/data
systemctl restart autofs
# Mount erfolgt automatisch bei Zugriff auf /mnt/nfs/dataMount-Optionen
Performance
| Option | Beschreibung | |--------|--------------| | rsize/wsize | Blockgröße (z.B. 1048576) | | async | Asynchrones I/O | | noatime | Keine Access-Time | | nocto | Cache bei Open |
Zuverlässigkeit
| Option | Beschreibung | |--------|--------------| | hard | Wartet auf Server | | soft | Gibt nach Timeout auf | | timeo | Timeout in 1/10 Sekunden | | retrans | Wiederholungen | | _netdev | Wartet auf Netzwerk |
Beispiel mit Optionen
mount -t nfs4 -o rw,hard,intr,rsize=1048576,wsize=1048576 server:/data /mnt/dataSicherheit
Firewall
# Server
ufw allow from 192.168.1.0/24 to any port nfs
ufw allow from 192.168.1.0/24 to any port 111
# Oder iptables
iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 2049 -j ACCEPT
iptables -A INPUT -p udp -s 192.168.1.0/24 --dport 2049 -j ACCEPTNFSv4 mit Kerberos
# /etc/exports
/srv/nfs/secure gss/krb5(rw,sync,no_subtree_check)
/srv/nfs/secure gss/krb5i(rw,sync) # Integritätsprüfung
/srv/nfs/secure gss/krb5p(rw,sync) # VerschlüsselungRoot-Squashing
# Standard: Root wird zu nobody
/srv/nfs/data 192.168.1.0/24(rw,sync,root_squash)
# Root-Rechte behalten (Vorsicht!)
/srv/nfs/data 192.168.1.0/24(rw,sync,no_root_squash)
# Alle User zu nobody
/srv/nfs/data 192.168.1.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000)NFSv4 ID-Mapping
Server
# /etc/idmapd.conf
[General]
Domain = example.de
[Mapping]
Nobody-User = nobody
Nobody-Group = nogroupClient
# /etc/idmapd.conf (gleiche Domain!)
[General]
Domain = example.de# Service neustarten
systemctl restart nfs-idmapdTroubleshooting
Server-Status
# Exports prüfen
exportfs -v
# Verbundene Clients
showmount -a
# NFS-Statistiken
nfsstat -sClient-Probleme
# Verfügbare Freigaben
showmount -e server
# Mount-Status
mount | grep nfs
# NFS-Statistiken
nfsstat -cHäufige Fehler
# "Permission denied"
# → Exports prüfen, IP stimmt?
# → Berechtigungen auf Server
# "Connection refused"
# → Firewall prüfen
# → NFS-Server läuft?
# Stale file handle
# → Remount erforderlich
umount -f /mnt/nfs
mount /mnt/nfsDebug
# Auf Server
rpcdebug -m nfsd all
# Auf Client
rpcdebug -m nfs all
# Logs
tail -f /var/log/syslog | grep nfsPerformance-Tuning
Server
# /etc/sysctl.conf
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216Client mount-Optionen
mount -t nfs4 -o rsize=1048576,wsize=1048576,hard,intr server:/data /mntNFS-Threads erhöhen
# /etc/default/nfs-kernel-server
RPCNFSDCOUNT=32
systemctl restart nfs-kernel-serverMonitoring
nfsstat
# Server-Statistiken
nfsstat -s
# Client-Statistiken
nfsstat -c
# Alle Statistiken
nfsstat -o allmountstats
# Detaillierte Mount-Statistiken
mountstats /mnt/nfsZusammenfassung
| Befehl | Funktion | |--------|----------| | exportfs -ra | Exports neu laden | | exportfs -v | Freigaben anzeigen | | showmount -e | Freigaben abfragen | | mount -t nfs4 | NFS mounten | | nfsstat | Statistiken |
| Datei | Funktion | |-------|----------| | /etc/exports | Server-Freigaben | | /etc/fstab | Client-Mounts | | /etc/idmapd.conf | ID-Mapping |
| Port | Dienst | |------|--------| | 2049 | NFS | | 111 | rpcbind |
Fazit
NFS ist die Standard-Lösung für Dateifreigaben im Linux-Umfeld. NFSv4 bietet bessere Sicherheit und einfachere Firewall-Konfiguration. Die Performance ist für die meisten Anwendungsfälle ausreichend. Für heterogene Umgebungen mit Windows-Clients ist Samba oft die bessere Wahl. Mit Autofs lassen sich Freigaben automatisch bei Bedarf mounten.