NFS - Network File System
 

Linux kennt viele Möglichkeiten sich im Netzwerk mit anderen Rechnern zu verbinden. Ein Beispiel ist samba um mit Windows-Rechnern Daten auszutauschen, ein Anderes ist scp für eine verschlüsselte und damit sichere Übertragung. Und es gibt NFS, das Network File System und auch wenn ich die Einrichtung einer solchen Verbindung für ein wenig umständlich halte, ist es manchmal die einzige Möglichkeit von einem Linux System eine 1:1 Kopie zu machen, da samba das Setzen der Rechte nicht unterstützt und ein mit NFS gemountetes Verzeichnis von einem lokalen Verzeichnis nicht zu unterscheiden ist. Ich erkläre hier die Einrichtung von NFS anhand eines Debian Systems, Codename lenny.

NFS funktioniert nach einem Client-Server Prinzip. Ein Rechner der als NFS-Server läuft gibt Verzeichnisse frei, welche von einem NFS-Client gemountet werden können. Zuerst einmal müssen alle benötigten Pakete installiert sein. Als da wären für den Server:
# apt-get install nfs-kernel-server nfs-common portmap
Für den Client:
# apt-get install nfs-common portmap

Nach der Installation der benötigten Pakete sollte man sicherstellen, daß NFS vom eigenem Kernel unterstützt wird. Unter /proc/filesystems stehen die vom Kernel unterstützten Dateisysteme:
# cat /proc/filesystems
nodev sysfs
nodev rootfs
nodev bdev
...

Sollte hier NFS nicht gelistet sein, muß das Modul geladen werden:
# modprobe nfs
Nun müßte die Ausgabe so aussehen:
# cat /proc/filesystems
nodev sysfs
...
nodev nfsd
nodev nfs
nodev nfs4

Sollte selbst nach einem Laden des Moduls hier kein nfs auftauchen, muß der Kernel mit nfs-unterstützung neu kompiliert werden.

Danach überprüft man ob nfs unter portmap gelistet ist:
# rpcinfo -p
Tauchen hier mehrere Einträge nfs, mountd und nlockmgr auf, siehts gut aus. Ansonsten hilft vielleicht ein Neustart des Servers mit
# /etc/init.d/nfs-common restart

Um ein Verzeichnis freizugeben, editiert man auf dem nfs-Server die Datei /etc/exports. Diese kann Einträge folgender Art enthalten:

/mnt/Freigabe nfs-Client(ro,sync,no_root_squash,no_subtree_check)
/                          nfs-Client(ro,sync,no_root_squash,no_subtree_check)
/mnt/Freigabe *(rw,sync,no_root_squash,no_subtree_check)

Freigabe ist natürlich das freizugebende Verzeichnis, welches in unserem Beispiel in der zweiten Zeile das komplette Dateisystem ist.
nfs-Client ist entweder die IP-Adresse oder der Rechnername des Clients der darauf zugreifen darf (natürlich muß für den Rechnernamen die Namensauflösung in der Datei /etc/hosts eingetragen sein!). Hier ist auch ein Stern als Wildcard-Zeichen für alle Rechner erlaubt.
In Klammern stehen die Optionen, z.B. ro (read only) für nur lesenden Zugriff, rw für lese- und schreibzugriff und sync für eine synchronisierte Übertragung der Daten.
no_root_squash erlaubt das Zugreifen als root auf das freigegebene Verzeichnis, was mitunter wünschenswert ist, da Standardmäßig der Benutzer nobody für den Zugriff verwendet wird, aber welches Verzeichnis gehört schon nobody...
no_subtree_check schaltet die Überprüfung ab, ob die vom Client angeforderte Datei ein gültiger Teil des freigegebenen Volumes ist. Durch abschalten dieser Option wird eine höhere Geschwindigkeit erzielt.

Ein Hinweis: Nach jeder Änderung der Datei exports muß diese neu eingelesen werden, was man mit folgendem Befehl erreicht:
# exportfs -a

Um die Freigabe auf dem nfs-Client in den Verzeichnisbaum einzuhängen, gibt man auf der Konsole ein:
mount nfs-Server:/mnt/Freigabe /mnt/Verzeichnis
oder man trägt gleich eine Zeile in die fstab ein:
nfs-Server:/mnt/Freigabe /mnt/Verzeichnis nfs rw,sync,intr 0 0
Sollte es mit dem mount-Kommando zu Problemen kommen, hilft vielleicht die etwas ältere Schreibweise mit Angabe des Dateisystems:
# mount -t nfs nfs-Server:/mnt/Freigabe /mnt/Verzeichnis