Na počítači, kde chcete sdílet nějaký adresář, je potřeba nainstalovat balíček nfs-kernel-server (takto se jmenuje v distribuci Debian, v jiných linuxových systémech může být jméno jiné). Na klientském počítači není třeba zpravidla nic doinstalovávat.
Další informace o souborovém systému NFS si můžete přečíst v našem článku NetworkFile System.
Jednoduché sdílení dat
Nastavení sdílení se provádí v souboru /etc/exports na serveru. Dál předpokládejme, že chceme sdílet adresář /mnt/disk všem počítačům v síti tak, aby z něj mohly číst. V tomto případě a díky výchozím hodnotám bude stačit do souboru /etc/exports přidat řádek:
/mnt/disk
A znovu načíst nastavení na serveru příkazem:
/etc/init.d/nfs-kernel-server reload
Přitom vás NFS server upozorní na použití výchozí hodnoty (no_subtree_check). Této hlášky si ovšem nemusíte všímat a nasdílení adresáře bude úspěšně provedeno. Ve výchozím nastavení jsou adresáře sdíleny pouze pro čtení (read only - ro).
Na klientském počítači zadejte (s právy uživatele root) příkaz:
mount -t nfs <jméno počítače>:/mnt/disk <adresář kam to připojit>
Místo jména počítače (pokud není uvedeno v /etc/hosts nebo na DNS serveru) také můžete použít jeho IP adresu. Adresář, do kterého budete sdílený adresář připojovat, samozřejmě musí předem existovat. Celý příkaz by mohl vypadat třeba takto:
mount -t nfs 192.168.1.1:/mnt/disk /home/martin/disk
Připojení můžete také provést pomocí nastavení souboru /etc/fstab, do kterého bychom analogicky přidali řádek:
192.168.1.1:/mnt/disk /home/martin/disk nfs defaults 0 0
Pokud byste navíc nechtěli adresář připojovat automaticky po startu počítače, ale naopak ručně obyčejným uživatelem, stačí upravit řádek takto:
192.168.1.1:/mnt/disk /home/martin/disk nfs user,noauto 0 0
Vlastní připojení adresáře pak provedete zadáním příkazu:
mount /home/martin/disk
Ať už s právy uživatele root nebo bez nich, v závislosti na předchozím nastavení.
Zatím jsme použili pouze výchozí hodnoty NFS, a tak se pojďme nyní podívat na některé další možnosti.
Pokročilé možnosti nastavení
Úpravou souboru /etc/exports můžete nastavit práva pro zápis (read/write - rw) a také se často hodí použít synchronní přenos (sync) proti často výchozímu asynchronnímu přenosu (async).
/mnt/disk (rw,sync)
Pozor, při sdílení adresáře pro zápis je nutné nastavit odpovídající práva na tomto adresáři. Obvykle stačí pro rekurzivní změnu oprávnění na serveru zadat např. následující:
chmod -R a+w /mnt/disk
Při synchronním přenosu dochází k okamžitému zápisu na zařízení ihned při započetí kopírování. Asynchronní přenos naopak zapisuje "kdy se mu to zlíbí" (podle zátěže zařízení), nejpozději však v okamžiku odpojení (volání umount) zařízení.
Zatím adresář sdílíme všem počítačům, a nyní dokonce pro zápis. To není jistě nejbezpečnější, a tak omezme přístup pouze pro určité počítače. Pokud bychom chtěli umožnit zápis počítači s IP adresou 192.168.1.10 a zbytku této sítě nastavit přístup pouze pro čtení, pak bychom řádek upravili takto:
/mnt/disk 192.168.1.10(rw,sync) 192.168.1.0/255.255.255.0(ro)
Samozřejmě, že kromě IP adresy můžete uvádět také jména počítačů, podmínkou ovšem je, aby server jméno klienta znal (ať už třeba z DNS nebo ze souboru /etc/hosts). Také si všimněte vymezení sítě pomocí její masky. V případě, že budete chtít používat jména počítačů, pak můžete také používat hvězdičkovou konvenci (např. *.firma.cz), s IP adresou tato kombinace ale není vhodná.
Pokud se navíc chcete zbavit více či méně otravné hlášky zobrazované při znovunačtení pravidel souboru /etc/exports a informující o použití výchozí možnosti no_subtree_check, stačí jen volbu přidat na odpovídající místa:
/mnt/disk 192.168.1.10(rw,sync,no_subtree_check) 192.168.1.0/255.255.255.0(ro,no_subtree_check)
Tato možnost je výchozí a její přidání je tak pouze kosmetickou změnou nastavení. Zapnutí této možnosti může zvýšit rychlost přenosu dat, ta je u NFS i tak docela vysoká.
A jak to je s přenosem práv? Pokud na klientském počítači pod obyčejným uživatelem vytvoříte např. adresář, budou tomuto adresáři nastavena práva právě pro uživatele, který adresář vytvořil. Tady žádná změna není. Na druhou stranu platí, že není root jako root, a tak pokud tento adresář na klientovi vytvoříte s právy místního uživatele root, pak bude tento uživatel namapován na uživatele nobody na serveru. Pokud byste toto chování chtěli změnit a mapovat místního uživatele root na vzdáleného uživatele root, pak se to provádí přidáním volby no_root_squash, např. takto:
/mnt/disk 192.168.1.10(rw,sync,no_subtree_check,no_root_squash)
Tato volba je však bezpečnostním rizikem a tak je lépe se jí vyhnout.
Zkuste NFS a sami uvidíte, zda vám bude vyhovovat, nebo ne. Jistě vás mile překvapí rychlostí i jednoduchým nastavením sdílených adresářů. Pokud chcete přenést data mezi dvěma linuxovými systémy, je NFS jasnou (nikoliv však jedinou) možností, jak to provést.