1. GET dir: linux
2. GET dir: linux
3. GET dir: linux

In composeIncludeFileName
Filename: /home/web/public/linux/nfs
langcode:
bestaat niet.
Test op /home/web/public/linux/nfs.inc
/home/web/public/linux/nfs.inc bestaat.
1. includeFile: /home/web/public/linux/nfs.inc
3. includeFile: /home/web/public/linux/nfs.inc
4. GET dir: linux

In composeIncludeFileName
Filename: /home/web/public/linux/keywords
langcode:
bestaat niet.
Test op /home/web/public/linux/keywords.inc

In composeIncludeFileName
Filename: /home/web/public/keywords
langcode:
bestaat niet.
Test op /home/web/public/keywords.inc
/home/web/public/keywords.inc bestaat.
linux (nfs)
cybertux-logo

GNU/Linux

Inleiding Instappen in Linux

Bewerkingen

Tips & trucs Foto's bewerken Video bewerken

Linux installatie

Algemeen Packages Apache Samba NFS CUPS ALSA Postfix etc. OpenSuse 10.2 Agfa SnapScan 310 USB-schijven SSD-schijven

Linux algemeen

Toegangsrestricties Permissies

Bronnen

Debian website Links

NFS Network File System

Om met een Linux-client toegang te krijgen tot een Linux-server, moeten op zowel de client als de server NFS-onderdelen worden geinstalleerd.
Daarna kan op de client de NFS-partitie worden gemount als alle andere.

***
2013: Gewijzigde procedure
In latere versies (Raspberry Pi, bijvoorbeeld) start je de portmapper opnieuw met:

# /etc/init.d/rpcbind restart

Om de NFS-server opnieuw te starten doe je:

# /etc/init.d/nfs-kernel-server restart

Lees ook: http://raspberrypihtpc.wordpress.com/how-to/how-to-ubuntu-12-04-nfs-and-xbmc-resolved/

Einde gewijzigde procedure (moet nog worden opgenomen in onderstaande tekst).
***

1. Installatie van de server

De installatie begint op bekende wijze met apt-get:

# apt-get install nfs-common portmap nfs-kernel-server


Daarna moet in het bestand /etc/exports worden aangegeven welke directories we voor clients beschikbaar willen maken.
Let vooral op de toevoeging (rw). Sommige Linux-distributies stellen uit veiligheidsoverwegingen standaard (ro) in, dus alleen-lezen.
# /etc/exports: the access control list for filesystems which may be exported
#               to NFS clients.  See exports(5).
# Alle machines op het locale netwerk krijgen toegang:
/home           10.0.0.0/255.255.255.0(rw)

Na elke wijziging van het bestand /etc/exports moet de systeemservice nfsd opnieuw worden gestart zodat hij de laatste wijzigingen gebruikt.

# exportfs -ra

2. Installatie van de client

Ook de installatie op de client gaat weer heel eenvoudig:

# apt-get install nfs-common portmap


Maak daarna een directory op de client om het nfs-systeem te mounten:

# mkdir /mountdir


Vervolgens de nfs-directory in de locale directory-structuur mounten:

# mount server_ip:/dirname -t nfs /mountdir

Waarbij de aangegeven parameters de volgende betekenis hebben:
parameter betekenis
server de naam van de server die de bestanden uitdeelt
dirname de directory met beschikbaar gestelde bestanden
-t nfs type van het bestandssysteem is NFS
mountdir de naam van de locale directory waar het NFS-systeem wordt gemount

3. Mounten via fstab

Als bovenstaande test is geslaagd, kunnen de vastgestelde waarden veilig in /etc/fstab worden opgenomen. Daardoor wordt het nfs-systeem automatisch aangekoppeld zodra de client wordt gestart.

Ik heb eens de fout gemaakt om dat ongetest in fstab op te nemen. Het gevolg was dat bij het booten de computer, als nfs-client, leek vast te lopen met de melding:

     Server localhost not responding, timed out
     lockd-up: makesock failed, error=-5

Gelukkig hebben we het hier over Linux en dat loopt niet vast... Het bleek gewoon een (lange) timeout te zijn, want terwijl ik vol verbazing naar het scherm zat te kijken en me afvroeg wat er mis kon zijn, liep het bootproces gewoon weer verder.

De oorzaak van dit probleem was dat ik de portmapper nog niet had geinstalleerd.


Het voorbeeld van hierboven noteren we als volgt in /etc/fstab:

server_ip:/dirname /mountdir nfs rsize=8192,wsize=8192 0 0

De laatste regel in fstab moet ALTIJD eindigen met een new-line; dus een lege regel.

