Linux-Dateisysteme im Netzwerk.
Installation: sudo apt-get install nfs-common nfs-kernel-server
Inhalt
NFS-Server
/etc/hosts
127.0.0.1 localhost 127.0.1.1 Arbeitszimmer.TuxNet Arbeitszimmer 192.168.1.51 Laptop.TuxNet Laptop
/etc/exports
# Der Ordner /exportdir wird mit den Schreibrechten (rw) synchron exportiert. # Der Rechner Laptop kann darauf zugreifen. /exportdir Laptop(rw,sync) # Der Ordner /exportdir wird mit den Schreibrechten (rw) synchron exportiert. # Der Rechner Laptop kann darauf zugreifen. # Es werden stets die Rechte des User mit der UID 1001 und der GID 100 vergeben. /exportdir Laptop(rw,sync,all_squash,anonuid=1001,anongid=100,no_subtree_check) Auf dem Rechner mit der IP 192.168.56.0 können über die Funktion crossmount auch Medien unter /media genutzt werden. /media 192.168.56.0/24(rw,async,insecure,no_subtree_check,crossmnt)
Die IDs des Users und der Gruppe können mit dem Befehl id
ermittelt werden.
Es können auch IP-Bereiche definiert werden. Siehe hierzu das Kapitel IP-Adressen.
Server neu starten
sudo /etc/init.d/nfs-kernel-server restart
exportierte Verzeichnisse kontrollieren
Die exportiereten Verzeichznisse können mit sudo exportfs
oder showmount -e
kontrolliert werden. Aktive Verbindungen zeigt showmount -a
an.
NFS-Client
/etc/hosts
127.0.0.1 localhost 127.0.1.1 laptop.TuxNet laptop 192.168.1.50 Arbeitszimmer.TuxNet arbeitszimmer
/etc/fstab (Beispiele)
Arbeitszimmer:/home/petri/Documents /home/arbeitszimmer nfs user,noauto,rw 0 0 192.168.1.2:/data/ /mnt/nfs/data nfs _netdev,noauto,user 0 0
Erklärung der Mountparameter:
- _netdev: das Dateisystem wird erst eingebunden, sobald eine Netzwerkverbindung steht
- user: auch normale Benutzer können das Dateisystem einhängen
- noauto: das Dateisystem wird nicht automatisch eingebunden (wichtig, da ansonsten der Rechner beim booten ewig hängt, sofern die NFS-Freigabe nicht vorhanden ist
- rw: das Dateisystem wird schreibbar eingehängt
Die fstab mit mount -a
neu einlesen.
Bei Systemen mit systemd müssen die Einträge der fstab wie im entsprechenden Artikel beschrieben angepasst werden.
Unter Xfce werden die Freigaben bim Login automatisch eingebunden, wenn folgende Datei erstellt wird:
~/.config/autostart/mountnfs.desktop
[Desktop Entry] Encoding=UTF-8 Name=NFS-Laufwerk einbinden Exec=mount /mount-pfad-aus-fstab Terminal=false
Anzeige der gemounteten Freigaben
showmount
NFS von Hand starten
Vorraussetzungen bei NFS von Hand: Die Datei /etc/exports wurde bereits editiert und die zu exportierenden Verzeichnisse freigegeben.
Portmapper starten /etc/init.d/portmap start
Nun den Mount-Daemon starten. Nun werden die exportierten Verzeichnisse („shares“) für die anderen sichtbar. rpc.mountd
Starten des NFS-Daemon für den eigentlichen Filezugriff rpc.nfsd
Mit rpcinfo kann jederzeit die Verfügbarkeit der NFS-Dienste überprüft werden: rpcinfo -p server
NFS in einem Script mounten
Soll eine NFS-Freigabe in einem Script gemountet werden so hilft folgendes Script. Hierbei wird das Script nur fortgeführt, sofern die Einbindung erfolgreich war. Weiterhin bleibt dieses Script auch nicht ewig hängen, wenn die Freigabe nicht zur Verfügung steht. Es wird bei diesem Script davon ausgegangen, dass die Freigabe in der fstab (siehe oben) eingetragen ist.
#! /bin/bash IP=192.168.1. mountpoint[1]=/mnt/server/folder1 mountpoint[2]=/mnt/server/folder2 mountpoint[3]=/mnt/server/folder3 echo -n "Netzwerk suchen " for ((i=1; i<=120; i++)) { [ $(ifconfig | grep -c $IP) -gt 0 ] && break echo -n "." sleep 0.5 } echo if [ $i -eq 121 ] ; then echo "Netzwerk konnte nicht gefunden werden, Programm wird beendet." exit fi i=1 while [ "${mountpoint[i]}" != "" ] ; do echo "Verzeichnis ${mountpoint[i]} wird eingebunden ..." mount "${mountpoint[i]}" 2> /dev/null & echo -n "Warte, bis Verzeichnis eingebunden ist " for ((j=1; j<=200; j++)) { [ `mount | grep -c "${mountpoint[i]}"` -eq 1 ] && break echo -n "." sleep 0.1 } echo if [ $j -eq 201 ] ; then echo "Verzeichnis konnte nicht eingebunden werden, Programm wird beendet." kill -9 `ps aux | grep "mount ${mountpoint[i]}" | awk '{print $2}'` exit fi let i++ done
NFS-Laufwerke vor dem Standbybetrieb (Suspend, Hibernate) ausbinden
Siehe auch: http://wiki.ubuntuusers.de/pm-utils
Unter Ubuntu werden die Skripte unter /etc/pm/sleep.d (so genannte Hooks) vor und nach dem Standby ausgeführt. (Achtung: Die Skripte müssen dem user root gehörten, sonst werden sie nicht ausgeführt!)
Hier ein Beispiel für das automatische mounten und unmounten von NFS-Laufwerken:
#!/bin/bash logfile=/tmp/hook_nfsmount.txt mountscript=/home/user/bin/mountnfs-datenserver case "$1" in hibernate|suspend) echo `date +"%Y-%m-%d %k:%M"` "$1 - try unmount:" >> $logfile mount | cut -d" " -f3,5 | grep " nfs" | cut -d" " -f1 >> $logfile umount $(mount | cut -d" " -f3,5 | grep " nfs" | cut -d" " -f1) echo `date +"%Y-%m-%d %k:%M"` "$1 - check unmount:" >> $logfile mount | cut -d" " -f3,5 | grep " nfs" | cut -d" " -f1 >> $logfile ;; thaw|resume) echo `date +"%Y-%m-%d %k:%M"` "$1 - run $mountscript" >> $logfile "$mountscript" | xargs & ;; *) ;; esac exit $?
Hierbei wird das Einbinden der Laufwerke über das separate Skript „mountnfs“ ausgeführt. Dies hat folgende Vorteile:
- Wenn die NFS-Laufwerke nicht verfügbar sind, bleibt das hook-Skript sonst an dieser Stelle hängen und das „Aufwachen“ bleibt ebenfalls hängen.
- Der Networkmanager von Ubuntu startet die Netzwerkverbindung erst nach Abarbeiten dieser Skripte.
- Getrennt werden prinzipiell alle NFS-Laufwerke (auch von Hand eingebundene), neu gemountet werden jedoch nur die notwendigen Standard-Laufwerke aus den Skript mountnfs. Somit reicht ein zentrales Skript in dem die NFS-Laufwerke eingetragen werden.
Das Skript mountnfs muss selber erstellt werden (siehe Beispiel oben).