RPC, NFS, Automount

Jan Steuer, xsteuer@fi.muni.cz

Obsah

RPC (Remote Procedure Call)

(vzdálené volání procedur)
Protokol vyvinutý firmou Sun, který definuje nezávislý způsob, jimž mezi sebou mohou komunikovat procesy po síti. Tohoto protokolu využívá především NFS.

rpc.portmap zajišťuje svázání jednotlivých služeb RPC s příslušnými TCP nebo UDP porty. Protože jsou porty pro RPC služby alokovány dynamicky, neexistuje jednoznačná korespondence mezi službou a TCP nebo UDP portem, na kterém daná služba běží. RPC klient se tedy před zahájením každé komunikace spojí se službou rpc.portmap na daném serveru a od ní získá na základě čísla serveru informaci o portu, na kterém je tento server aktuálně dostupný.
Ke správné funkci RPC služeb je tedy potřeba, aby se jako první spustila služba rpc.portmap a teprve potom ostatní služby.

RPC jako přenosový protokol používá bud UDP nebo TCP. Systém NFS původně používal protokol UDP, který v 80. letech poskytoval na sítích a tehdejších počítačích nejvyšší výkon. Protokol UDP i NFS postrádají algoritmy pro řešení špiček, které jsou nezbytné k dosažení dobého výkonu na velkých sítích. Vývoj hardware se posunul kupředu, a proto se s NFS používá většinou protokolu TCP, který i přes vyšší režii nabízí vyšší výkon.

NFS (network filesystem)

(síťový souborový systém)
Bezstavový protokol vyvinutý společností Sun pro sdílení informací mezi počítači. Původně byl implementován jako náhradní systém pro bezdiskové stanice, ale ukázal se jako dobré řešení pro obecné sdílení souborů. Systém NFS se skládá z několika složek, včetně protokolu a serveru pro připojování svazků a démonů řídících základní souborové služby. Některé části jsou přímo zakompilovány v jádře.

NFS Historie

První veřejnou verzí NFS byla verze 2 vydaná v roce 1989. Jednalo se o jednoduchý bezstavový protokol se zamykáním implementovaným vně protokolu.

Na počátku 90. let bylo do protokolu implementováno množství změn aby v roce 1995 vznikl protokol verze 3. Hlavními vylepšeními této verze je podstatné zvýšení výkonu a podpora souborů větších než 4GB.

V roce 2000 byla vydána zatím poslední verze - verze 4. Tato verze obsahuje další vylepšení výkonu a vylepšuje bezpečnost. Bezpečnost byla největším problémem předchozích verzí, jednalo se o daň za jednoduchost. Verze 4 je již stavovým protokolem.

NFS server

Když server poskytne adresář ostatním počítačům, říkáme, že adresář "exportoval". O poskytováni NFS služeb se stará 5 démonů:

rpc.nfsd
vyřizuje klienty požadované souborové operace
rpc.lockd a rpc.statd
starají se o zamykání souborů
rpc.mountd
obsluhuje počáteční žádosti na připojení svazku
rpc.quotad
obsluhuje uživatelské kvoty na exportovaných svazcích
Většina dnešních Linuxových distribucí obsahuje skripty, které se starají o spouštění všech potřebných démonů (v distribuci RedHat je to /etc/init.d/nfs).

V souboru /etc/exports se definují jednotky, které se budou sdílet a jak budou sdíleny. Typicý záznam v tomto souboru by mohl vypadat takto:

directory machine1(option11,option12)
machine2(option21,option22)
directory
Adresář, který se má sdílet. Budou sdíleny všechny podadresáře ve stejném souborovém systému.
machine1 a machine2
Počítače, které budou mít přístup do daného adresáře. Mohou být použita doménová jména, IP adresy či "wildcards" (části jmen jsou nahrazeny * nebo ?). Z bezpečnostních důvodů se doporučuje použití IP adres.
optionXX
Seznam voleb pro každý počítač definuje jaký typ přístupu mu bude povolen. Důležité volby jsou:
ro
pouze ke čtení
rw
čtení a zápis
all_squash
mapuje všechny hodnoty UID a GID na jejich anonymní verze. Užitečné pro podporu PC, kterým nedůvěřujeme.

Ukázka:

/usr/local   192.168.0.1(ro) 192.168.0.2(ro)
/home        192.168.0.1(rw) 192.168.0.2(rw)
Pro zvýšení bezpečnosti se vřele doporučuje nastavit soubory /etc/hosts.allow a /etc/hosts.deny.

NFS Klient