Zie verderop voor een uitleg over de bepaling van rsize en wsize.

Een eventueel toegevoegd device kan je activeren door alle devices in /etc/fstab te mounten:
# mount -a
Dat betekent: mount all. Het laat alle devices die al gemount zijn met rust en koppelt alleen nieuwe filesystems aan.

4. Snelheid optimaliseren

Bij het mounten van een NFS-device moet onder andere een waarde worden opgegeven voor rsize en wsize. Dat is de blokgrootte voor lezen resp. schrijven van het NFS-systeem. Aanvankelijk stond de server ingesteld op blokgroottes van 1024. Bij kopiëren naar de server werd dan een overdrachtsnelheid gehaald van circa 100 KB/s. Dat is dus erg langzaam.
Ook als in 10 vensters tegelijk werd gekopieerd werd in elk venster circa 100 KB/s gehaald. De netwerk-infrastructuur was dus snel genoeg, want die kon het makkelijk bijhouden.
Het overdrachtsprotocol (NFS) moest dus de boosdoener zijn, anders zou de snelheid meteen inzakken bij openen van nog een kopieervenster.
De hoogste tijd voor wat optimalisatie.

De schrijftest wordt gedaan door het meten van de tijd die nodig is om een blok met nullen naar een bestand op de NFS-server te schrijven:

$ time dd if=/dev/zero of=/home/eenuser/testfile bs=16k count=128

Hierbij zorgt "time" voor de tijdmeting en "dd" voor het kopiëren van de blokken data.

De parameters hebben de volgende betekenis:
parameter betekenis
if naam van lokaal inputfile, we schrijven alleen "nullen", dus gebruiken we /dev/zero
of naam van outputfile, op de gemounte NFS-schijf
bs blokgrootte, in dit geval 16 KBytes
count aantal te kopiëren blokken

De test heb ik met verschillende blokgrootten en aantallen blokken gedaan. De resultaten voor de schrijftest staan in de volgende tabel.
count rsize real m:ss.000
128 1024 0:20.510
^ ^ 0:20.479
^ ^ 0:20.491
^ 4096 0:0.240
^ ^ 0:0.237
^ ^ 0:0.217
256 4096 0:0.429
^ ^ 0:0.430
^ ^ 0:0.429
^ 8192 0:0.451
^ ^ 0:0.443
^ ^ 0:0.434
1000 4096 0:1.795
^ ^ 0:1.827
^ ^ 0:1.816
^ 8192 0:1.781
^ ^ 0:1.775
^ ^ 0:1.795

Elke instelling is drie maal getest. Let op dat voorafgaand aan elke meting het NFS-systeem wordt ontkoppeld en opnieuw wordt ge-mount (in dit geval is dat server limnos):

# umount limnos
# mount 10.0.0.120:/home /limnos -t nfs -o rsize=xxxx,wsize=yyyy

waarbij 10.0.0.120 het ip-adres van het nfs-systeem is, xxxx de blokgrootte voor lezen en yyyy de blokgrootte voor schrijven.
Hiermee wordt zeker gesteld dat alle caches leeg zijn, zodat betrouwbare metingen worden gedaan.

Uit de metingen blijkt dat een vergroting van de blokgrootte van 1024 naar 4096 een verbetering geeft van bijna 9000% van ca. 20500 naar ca. 230 ms! Een verdere vergroting naar 8192 geeft alleen nog wat verbetering bij meer dan 256 blokken.
Update 2012: Alle clients zijn inmiddels in /etc/fstab ingesteld op een blokgrootte van 65536:

limnos:/home /limnos nfs rsize=65536,wsize=65536 0 0

Hoewel er (nog) geen leestest is gedaan, is ook de blokgrootte voor lezen ingesteld op 65536.

Toegang tot de NFS-server regelen

In /etc/hosts.allow en /etc/hosts.deny (op de server) moet worden aangegeven vanaf welke ip-adressen een NFS-verbinding wordt toegestaan. Het is dus niet zo dat elk systeem zomaar een NFS-schijf kan mounten. Zie voor meer informatie de betreffende man-page.

Na elke wijziging van ï¿œn van deze bestanden moet de portmapper opnieuw worden gestart:

# /etc/init.d/portmap restart

Daarna de NFS-service stoppen en opnieuw starten:

# /etc/init.d/nfs-kernel-server stop
# /etc/init.d/nfs-kernel-server start

Denk eraan dat daardoor vreemde verschijnselen kunnen ontstaan op clients die op dat moment de NFS-server hebben gemount. Hun verbinding wordt verbroken en kan niet automatisch worden hersteld. Log deze clients dus eerst uit alvorens een NFS-service opnieuw te starten.