NFS (Network File System) ermöglicht das Teilen von Verzeichnissen über das Netzwerk. Es ist der Standard für Linux-to-Linux Dateifreigaben.
Server-Installation
# Debian/Ubuntu
apt install nfs-kernel-server
# RHEL/CentOS
dnf install nfs-utilsExports konfigurieren
/etc/exports
# Grundformat
# /pfad client(optionen)
# Beispiele
/srv/nfs 192.168.1.0/24(rw,sync,no_subtree_check)
/srv/backup 192.168.1.10(rw,sync,no_root_squash)
/srv/public *(ro,sync)
/home 192.168.1.0/24(rw,sync,no_subtree_check,no_root_squash)Optionen erklärt
| Option | Beschreibung | |--------|--------------| | rw | Lesen und Schreiben | | ro | Nur Lesen | | sync | Synchrones Schreiben | | async | Asynchrones Schreiben | | no_subtree_check | Performance verbessern | | no_root_squash | Root-Rechte behalten | | root_squash | Root wird zu nobody | | all_squash | Alle zu nobody | | anonuid/anongid | UID/GID für nobody |
Exports aktivieren
# Exports neu laden
exportfs -ra
# Aktive Exports anzeigen
exportfs -v
# Export hinzufügen ohne Neustart
exportfs -o rw,sync 192.168.1.0/24:/srv/nfsServer starten
# Service starten
systemctl start nfs-server
systemctl enable nfs-server
# Status prüfen
systemctl status nfs-server
# Abhängige Dienste
systemctl status rpcbindFirewall
# UFW
ufw allow from 192.168.1.0/24 to any port nfs
ufw allow from 192.168.1.0/24 to any port 111
# firewalld
firewall-cmd --permanent --add-service=nfs
firewall-cmd --permanent --add-service=rpc-bind
firewall-cmd --permanent --add-service=mountd
firewall-cmd --reloadClient-Installation
# Debian/Ubuntu
apt install nfs-common
# RHEL/CentOS
dnf install nfs-utilsMounten
Manuell
# Mount-Punkt erstellen
mkdir -p /mnt/nfs
# Mounten
mount -t nfs server.example.de:/srv/nfs /mnt/nfs
# Mit Optionen
mount -t nfs -o vers=4,soft,timeo=100 server:/srv/nfs /mnt/nfsIn /etc/fstab
# NFSv4
server.example.de:/srv/nfs /mnt/nfs nfs4 defaults,_netdev 0 0
# NFSv3
server.example.de:/srv/nfs /mnt/nfs nfs defaults,_netdev,vers=3 0 0
# Mit Optionen
server:/srv/nfs /mnt/nfs nfs4 soft,timeo=100,_netdev 0 0Mount-Optionen
| Option | Beschreibung | |--------|--------------| | soft | Timeout bei Fehler | | hard | Wartet unbegrenzt | | timeo=N | Timeout in Zehntelsekunden | | retrans=N | Retries | | rsize/wsize | Block-Größe | | _netdev | Nach Netzwerk mounten | | noatime | Keine Zugriffszeiten | | vers=4 | NFS-Version |
Autofs
Installation
apt install autofsKonfiguration
# /etc/auto.master
/mnt/nfs /etc/auto.nfs --timeout=60
# /etc/auto.nfs
data -fstype=nfs4,rw server:/srv/nfs/data
backup -fstype=nfs4,ro server:/srv/backupAutofs starten
systemctl start autofs
systemctl enable autofs
# Zugriff mounted automatisch
ls /mnt/nfs/dataNFSv4
NFSv4 ID-Mapping
# /etc/idmapd.conf
[General]
Domain = example.de
# Auf Server und Client gleich!Kerberos-Authentifizierung
# Export mit Kerberos
/srv/secure *(rw,sync,sec=krb5p)
# sec-Optionen:
# krb5 - Authentifizierung
# krb5i - + Integrity
# krb5p - + Privacy (verschlüsselt)Performance
Tuning
# Größere Blockgrößen
mount -t nfs4 -o rsize=1048576,wsize=1048576 server:/share /mnt
# In fstab
server:/share /mnt nfs4 rsize=1048576,wsize=1048576 0 0Server-Threads
# /etc/nfs.conf
[nfsd]
threads = 16
# Oder
echo 16 > /proc/fs/nfsd/threadsNetzwerk-Statistiken
# Client
nfsstat -c
# Server
nfsstat -s
# Alle
nfsstatTroubleshooting
Export-Test
# Server-Exports prüfen
showmount -e server.example.de
# Lokal
showmount -e localhostRPC-Dienste
# RPC-Dienste anzeigen
rpcinfo -p server.example.de
# Lokal
rpcinfo -pDebug-Modus
# Client Debug
rpcdebug -m nfs -s all
# Server Debug
rpcdebug -m nfsd -s all
# Deaktivieren
rpcdebug -m nfs -c allHäufige Probleme
# "Permission denied"
# - Berechtigungen auf Server prüfen
# - no_root_squash falls nötig
# - Firewall prüfen
# "mount.nfs: access denied"
# - Export-Konfiguration prüfen
# - exportfs -ra
# - IP-Bereich korrekt?
# "mount.nfs: Connection timed out"
# - Firewall prüfen
# - rpcbind läuft?
# - Netzwerk erreichbar?Sicherheit
Export-Einschränkungen
# Nur bestimmte Hosts
/srv/data 192.168.1.10(rw,sync)
/srv/data 192.168.1.11(ro,sync)
# Subnetz
/srv/data 192.168.1.0/24(rw,sync)
# Mit Hostname
/srv/data client.example.de(rw,sync)User-Mapping
# Alle auf bestimmten User mappen
/srv/shared *(rw,all_squash,anonuid=1000,anongid=1000)TCP Wrapper (optional)
# /etc/hosts.allow
rpcbind: 192.168.1.0/24
nfs: 192.168.1.0/24
# /etc/hosts.deny
rpcbind: ALL
nfs: ALLPraktisches Beispiel
Web-Cluster mit NFS
# === Server ===
# /etc/exports
/var/www/shared 192.168.1.0/24(rw,sync,no_subtree_check,no_root_squash)
exportfs -ra
# === Web-Server ===
# fstab
nfs-server:/var/www/shared /var/www/html nfs4 defaults,_netdev 0 0
mount -aHome-Verzeichnisse
# === Server ===
/home 192.168.1.0/24(rw,sync,no_subtree_check,no_root_squash)
# === Clients ===
nfs-server:/home /home nfs4 defaults,_netdev 0 0Status-Script
#!/bin/bash
# nfs-status.sh
echo "=== NFS Server Status ==="
systemctl status nfs-server --no-pager
echo ""
echo "=== Aktive Exports ==="
exportfs -v
echo ""
echo "=== NFS Statistiken ==="
nfsstat -s
echo ""
echo "=== Aktive Clients ==="
ss -tn | grep :2049Zusammenfassung
| Befehl | Funktion | |--------|----------| | exportfs -ra | Exports neu laden | | exportfs -v | Aktive Exports | | showmount -e | Exports anzeigen | | mount -t nfs4 | NFS mounten | | nfsstat | Statistiken |
| Datei | Funktion | |-------|----------| | /etc/exports | Server-Exports | | /etc/fstab | Client-Mounts | | /etc/auto.master | Autofs-Master | | /etc/idmapd.conf | ID-Mapping |
| Option | Beschreibung | |--------|--------------| | rw/ro | Lesen/Schreiben | | sync | Synchron | | no_root_squash | Root behalten | | no_subtree_check | Performance |
Fazit
NFS ist der Standard für Linux-Dateifreigaben. NFSv4 bietet bessere Sicherheit und Performance. Autofs vereinfacht das Client-Management. Für Windows-Clients ist Samba besser geeignet. Bei sensiblen Daten sollte Kerberos-Authentifizierung verwendet werden.