How To - einen NFS Server und Client auf einem Ubuntu 10.04 aufsetzen

Version 1.0

Autor: Falko Timme

[1] Folge mir auf Twitter [2]



Diese Anleitung erklärt wie man einen NFS Server und Client auf einem Ubuntu 10.04 Betriebssystem aufsetzt. NFS steht für Network File System; über NFS  kann ein Client auf eine entfernte Freigabe zugreifen (lesen und schreiben), als ob es die lokale Festplatte wäre. Man greift damit auf ein (freigegebenes) Laufwerk zu, zum Beispiel um Daten zu teilen und zu verwalten.

Diese Anleitung kommt ohne Gewähr!

1 Vorbemerkung

Ich benutze hier zwei Ubuntu Systeme:
  • NFS Server: server.example.com, IP Adresse: 192.168.0.100
  • NFS Client: client.example.com, IP Adresse: 192.168.0.101
Wir müssen als root eingeloggt sein um die Anleitung auszuführen. Wir können entweder alle Befehle mit sudo vorweg eingeben, oder loggen uns gleich als root ein.

sudo su


2 Installation NFS

Server:

Wir führen auf dem NFS Server nun aus:

aptitude install nfs-kernel-server nfs-common portmap

Client:

Auf dem Client installieren wir NFS folgendermaßen:

aptitude install nfs-common portmap


3 Verzeichnisse auf dem Server exportieren

Server:

Ich würde gerne  /home und /var/nfs für den Client zugänglich machen, hierfür müssen wie sie auf dem Server "exportieren".

Wenn ein Client eine NFS Freigabe nutzt, passiert dies normalerweise als der Benutzer nobody. Normalerweise gehört das Verzeichnis  /home nicht   nobody (und ich empfehle das auch nicht zu ändern!), und da wir jedoch sowohl lesen als auch auf  /home schreiben wollen, geben wir für NFS an dass der Zugang als root geschieht, was nicht nötig wäre wenn Deine /home Freigabe nicht nur read-only wäre. Das Verzeichnis /var/nfs existiert noch nicht, also erstellen wir es und ändern den Besitz auf nobody und nogroup:

mkdir /var/nfs

chown nobody:nogroup /var/nfs

Nun müssen wir  /etc/exports verändern, hier "exportieren" wir quasi die NFS Freigabe. Wir spezifizieren  /home und /var/nfs als NFS Freigaben und teilen NFS mit einen Zugang zu  /home als root zu ermöglichen (um mehr über /etc/exports zu erfahren, über Formate und Optionen, schau Dir dieses an):

man 5 exports

vi /etc/exports

# /etc/exports: the access control list for filesystems which may be exported
# to NFS clients. See exports(5). # # Example for NFSv2 and NFSv3: # /srv/homes hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check) # # Example for NFSv4: # /srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check) # /srv/nfs4/homes gss/krb5i(rw,sync,no_subtree_check) # /home 192.168.0.101(rw,sync,no_root_squash,no_subtree_check) /var/nfs 192.168.0.101(rw,sync,no_subtree_check)
(Die no_root_squash Option ermöglicht es dass der Zugriff auf /home als root passiert.)

Jedes Mal wenn wir /etc/exports verändern, müssen wir Folgendes ausführen:

exportfs -a

...um die Änderungen durchzuführen.

4 Einhängen der NFS Freigaben auf dem Client

Client:

Zunächst erstellen wir die Verzeichnisse, in denen wir die NFS Freigaben einhängen wollen, z.B.:

mkdir -p /mnt/nfs/home

mkdir -p /mnt/nfs/var/nfs

Hiernach können wir diese folgendermaßen einhängen:

mount 192.168.0.100:/home /mnt/nfs/home

mount 192.168.0.100:/var/nfs /mnt/nfs/var/nfs

Nun solltest Du die zwei NFS Freigaben in der Ausgabe hier sehen:

df -h

root@client:~# df -h

Filesystem            Size  Used Avail Use% Mounted on

/dev/mapper/server2-root

29G  847M   26G   4% /

none                  243M  172K  242M   1% /dev

none                  247M     0  247M   0% /dev/shm

none                  247M   48K  247M   1% /var/run

none                  247M     0  247M   0% /var/lock

none                  247M     0  247M   0% /lib/init/rw

none                   29G  847M   26G   4% /var/lib/ureadahead/debugfs

/dev/sda1             228M   17M  199M   8% /boot

192.168.0.100:/home    18G  838M   16G   5% /mnt/nfs/home

192.168.0.100:/var/nfs

18G  838M   16G   5% /mnt/nfs/var/nfs

root@client:~#

...und

mount

root@client:~# mount

/dev/mapper/server2-root on / type ext4 (rw,errors=remount-ro)

proc on /proc type proc (rw,noexec,nosuid,nodev)

none on /sys type sysfs (rw,noexec,nosuid,nodev)

none on /sys/fs/fuse/connections type fusectl (rw)

