RPC, NFS a automount

Petr Jurášek, xjurasek@fi.muni.cz


Obsah


RPC

RPC (Remote Procedure Call) je protokol pro vzdálené volání procedur vyvinutý firmou Sun Microsystems, umožňuje asynchronní vykonávání procedur na vzdáleném stroji. Je definován v
RFC1050 a RFC1831(RPC verze 2).

Každá RPC služba má jednoznačně určené číslo (jejich seznam je možno získat v /etc/rpc), ale porty, na které se připojuje nejsou pevně určeny. O jejich přidělení na straně serveru se stará portmapper. Vyjímku tvoří NFS, které obvykle běží na vyhrazeném portu 2049. Seznam aktuálně přidělených portů můžeme získat příkazem rpcinfo -p.


NFS

NFS (Network FileSystem) je protokol umožňující uživateli vzdálené připojení adresáře z hostitelského počítače kdekoli na síti a jeho používání jako lokálního disku. NFS je bezestavová, proto každý požadavek na nfs server musí obsahovat všechny informace k provedení procedury.
Komunikace mezi serverem a klientem probíhá ve dvou fázích: Nejprve se pomoci protokolu mount připojí adresářový strom k lokálnímu, během čehož dojde k autentizaci, poté je předán identifikátor kořenového adresáře, který se následně používá při komunikaci protokolem NFS.

Verze:

NFS verze 1:
Prototyp, nebyla nikdy použita.

NFS verze 2:
První verze, která se objevila v operačním systému SunOS 2. Běží nad UDP.

NFS verze 3:
Přidává některé funkce oproti předchozí verzi, např. vytváření speciálních souborů, běží nad UDP a experimentálně nad TCP.

NFS verze 4:
Tato verze je momentálně ve vývoji, pro zájemce dokumentace
RFC 3010.

Verze 2 i 3 jsou podporovány linuxem jak na straně serveru tak na straně klienta.


NFS na straně klienta

Na straně klienta je třeba mít jádro zkompilované s podporou NFS mounting (zjistíme v /proc/filesystems).

Vlastní připojení se provádí příkazem mount, například:

mount -t nfs server.domena:/export /mnt/nfs
odpojení příkazem:
umount /mnt/nfs

Některé volby příkazu mount:

hard - při spadnutí serveru neumožní přerušit klienta (až na signál kill), pokud nebyla zadána volba intr. Klient bude čekat na znovunavázání spojení.
soft - může způsobit poškození souborů. Umožňuje pomocí volby timeo=time stanovit "čekací dobu", během niž pokud server neodpoví, bude klientovi vrácena chyba.
rsize=x,wsize=x - stanoví velikost datagramů, které budou použity při komunikaci (může urychlit spojení, NFS verze 2 ovšem nepodporuje datagramy větší než implicitní hodnoty).
nolock - nepoužívá zamykání
ro,rw - intuitivní volby (read only, read write)
intr - viz hard.

Pokud chceme připojovat svazky ihned po startu systému, je vhodné přidat následující řádek do /etc/fstab:

# device		mountpoint	fs-type		options		dump
server.domena:/export	/mnt/nfs	nfs		rw,hard,intr	0 0

NFS na straně serveru

Na straně serveru jsou potřeba démoni portmap (popř. rpc.portmap), rpc.nfsd a rpc.mountd, budeme-li používát zamykání souborů, pak rpc.statd a někdy rpc.lockd, používáme-li quoty na exportované svazky pak rpc.rquotad.
Vlastní konfigurace se provádí v souboru /etc/exports

/etc/exports
Tento soubor obsahuje seznam svazků, které server poskytuje k připojení klientům. Jednotlivé řádky jsou tvaru:

adresar klient1(volba1,...) klient2(volba2,...)

kde:

rpc.lockd
Spouští NFS lock manager na jádrech, která to nedělají automaticky.
rpc.statd
Je používán NFS pro ochranu dat pro případ rebootu NFS serveru.

/etc/hosts.allow, /etc/hosts.deny
Vystavujeme-li diskové svazky veřejnosti, je výhodné mezit přístup k službám z některých počítačů, k čemuž slouží právě hosts.allow a hosts.deny. V případě počadavku na poskytnutí nfs svazku server napřed zjistí, zda IP adresa vyhovuje adrese z /etc/hosts.allow. Pokud ano, je jí povolen přístup, pokud ne, podívá se do /etc/hosts.deny. Vyhovuje-li adresa tomuto souboru, pak je přístup zamítnut.

Formát souborů hosts.*
Služba:IP adresa 1 , IP adresa 2 , ... (popř. ALL)


Automount

Někdy se vyplatí nepřipojovat svazky ihned po startu systému (například domovské adresáře uživatelů), ale až v případě jejich potřeby. K tomuto účelu slouží démon automount (popř. amd), který zajišťuje automatické připojování svazku v případě potřeby a odpojí pokud nejsou určitou dobu používány.
Rozdíl mezi AMD a automount je v tom, ze AMD běží v uživatelském prostoru, kdežto automount využívá jádra.

Po instalaci z rpm balíčku se automount zpouští klasicky z /etc/init.d/autofs, konfigurace probíhá typicky ve dvou souborech:

/etc/auto.master
/etc/auto.misc, popřípadě jinak pojmenovaný, odkazuje na něj auto.master

/etc/auto.master
Formát je následující:

mount_point  map_type:map_name  options
kde:
mount_point - místo kam se budou všechny svazky připojovat
map_type:map_name - mapa, podle které se bude připojování řídit
options - volby předávane automountu, např. timeout=n
Př. souboru /etc/auto.master:
/auto  /etc/auto.misc  --timeout=60

/etc/auto.misc
Formát je následující:

key  [- options]  location
kde:
key - určuje, kam se daný svazek připojí
options - parametry připojení (viz. man mount())
location - odkud se má svazek připojit
Př. 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

AMD

Dalším démonem pro automatické mountování svazků za běhu systému je AMD, pocházející z FreeBSD.
Spouštění amd:
amd /net /etc/disk.map
kde:
/net - adresář, do kterého pokud přistoupíme, tak amd připojí požadovaný svazek
/etc/disk.map - mountovací mapa.
Svazek není mountován v adresáři /net ale v pomocném adresáři (defaultně /a), v adresáři /net se nachází symbolický link. Hlavní síla amd ovšem spočívá v makrojazyce používaném v mapovacím souboru.

/etc/disk.map
Soubor je ve tvaru:

key   value
  ....
kde:
key - je podadresář v mountovacím adresáři (v příkladě /net)
value - možné umístění (bez mezer)
/defaults       type:=nfs;rhost:=fileserver
*		rfs:=/home/;sublink:=${key}

Je zde možné používat regulární výrazy, např. použijeme-li * (nebo např. [a-c]*) v klíči v automapě, expanduje se každý možný klíč v automapě a bude se mountovat do zadaného adresáže. V příkladě bude /net/petr symbolický link do /a/fileserver/home/petr.

Zdroje

NFS howto
Automount howto
Getting started with AMD