NFS

Martin Juráček <xjuracek@fi.muni.cz>


Obsah


Co je to NFS

NFS (Network filesystem) umožňuje uživateli připojit si ke svému počítači diks, popřípadě adresář z hostitelskeho počítače. K souborům připojeného svazku se přistupuje úplně stejně jako by byly na lokále. Můžeme tak snadno pracovat napřípad se svými home adresáři na kteréhokoli stroji v síti i když náš home není umístěn přímo na lokálním disku.


verze NFS


RPC

RPC (Remote procedure call) vyvinula firma Sun Microsystems. Server RPC poskytuje mnoho služeb. Tyto služby nemají jednoznačně přidělené číslo portu na který se připojují. Při každém požadavku na RPC službu aplikace zažádá portmaper o přidělění nějakého portu. Mezi tyto služby patří například nfsd nebo mountd. Nfsd je však tvoří vyjímku, protože používá vyhrazené číslo portu 2049. Seznam těchto služeb je v souboru /etc/rpc. Aktuální výpis všech RPC služeb a jejich portů získáme příkazem rpc -p. Aby RPC server věděl, které informace může klientovi poskytnout a které ne, používá se několik možností autentizace.


NFS na straně serveru

Abychom mohli používat NFS, je třeba mít v jádře přikompilovanou podporu nfs. Jestli jsme tak při konpilaci učinili zjistíme v souboru /proc/filesystems. Dále je třeba mít spuštěné démony rpc.port, mountd, nfsd. Máme-li všechno potřebné, je třeba nastavit soubor /etc/exports. V tomto souboru se nachází seznam všech svazků, které je server ochoten poskytovat k připojení jednotlivým klientským počítačům.
Synaxe soubu je:
adresář klient1(volba11,volba12) klient2(volba21,volba22)

adresář - připojovaný adresář
klient - počítač, z něhož lze daný adresář připojit
volby:

Příklad souboru /etc/exports:
	/usr/local   192.168.0.1(ro) 192.168.0.2(ro)
	/home        192.168.0.1(rw) 192.168.0.2(rw)
Adresář /usr/local si může být připojen pouze pro čtení z počítačů 192.168.0.1, 192.168.0.2.
Adresář /home může být připojen jak pro čtení, tak pro zápis a to z počítačů 192.168.0.1, 192.168.0.2.

Chceme-li však některý adresář zpřístupnit třeba všem počítačům v síti, může náš soubor /etc/exports vypadat následovně:
	/usr/local 192.168.0.0/255.255.255.0(ro)
	/home      192.168.0.0/255.255.255.0(rw)
Význam jednotlivých položek je obdobný jako v předchozím případě.
Je velice vhodné omezit přístup k jednotlivým exportovaným svazkům soubory /etc/hosts.allow a /etc/hosts.deny
Příkla souboru /etc/hosts.deny
	portmap:ALL
	lockd:ALL
	mountd:ALL
	rquotad:ALL
	statd:ALL
Příklad souboru /etc/hosts.allow
	portmap: 192.168.0.1 , 192.168.0.2
	lockd: 192.168.0.1 , 192.168.0.2
	rquotad: 192.168.0.1 , 192.168.0.2
	mountd: 192.168.0.1 , 192.168.0.2
	statd: 192.168.0.1 , 192.168.0.2


NFS na straně klienta

Na straně klinta je třeba mít jádro, jež podporuje nfs mounting (od verze 2.2 je to v pohodě) a dále rpc.portmap. Chceme-li, aby bylo možno uzamykat soubory, je potřeba, aby jak na straně serveru, tak na straně klienta běžely démoni rpc.statd a rpc.lockd. Dále je třeba, abychom měli serverem povoleno mountování nějakých adresářů (v /etc/exports) a můžeme začít připojovat. Na připojení se používá příkaz mount. Ten se pokusí pomocí RPC procedur spojit s připojovacím démonem mountd na serveru, proběhne autentizace a následné připojení.
Příklad příkazu mount:

	mount compl.domena.com:/home /mnt/home
Tento příkaz nám do adresáře /mnt/home připojí adresář /home z počítače compl.domena.com
Odpojení se provede příkazem:
	umount /mnt/home
Toto připojení můžeme nechat také automaticky provést při startu počítače. Stačí přidat následující řádky do souboru /etc/fstab
# device       		mountpoint     fs-type     options      dump fsckorder
   ...
   compl.domena.com:/home  /mnt/home    nfs          rw            0    0
   ...
Některé důležité volby:
  • soft - nedoporučuje se používat, spadne-li server, může dojít k poškození souborů
  • hard - doporučeno, spadne-li server, nebudeme moci (až na signál kill) shodit klienta a spojení bude opět navázáno při startu serveru
  • intr - Tato volba povoli signalum prerusit volani systemu NFS

    Sobor /etc/fstab pak může vypadat následovně:
    # device       		mountpoint     fs-type     options      	dump fsckorder
       ...
       compl.domena.com:/home  /mnt/home    nfs          rw,hard,intr            0    0
       ...


    Aotomounter

    V některých případech se nevyplatí připojovat svazek ihned po startu systému. Je lepší svazek připojit až v okamžiku, kdy ho opravdu potřebujeme. Z tohoto důvodu existuje démon "automatickeho pripojovani". Jedná se o démona, kteryý automaticky (v pripade potreby) pripojuje svazky a take je automaticky odpojuje, pokud nejsou po urcitou dobu používány. Timto démonem je automount. Dalším je amd. My si však uvedeme konfiguraci automountu. Konfigurace tohoto démona je v souborech /etc/auto.master a /etc/misc.
    Příklad souboru /etc/auto.master

    /auto   /etc/auto.misc  --timeout 60
    Tento soubor říká, že všechny adresáře uvedené v /etc/misc se namapují do adresáře /auto a jednotlivé pripojené adresáře se mohou sami po 60 sekundách pokusit odpojit. Pokud jsou používány, tak se jim to samozřejmě nepovede.
    Syntaxe souboru /etc/auto.misc

    mount_point map_type:map_name options

  • mount_poit - je misto pripojeni,
  • map_type - reprezentuje pripojovane misto (map_type je jeden z: file, program, yp, nisplus, hesiod)
  • map_name - je jmeno svazku)
  • options -jsou nepovinne volby (napriklad --timeout n)

    Příklad souboru /etc/auto.misc
    kernel          -ro,soft,intr           ftp.kernel.org:/pub/linux
    cd              -fstype=iso9660,ro      :/dev/cdrom
    zip             -fstype=auto            :/dev/hdd4
    floppy          -fstype=vfat            :/dev/fd0
    Disketa se tedy podle 1.sloupce v /etc/auto.misc a 1.sloupce v /etc/auto.master připojí do adresáře /auto/floppy

    Zdroje

    NFS howto
    Aotomount mini-howto
    NFS verze4