none on /sys/kernel/debug type debugfs (rw)

none on /sys/kernel/security type securityfs (rw)

none on /dev type devtmpfs (rw,mode=0755)

none on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620)

none on /dev/shm type tmpfs (rw,nosuid,nodev)

none on /var/run type tmpfs (rw,nosuid,mode=0755)

none on /var/lock type tmpfs (rw,noexec,nosuid,nodev)

none on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)

none on /var/lib/ureadahead/debugfs type debugfs (rw,relatime)

/dev/sda1 on /boot type ext2 (rw)

192.168.0.100:/home on /mnt/nfs/home type nfs (rw,addr=192.168.0.100)

192.168.0.100:/var/nfs on /mnt/nfs/var/nfs type nfs (rw,addr=192.168.0.100)

root@client:~#


5 Testen

Nun kann man auf der NFS Freigabe einige Testdateien erstellen, um zu sehen ob alles funktioniert:

Client:

touch /mnt/nfs/home/test.txt

touch /mnt/nfs/var/nfs/test.txt

Nun schaue nach auf dem Server und überprüfe, ob Du beide Testdateien sehen kannst:

Server:

ls -l /home/

root@server:~# ls -l /home/

total 4

drwxr-xr-x 3 administrator administrator 4096 2010-04-29 14:21 administrator

-rw-r--r-- 1 root          root             0 2010-09-14 17:11 test.txt

root@server:~#

ls -l /var/nfs

root@server:~# ls -l /var/nfs

total 0

-rw-r--r-- 1 nobody nogroup 0 2010-09-14 17:12 test.txt

root@server:~#

(Bitte die unterschiedlichen beistzer der Testdateien beachten: Die /home NFS Friegabe wird als root benutzt, daher hat die Datei   /home/test.txt aks Besitzer root; die /var/nfs Freigabe wird von nobody verwendet, daher gehört  die Datei /var/nfs/test.txt zu nobody.)

6 Einhängen der NFS Freigaben beim Start

Anstatt die NFS Freigaben manuelle auf den Cleint einzuhängen, kann man die  /etc/fstab so abändern, dass die NFS Freigaben automatischen beim Bbooten des Clients eingehängt werden.

Client:

Öffne /etc/fstab und füge die folgenden Zeilen hinzu:

vi /etc/fstab

[...]
192.168.0.100:/home /mnt/nfs/home nfs rw,sync,hard,intr 0 0 192.168.0.100:/var/nfs /mnt/nfs/var/nfs nfs rw,sync,hard,intr 0 0
Anstatt von rw,sync,hard,intr kannst Du unterschiedliche Optionen für das Einhängen verwenden. Um mehr darüber zu erfahren, schaue hier nach:

man nfs

Um zu überprüfen ob die die Veränderung in /etc/fstab funktioniert, starte den Client einmal neu:

reboot

Nach dem Neustart sollten die zwei NFS Freigaben in der Ausgabe hier zu finden sein:

df -h

root@client:~# df -h

Filesystem            Size  Used Avail Use% Mounted on

/dev/mapper/server2-root

29G  847M   26G   4% /

none                  243M  172K  242M   1% /dev

none                  247M     0  247M   0% /dev/shm

none                  247M   48K  247M   1% /var/run

none                  247M     0  247M   0% /var/lock

none                  247M     0  247M   0% /lib/init/rw

/dev/sda1             228M   17M  199M   8% /boot

192.168.0.100:/var/nfs

18G  838M   16G   5% /mnt/nfs/var/nfs

192.168.0.100:/home    18G  838M   16G   5% /mnt/nfs/home

root@client:~#

...unnd

mount

root@client:~# mount

/dev/mapper/server2-root on / type ext4 (rw,errors=remount-ro)

proc on /proc type proc (rw,noexec,nosuid,nodev)

none on /sys type sysfs (rw,noexec,nosuid,nodev)

none on /sys/fs/fuse/connections type fusectl (rw)

none on /sys/kernel/debug type debugfs (rw)

none on /sys/kernel/security type securityfs (rw)

none on /dev type devtmpfs (rw,mode=0755)

none on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620)

none on /dev/shm type tmpfs (rw,nosuid,nodev)

none on /var/run type tmpfs (rw,nosuid,mode=0755)

none on /var/lock type tmpfs (rw,noexec,nosuid,nodev)

none on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)

none on /var/lib/ureadahead/debugfs type debugfs (rw,relatime)

/dev/sda1 on /boot type ext2 (rw)

192.168.0.100:/var/nfs on /mnt/nfs/var/nfs type nfs (rw,sync,hard,intr,addr=192.168.0.100)

192.168.0.100:/home on /mnt/nfs/home type nfs (rw,sync,hard,intr,addr=192.168.0.100)

root@client:~#

Herzlichen Glückwusnch, das war's!

7 Links

  • Linux NFS: http://nfs.sourceforge.net/ [3]
  • Ubuntu: http://www.ubuntu.com/ [4]