Sistem NFS


Sistemu NFS pravijo včasih porazdeljen datotečni sistem, vendar je bolj pravilno, da mu rečemo mrežni datotečni sistem. NFS je običajno poseben dodatek k nabavljenemu operacijskemu sistemu. Omogoča programom na računalnikih - klijentih transparenten dostop (branje in pisanje) do datotek na računalnikih z ustreznim strežnikom NFS. Organizacija NFS je simetrična tako, da je lahko dani računalnik lahko istočasno klijent in strežnik.

 
Strežnikov je lahko tudi več. 

Taka je struktura na strani klijenta.

Ko odpremo datoteko, kontaktira sistem vse strežnike. 


 
Plast VFS (Virtual File System) pomni za vsako odprto datoteko tabelo virtualnih vozlov (v-node).

v-vozel kaže v primeru lokalnih datotek na i-vozel. V primeru oddaljenih datotek pa na r-vozel (remote i-node = r-node).

Pri obravnavi NFS moramo ločiti med pojmoma produkt NFS in protokol NFS.

Strežnik NFS ne pomni stanja o klijentih in ne o predhodnih zahtevkih le-teh. Je torej brez stanja (stateless). Če pride do izpada strežnika, ni zato zgubljenega nič. Zgodovino predhodnih zahtevkov si morajo zapomniti klijenti, ki pač po potrebi zahtevke ponovijo.

Sistem NFS naj bi sicer dopuščal ekvivalentne operacije, ki jih imamo na lokalnem datotečnem sistemu, vendar nekatere omejitve le veljajo.

Med bolj znanimi je brisanje odprte datoteke. Pri lokalnih datotečnih sistemih bi taka datoteka še fizično obstajala, dokler jo nek proces drži odprto. Tega pa strežnik NFS ne more vedeti.

Delno se taki problemi rešujejo z več inteligence na strani klijentov. Pa še pri tem veljajo omejitve (na primer da sta proces, ki datoteko odpre, in proces, ki datoteko briše, na istem računalniku - klijentu).

Prej navedeni problem se na strani klijenta na primer rešuje z začasnim preimenovanjem datoteke ( damo ji neko "sintetično" ime, na primer .xx12345) . Datoteke pod iskanim imenom ne poznamo več, vendar fizično še obstaja. Tako zaznamovano (in nevidno) datoteko nato zbrišemo pri njenem zaprtju, lahko pa jih briše tudi neka procedura ob ponovnem zagonu računalnika.

Podobne probleme imamo tudi pri spreminjanju lastništva in zaščit datotek. Probleme povzroča tudi pomnenje atributov direktorijev, ki so tako kot navadne datoteke pomnjeni v medpomnilniku klijenta. Problemi so lahko tudi zaradi slabe časovne sinhronizacije računalnikov (eden od atributov datoteke je tudi čas njene tvorbe ali dostopa).
 
 
Seveda so tudi performanse (propustnost) sistema NFS praviloma slabše od performans lokalnih datotečnih sistemov. Izboljšamo jih z uporabo medpomnilnikov (cache):

 
 


Kako montiramo nek datotečni sistem na strežnik NFS


Pri zagonu sistema se v strežniku sproži (poleg demonskega procesa nfsd) tudi demonski proces mountd. Na strani klijenta uporabimo ukaz mount.
 
Vzpostavi se povezava med procesoma mount in mountd. Slednji obdela sprejete podatke o poti do zahtevanega datotečnega sistema in vrne podatke o osnovi(root) sistema, ki ga želi montirati klijent. Te podatke kijent nato uporabi podobno kot pri lokalno montiranih datotečnih (pod)sistemih. V nadaljevanju bo strežniku pošiljal zahtevke v skladu s protokolom NFS.

mount ima pri lokalnih (neporazdeljenih) sistemih normalno naslednjo obliko:

/etc/mount [-r] specialFile directory
V primeru sistema NFS pa ima ta ukaz na primer naslednjo obliko:
/etc/mount -f NFS [,opcije] hostName:pathName directory


Pozor:
NFS strežnik vsebuje le datoteke. Ne vsebuje nobenih prehodnih informacij o klijentih (katere datoteka je odprta, kakšni so trenutni odmiki (offset) odprtih datotek,..) Zato morajo zahtevki read() in write() vsebovati tudi ta podatek. Morebitni ponovljeni zahtevki se morajo ponoviti v celoti.