Úvod
V polovině osmdesátých let minulého století, společnost Sun Microsystems vyvinula síťový souborový systém, který je velmi jednoduché nakonfigurovat a používat. Od té doby prošel jistým vývojem a nakonec se dostal také do linuxového jádra. Na něm je to v dnešní době jedno z nejpoužívanějších řešení pro sdílení dat na sítích. Protokol je postaven nad UDP. V praxi je velmi rychlý. Od verze 3 je možné ho nakonfigurovat, aby používal protokol TCP, což je na lokální sítě často zbytečné. NFS se o kontrolní součty stará samo, takže UDP je pro tento druh přenosu ideální.
Jsou tu ale i nevýhody. Především to, že ač je protokol bezestavový, linuxového jádro nemá moc rádo, když mu druhou stranu „odstřihneme“ ze sítě. Existují sice volby, které tyto jevy zmírňují, ale už se mi při používání stalo, že se oddíl z notebooku připojený na desktop nechtěl odpojit, protože jsem ve spěchu notebook vypnul. Tím nechci naznačovat, že to je chyba NFS a je možné, že jsem měl někde nějakou chybu.
K NFS jsem se dostal přibližně před rokem a půl, kdy jsem potřeboval sdílet data právě mezi notebookem a desktopem. Konfigurace je opravdu jednoduchá a sdílení je nahozeno prakticky během minuty. Stále jsem ale řešil problémy s vypínáním notebooku, když byl ještě jeho disk připojen na desktopu. To mě dovedlo k nástroji Autofs, který je v kombinaci s NFS perfektní volbou právě pro podobné situace.
Autofs
Autofs totiž udržuje oddíly připojené jen po nezbytně dlouhou dobu a umí pracovat i s jinými zařízeními než jsou síťové disky. Velmi dobře umí posloužit i v kombinaci s flashkami nebo dvdromkou. Člověk už nemusí tolik dávat pozor, jestli je flashka odpojená nebo ne. K tomu se také hodí nějaký program, který umí rychle ukázat, které oddíly jsou připojené. Já k tomuto účelu používám Conky.
Autofs je napsáno přímo v jádře. Pokud nastartujeme autofs init script, připojí autofs do předem nastaveného adresáře, nejčastěji „/media“. V tom pak jsou vytvořeny tzv. ghost adresáře (pokud se tak nastaví) a pokud do nich přistoupíme, autofs nám připojí zařízení do tohoto adresáře. Tam si uděláme, co potřebujeme, a adresář opustíme. V tuto se začne odpočítávat timeout, a když doběhne, zařízení se odpojí. Na internetu se dají najít názory pro i proti velkým timeoutům (řádově minuty), ale osobně se mi nejvíce osvědčil kolem pěti až dvaceti vteřin. Krátký timeout problémy nedělá a když není oddíl potřeba, tak je zbytečné, aby byl připojen. Jiná situace by mohla nastat u programů, které potřebují opravdu rychle přistoupit k datům, ale pro ty není autofs určeno.
Oddíl se udrží připojený, pokud ho budeme mít v některém programu otevřený (klasické „cd /media/test“ stačí) a nebo pokud odtamtud máme otevřený soubor. Nemusíme se proto bát, že by se u malého timeoutu například kousalo video, protože by se oddíl pořád odpojoval a připojoval.
Instalace
Pro chod NFS je potřeba mít v jádře zaškrtnuto:
File Systems --->
Network File Systems --->
<M> NFS file system support
[*] Provide NFSv3 client support
<M> NFS server support
[*] Provide NFSv3 server support
První volba je důležitá pro funkci klienta a druhá pro funkci serveru, takže není potřeba zaškrtávat obě na všech strojích. Dále budeme potřebovat balík nástrojů pro práci s NFS oddíly „nfs-utils“. Díky němu už budeme moci pracovat se síťovými oddíly, často se s ním nainstaluje také init script, který nahodí náš server.
Pro funkci automatického připojování a odpojování musíme zaškrtnout v jádře následující volbu:
File Systems --->
<*> Kernel automounter version 4 support (also supports v3)
A jako doprovodnou utilitku nainstalujeme balík „autofs“. S tímto bychom měli mít všechno, co potřebujeme pro provoz sdílení dat za pomocí NFS.
Konfigurace
NFS
Když chceme sdílet adresář nebo oddíl přes NFS, tak ho tzv. exportujeme. Začneme malým příkladem:
/home 10.1.3.0/255.255.0.0(rw,no_subtree_check)
/home/cx/ 10.1.3.0/255.255.0.0(rw,no_subtree_check)
Toto je ukázka ze souboru „/etc/exports“. Ten jediný nám stačí pro bezproblémovou funkci NFS. V prvním sloupci je adresář, který chceme exportovat, za ním následuje IP adresa (můžeme použít i hostname) nebo rozsah IP adres, které mají povoleno přistupovat k našemu adresáři. V závorkách už přidáváme pouze parametry. Ty nejdůležitější jsou:
ro Exportovat pouze pro čtení
rw Exportovat pro čtení i zápis
no_root_squash Povolit rootovská práva
no_subtree_check Vypnutí kontroly, jestli požadovaný soubor opravdu patří pod exportovaný adresář
sync Server pošle potvrzení až poté, co jsou všechna data bezpečně uložena
async Opak sync
insecure Zapnout používání portů větších než 1024
Malá poznámka k třetímu řádku. Ve výchozím stavu se NFS k požadavkům od roota (když se root připojí na exportovaný adresář) chová, jako kdyby s ním pracoval uživatel „nobody“. Pokud uvedeme do nastavení tuto volbu, tak se všechny požadavky od roota budou zpracovávat, jako kdyby od roota skutečně byly. Čtvrtý řádek je důležitý, pokud exportujeme celý oddíl místo pouze jednoho adresáře v něm. Ve výchozím stavu NFS kontroluje, jestli je požadovaný soubor uvnitř adresářové struktury, která je exportována. Uvedením této volby kontrolu vypneme a tím by se měl zvýšit výkon celého přenosu.
Autofs
Konfigurační soubory autofs se nacházejí v adresáři „/etc/autofs“. Pro naši věc budeme potřebovat dva. První („autofs.master“) je hlavní, odkazuje na další a vypadá podobně jako tento:
/media /etc/autofs/auto.media --ghost --timeout 10
Tento jediný řádek řekne autofs, že má vytvořit v adresáři /media virtuální souborový systém a do něj podle pravidel z „auto.media“ vytvořit virtuální adresáře, které se namapují na naše zařízení. Na konci můžeme uvést parametry. Nás bude zajímat parametr „–ghost“. Ten zajistí, že se adresáře vytvoří již před připojením, takže na do nich můžeme vstoupit pohodlně z jakéhokoli souborového manageru. Pokud by tam tato volba nebyla, adresáře by se vytvořily až po té, co bychom např. do příkazové řádky napsali přesnou cestu. Volba „–timeout 10“ znamená, že všechny zařízení se po 10 vteřinách nečinnosti odpojí.
Druhým konfiguračním souborem bude „auto.media“, který už bude obsahovat konkrétní zařízení s jejich body připojení.
cdrom -fstype=auto,ro,umask=111,dmask=000 :/dev/cdrom
leslie -fstype=nfs,soft,intr 10.1.3.249:/home/cx
tresnovecnet -fstype=nfs,soft,intr 10.0.0.1:/home/samba/all
misha -fstype=smbfs,credentials=/etc/smb.auth //10.1.3.1/disk
ctecka -fstype=auto,uid=1000 :/dev/sdd1
fotky -fstype=auto :/dev/disk/by-uuid/b607d203-b187-4fe9-91f3-679f0f65da50
První sloupec je název virtuálního adresáře ve virtuálním souborovém systému (v našem případě „/media“). Druhý sloupec obsahuje parametry připojení, které uvádíme například v „/etc/fstab“ nebo v parametru „-o“ u příkazu mount. Třetí sloupec označuje zařízení, které se má připojit. V ukázce mám jak normální fyzické zařízení identifikované přes „/dev/sd*“ nebo UUID, tak i NFS a smbfs.
Pro lepší chod NFS je dobré nastavit volby „soft“ a „intr“. Ty by měly umožnit pohodlné odmountování oddílu nacházejícího se na stroji, který se odpojil od sítě, případně přerušení operace přes „CTRL+C“ v shellu.
Máme-li oba konfigurační soubory nastavené, stačí zapnout autofs ve startovacích skriptech a všechno by mělo jet.
Použití
Připojování NFS pouze přes autofs by bylo v některých případech těžkopádné, proto ještě uvedu příklady použití v souboru „/etc/fstab“:
#adresa mount point filesystem parametry dump fsck
10.1.3.1:/home/samba /mnt/misha nfs rw,soft,intr 0 0
a ruční mountování.
mount 10.1.3.1:/home/samba /mnt/p1
Conky
Nebudu se zde zabývat konfigurací conky, proto jsme o něm na rootu již psali, ale rád bych se zaměřil na volby, které hlídají připojené oddíly. Tady je ukázka z „.conkyrc“:
${if_mounted /media/cdrom} cdrom ${endif}
${if_mounted /media/fotky} fotky ${endif}
${if_mounted /media/ctecka} ctecka ${endif}
${if_mounted /media/leslie } leslie ${endif}
${if_mounted /media/misha} misha ${endif}
${if_mounted /media/tresnovecnet} tresnovecnet ${endif}
Pro přehlednost jsem podmínky rozdělil na jednotlivé řádky, normálně je mám na jednom řádku. Conky totiž za každý řádek udělá mezeru, i když bude schovaný. Vypadá to pak nevzhledně.
Závěr
Sdílení dat na lokální síti je důležité, a i když se NFS nehodí všude, svoje místo si určitě najde. V kombinaci s conky se pak užívání flashek stává mnohem pohodlnější. U NFS se už uživatel nemusí vypořádávat tak často s fyzickým odpojením druhé strany. Celý postup se hodí hlavně na distribuce, které kladou na uživatele větší nároky. Tito uživatelé budou používat počítač jiným způsobem než uživatelé např. OpenSuSE nebo Ubuntu, a také budou mít jiné požadavky na chování systému. Autofs doporučuji všem, kteří se často pohybují v příkazové řádce.
NFS má i další výhody. Linuxové jádro ho může použít jako svůj root oddíl, a díky tomu je vytvoření bezdiskových stanic doslova hračkou. Také je možné sdílet jeden home adresář přes několik domácích strojů nebo například disk s multimédii; může být k dispozici všem členům rodiny a bude se u každého chovat, jako kdyby to byl disk lokální.