RPC, protokol pro vzdálené volání procedur vyvinutý firmou Sun Microsystems, je definován v RFC 1050 (verze 1) a RFC 1831 (verze 2). Každá RPC služba je jednoznačně určena svým číslem. Seznam služeb a jejich čísel se nachází v souboru /etc/rpc. O registraci služeb na straně serveru se stará portmapper (démon portmapd).
Klient, který chce využít nějakou službu, nejprve zkontaktuje portmapper a ten mu odpoví zda a na jakém portu je požadovaná služba dostupná. Poté klient na tento port odešle svůj požadavek na spuštění nějaké procedury a po jejím vykonání dostane výsledek. Z důvodu použitelnosti v heterogenním prostředí se pro výměnu dat mezi serverem a klientem používá standard XDR (eXternal Data Representation, RFC 1014), který definuje strojově nezávislý způsob výměny binárních dat.
RPC je využíváno hlavně v NFS.
NFS od Sun Microsystems poskytuje transparentní přístup k souborům
umístěným na různých strojích v různých částech sítě.
Verze
Linux podporuje NFS verze 2 a 3 jako klient i server.
Protokol NFS je navržen jako bezestavový, což znamená, že server si nemusí pamatovat vůbec nic. Pouze provádí požadavky, které mu přichází a nemusí vůbec nic vědět o tom, jaký k sobě tyto požadavky mají vztah. Vzhledem k tomu, že ve většině případů běží nad UDP, musí být server schopen zvládnout duplicitní požadavky.
Každý požadavek musí obsahovat veškeré informace nutné pro jeho vykonání. Například požadavek na zápis do souboru musí obsahovat identifikaci souboru, pozici, na kterou se mají data zapsat, velikost dat a samozřejmě samotná data.
Komunikace s NFS serverem probíhá na dvou úrovních. Nejprve je potřeba pomocí mount protokolu připojit adresářový strom, se kterým se bude pracovat. Stejně jako vlastní NFS využívá i tento protokol RPC. Při požadavku na připojení adresáře dojde k autentizaci klienta a poté je mu předán identifikátor kořenového adresáře, který se poté použije při komunikaci protokolem NFS.
Jakmile je strom připojen, může začít komunikace protokolem NFS, který již obsahuje příkazy pro práci se soubory.
Hlavním konfiguračním souborem pro server NFS je /etc/exports(5). Tento soubor obsahuje záznamy ve tvaru:
directory machine1(option11,option12,...) machine2(option21,option22,...) ...kde
ro | Z této stanice nebude umožněn zápis do daného adresáře |
rw | Adresář bude zpřístupněn jak pro čtení tak pro zápis |
no_root_squash | Root na klientovi bude mít stejný přístup k souborům jako by to byl root na serveru. Implicitně je to vypnuté a požadavky od uživatele root budou považovány za požadavky od uživatele nobody. Hlavní využití je pro bezdiskové stroje. |
no_subtree_check | Vypíná kontrolu příslušnosti požadovaného souboru do exportovaného stromu. Pokud je zpřístupněn celý diskový oddíl, urychlí tato volba zpracování na serveru. |
sync | Po každém zápisu na disk se provede sync(), čímž se
zajistí, že data byla opravdu zapsána na disk, ale zpomalí odezvu. Při použití NFS verze 3 lze volání sync() vynutit pro každý zápis zvlášť pomocí RPC procedury COMMIT. |
Pro chod NFS serveru je třeba spustit následující tři démony: rpc.portmap (někdy též portmap), mountd (nebo rpc.mountd) a nfsd (někdy rpc.nfsd). Pomocí příkazu rpcinfo -p si lze vypsat seznam zaregistrovaných RPC programů a ověřit, zda mezi nimi jsou i mountd a nfsd.
NFS klient nepotřebuje žádnou zvláštní konfiguraci, stačí pouze připojit exportovaný adresář pomocí příkazu mount například takto
mount -t nfs server.domain:/exported/directory /mnt/nfsPři připojování je možno zadat některé zajimavé volby:
rsize=n wsize=n |
Určují velikost datagramů, které budou použity pro čtení resp. zápis. |
hard | Pokud dojde ke spadnutí serveru, bude program přistupující k souboru přes NFS čekat až se znovu podaří navázat spojení se serverem. Pokud zaroveň nebyla zadána volba intr nebude možné takovýto program přerušit. |
soft | Při selhání požadavku bude procesu vrácena chyba a ten se s tím musí vyrovnat. Tato volba se nedoporučuje, protože může dojít k poškození souborů nebo ztrátě dat. |
intr | Viz. hard. |
Výsledný příkaz pak může vypadat třeba takto
mount -t nfs -o ro,hard,intr,rsize=8192 server.domain:/exported/directory /mnt/nfs
V některých případech, např. pokud přes NFS připojujeme domovské adresáře uživatelů, by bylo lepší, pokud by nebyly všechny adresáře připojeny pořád, ale připojil by se vždy jen ten, se kterým se zrovna pracuje a poté by se zase odpojil. Pro tyto účely se hodí démon automount, který v případě potřeby připojuje libovolné svazky v systému a po nějaké době nečinnosti je zase odpojuje.
Démon se spouští skriptem /etc/init.d/autofs, který přečte soubor /etc/auto.master a pro každý v něm uvedený mount point spustí automount s potřebnými parametry.
Formát souboru /etc/auto.master je následující:
mount_point map_type:map_name optionskde
/auto /etc/auto.misc /mnt yp:mnt.map
Soubor /etc/auto.misc pak může vypadat například takto:
home -ro,soft,intr server.domain:/home cd -fstype=iso9660,ro :/dev/cdrom zip -fstype=auto :/dev/hdd4kde první sloupec je klíč a určuje kam se daný souboový systém připojí (např. /auto/home), druhý sloupec udává parametry pro připojení svazku (viz. mount(8)) a třetí sloupec popisuje co se bude připojovat.