Vzdálené souborové systémy se připojují obdobně jako ty lokální. Stačí pouze příkazu mount předat adresu ve tvaru server:adresář. Souborový NFS systém musí být však správně exportován. Pro kontrolu exportovaných souborových systému je možno použít příkaz:

showmount -e server
Kde "server" je adresa serveru.

Příkazu mount lze nastavit mnoho voleb pro připojení. Seznam těch nejdůležitějších:

rw
připojení pro čtení i zápis
ro
připojení pouze ke čtení
bg
selže-li připojení, pokouší se o to dále na pozadí a pokračuje s plněním dalších požadavků na připojení
hard
když je server vypnut, budou operace, které se k němu pokoušejí přistupovat, zablokovány, dokud se server opět nerozběhne
soft
když je server vypnut, operace, které se k němu pokoušejí přistupovat selžou a ohlásí chybu.
tcp
nastavuje přenosový protokol na TCP. Implicitní je UDP.
mount -o rw,hard,bg erigona:/home/xsteuer /erigona/home/xsteuer
Pro připojení při startu systému lze nastavit /etc/fstab.
# device    mountpoint  fs-type     options     dump
server.domena:/export   /mnt/nfs nfs      rw,hard,intr   0 0

automount

Automount je démon, který automaticky připojuje souborové systémy, když se na ně přistupuje, a odpojuje je, pokud už nejsou potřebné. Tím existuje v systému méně aktivních přípojných bodů. Většina automounterů poskytuje navíc ještě další výhody oproto klasickému připojování přes fstab. Například při připojování svazků NFS lze definovat seznam replikovaných souborových systémů, takže síť může pokračovat v práci, i když je primární server nedostupný.

Nastavení Automountu se provádí v konfiguračním souboru /etc/auto.master, kde se definují přípojné body. Startovací skript /etc/init.d/autofs parsuje tento soubor a pro každý přípojný bod spouští jednu instanci procesu automount.

Soubor auto.master spojuje přípojný bod s "mapou". Mapa překládá název adresáře, který uživatel otvírá - říká se mu "klíč" - na příkazový řádek, který může příkaz mount využít k provedení vlastního připojení. Mapa může být textový soubor, spustitelný program nebo LDAP databáze. Když uživatel otevírá adresář, který spravuje automount, automount zjistí který souborový systém se má připojit tak, že se zeptá mapového souboru nebo spustitelného programu.

/directory     /etc/mapa.map     -secure,hard,bg,intr

Mapové soubory automaticky připojují několik souborových systémů do jednoho adresáře.

users    server:/home/users
devel    server2:/devel
První sloupec pojmenovává podadresář, do kterého by se měl souborový systém připojit a ve druhém sloupci jsou definovány připojovací parametry a zdrojová cesta k souborovému systému. Mapový soubor nedefinuje pod který adresář se budou souborové systémy připojovat, to je definováno v auto.master.

amd

Program amd se snaží vyřešit některé nedostatky automountu. Amd neobsahuje žádný proprietární zdrojový kód. V pravidelných intervalech zjišťuje, které servery jsou dostupné a udržuje jejich seznam. Na základě těchto informací připojuje, odpojuje a nahrazuje souborové systémy. Syntaxe map je obecnější než u programu automount.

Položky map mohou používat podmíněné výrazy, jež položky aktivují jen v určitých kontextech. Podmíněné výrazy používají vestavěné "rozhodovací proměnné", naplněné různými informacemi o prostředí, v němž amd běží. Vybrané rozhodovací proměnné:

autodir
implicitní adresář, pod nímž se mají připojovat souborové systémy
host
lokální hostitelské jméno
map
název použité mapy
os
operační systém
osver
verze operačního systému
key
název svazku, který se resolvuje
rhost
sever na němž je svazek uložen
rfs
název vzdáleného souborového systému
type
typ připojení, zpravidla nfs nebo ufs(lokální disk)
opts
parametry připojení
Prvky ve tvaru "název:=hodnota" definují různé atributy připojení. Prvky ve tvaru "název==hodnota" a "název!=hodnota" jsou podmíněné výrazy. Hodnoty následující za podmíněným výrazem se vyhodnotí pouze tehdy, když se podmínka vyhodnotí jako pravdivá. Notace "${ key}" slouží k dereferencování proměnné.
/default opts:=rw,soft
usr/man host==erigona;type=ufs;dev:=/dev/sdlf \
	host!=erigona;rhost= erigona;rfs:=/${ key};type=nfs;fs:=${ autodir} /${ key}

Přípojné body a mapy se určují na příkazovém řádku příkazu amd.

amd /dir1 file1.map /dir2 file2.map ....

Literatura