NFS — Network File System, czyli pingwiny sobie rozmawiają
29 grudnia 2007, Vighter
Obecnie w niemal każdym domu znajduje się kilka komputerów. Czy jednak jesteśmy skazani na żmudne nagrywanie danych na płyty, gdy chcemy je przenieść na inny komputer? Okazuje się, że wcale tak nie musi być - wystarczy skorzystać z NFS!
Autor: Maciej Gwizdała
Network File System (z ang. Sieciowy System Plików) umożliwia udostępnianie danych pomiędzy komputerami z systemami uniksowymi. Nie ma więc problemu, jeśli w domu mamy GNU/Linuksa, BSD oraz inne systemy z tej rodziny.
Oczywiście NFS nie jest jedynym rozwiązaniem tego typu. Istnieje również SAMBA współpracująca z systemami Windows oraz SSHFS, czyli system plików wykorzystujący bezpieczne połączenie, o którym pisał szerzej michuk w swoim artykule “Sztuczki z SSH”.
Poniższy artykuł został podzielony na trzy zasadnicze części:
- Konfiguracja serwera i klienta za pomocą trybu graficznego
- Konfiguracja serwera i klienta za pomocą konsoli
- Automatyczne montowanie udostępnionego zasobu
Cz. I: Instalacja i konfiguracja za pomocą konsoli
Po pierwsze musimy zainstalować serwer NFS, który będzie zajmował się udostępnianiem danych między komputerami. W Debianie i pochodnych robimy to w następujący sposób:
sudo apt-get install nfs-kernel-server nfs-common portmap
W innych dystrybucjach korzystamy z odpowiedniego menedżera pakietów, aby zainstalować NFS i portmap. Teraz powinniśmy wyedytować plik /etc/exports - ja skorzystam z konsolowego edytora nano:
sudo nano /etc/exports
Do otwartego dokumentu powinniśmy wpisać np.:
/home/pub 192.168.0.4(rw)
Może nieco przybliżę składnię w tym pliku.
/home/pub - To folder, którego zawartość chcemy udostępnić.
192.168.0.4 - Tutaj podajemy adres IP komputera, który powinien mieć dostęp do naszego udostępnianego katalogu.
(rw) - rw jest skrótem od read/write, więc komputer, któremu udostępniamy zasób może dokonywać w nim zmian. Jeśli sobie tego nie życzymy, możemy zastosować atrybut tylko do odczytu - (ro).
Zapisujemy zawartość i wykonujemy operacje:
sudo /etc/init.d/nfs-kernel-server restart
sudo /etc/init.d/portmap restart
sudo exportfs -a
Te polecenia restartują serwer NFS i pobierają konfigurację umieszczoną w /etc/exports.
Serwer jest już gotowy, warto więc zająć się konfiguracją komputera, któremu chcemy udostępnić dane. Instalujemy na nim klienta NFS poprzez:
sudo apt-get install nfs-common portmap
Należy teraz stworzyć folder, do którego zamontujemy nasz zasób:
sudo mkdir /mnt/pub
Na koniec pozostaje już tylko zamontować udostępniony folder:
sudo mount -t nfs 192.168.0.2:/home/pub /mnt/pub
192.168.0.2 to oczywiście adres serwera udostępniającego pliki.
Jeżeli już nie potrzebujemy naszego zasobu, wpisujemy polecenie:
sudo umount /mnt/pub
Cz. II: Instalacja i konfiguracja za pomocą trybu graficznego
Aby udostępnić zasób, należy kliknąć prawym przyciskiem myszy na folderze i z menu wybrać “Udostępnij Folder”. Pojawi się takie okienko:

Wciskamy przycisk “Dodaj”. W następnym oknie wpisujemy adres IP komputera, któremu chcemy udostępnić zasób, zatwierdzamy wybór.

Gdy nie mamy zainstalowanego serwera NFS, system sam zadba o jego zainstalowanie.Aby zamontować zasób na kliencie, należy już skorzystać z konsoli (co zostało opisane nieco niżej).
Cz. III: Automatyczne montowanie
Od dawna wiadomo, że człowiek jest istotą leniwą i nie chce mu się za każdym razem wpisywać tych samych komend, aby montować zasób. Warto więc sprawić, aby zajął się tym system.
W tym celu należy otworzyć plik /etc/fstab
sudo nano /etc/fstab
a następnie dopisać do niego linijkę:
192.168.0.2:/home/pub /mnt/pub nfs rw,hard,intr 0 0
Myślę, że warto objaśnić dwie opcje: hard oraz intr. Pierwsza z nich odpowiada za zawieszenie dostępu do danych, gdy serwer ulegnie awarii, natomiast druga umożliwia zabicie zawieszonego procesu poprzez komendę kill.
Linki do stron o NFS:
Korekta: oZz
Liczba komentarzy: 20
W komentarzach możesz używać prostych znaczników HTML. Przykłady:
- Link: <a href="jaklinux.org">Linux dla każdego</a>,
- Wytłuszczenie: <strong>tekst pogrubiony</strong>,
- Kursywa: <em>tekst pochylony</em>,
- Przekreślenie: <strike>
tekst przekreślony</strike>, - Kod: <code>
printf("blok kodu");</code>, - Cytat: <blockquote>cytat</blockquote>




Bardzo dobry artykuł, ale moim zdaniem należało jeszcze wspomnieć o wykorzystaniu NFS w Windowsie(tzn. Subsystem for UNIX-based Applications i Windows Services for UNIX). Nawet niekoniecznie opisywać krok po kroku, ale wspomnieć o takiej możliwości.
Pozdrawiam
A ja myślę, że wręcz powinno być to opisane. Bo, niestety, często jeśli choć jeden komputer w domu ma Linuksa to dobrze
Do łączenia w sieć Windows i Linuksa lepsza jest chyba jednak SAMBA.
Fakt. Windows chyba potrzebowałby cygwina(?) żeby obsłużyć NFSa. Mój brat na szczęście poznał się na potędze wolnego oprogramowania
Nie. Patrz - pierwszy komentarz.
U mnie w domu rozwiązane jest to jeszcze inaczej
Jest mój desktop i brata laptop. Na obu jest Windows i Linux i jak ktoś chce coś to łączy się poprzez sftp i nie ma problemu.
wow! super! i tym sftp laczy sie do windows…
Dodaj jeszcze, że można udostępniać napędy CD/DVD. Nie trzeba kopiować z CD/DVD na HDD a potem na drugi komputer- można zrobić to bezpośrednio.
W części III po skonfigurowania pliku fstab, dobrze jest wczytać nowe informacje poleceniem mount -a ;]
może warto byłoby dodać, iż podanie adresu 192.168.0.0/24 pozwala na danie praw dostępu wszystkim komputerom w sieci lokalnej…
Wydaje mi się że w artykułach powinno się raczej pisać zamiast
“sudo apt-get install nfs-kernel-server nfs-common portmap”
“potrzebujemy pakietów :nfs-kernel-server nfs-common portmap.”
A polecenia tego typu:
“sudo nano /etc/exports”
zastępowac opisem że otwieramy plik w ulubionym edytorze tekstu.
Opis graficznej konfiguracji również powinien zawierać notatkę o środowisku graficzny i uzytym distro.
W opisie powinno się znaleść,że jest to instrukcja na bazie debiana/ubuntu czy czegoś tam.
Taka tam sugestia.
Ogólnie poradnik spoczko
Właśnie się zabierałem za konfigurację NFS. Teraz już nawet nie muszę tego szukać
Żeby zadziałało należy wyedytować /etc/hosts.allow oraz hosts.deny oraz uruchomic portmap na komputerze kliencie.
Może komuś chciałoby się porównać wydajnośc w kopiowaniu plików przez NFS i Sambę?
Wydajność zdecydowanie przemawia za nfs, u mnie przy kopiowaniu plików 700mb jest o połowę krócej. Na swich’u ma diody pokazujące obciążenie sieci to przy sambie 40% a nfs to okolo 90%…. co się przekłada na około 5-6mb/s na sambie i 10-11mb/s na nfs.
Porównanie robiłem bez jakiś specjalnych optymalizacji obu protokołów, praktycznie standardowa instalacja.
U mnie samba nie działa zbyt dobrze, trzeba będzie przetestować NFS
No wszystko fajnie, tylko może jakaś krótka informacja nt. praw dostępu jakie pojawiają się na kliencie przy tego typu najprostszej instalacji ? Czy nie jest tak, że klient interpretuje uidy plików jako lokalne i należy na to uważać. To tak na marginesie
SMB jest duuużo wolniejsze od NFS-a
NFS świetnie spisuje się przy swapie w ramdysku, udostępnionym przez sieć. Swap taki działa kilkukrotnie (nawet 10-cio krotnie) wydajniej, niż najlepiej skonfigurowana nawet macierz. Jeżeli macie maszynę z dużą ilością ramu i chcecie “udostępnić” ten ram innym maszynom, zróbcie swapa w pliku na ramdysku i udostępnijcie przez NFS.
@ptr128: możesz rozwinąć ten pomysł odnośnie SWAP na ramdysku w sieci? Nie jestem pewien, czy dobrze wszystko rozumiem, możesz wyjaśnić krok po kroku jak miałoby to wyglądać?
ramdysk działa z szybkoscia pamieci wiec przecietnie na obecnych domowych powyzej 1GB co przy kartach sieciowych 1GB pozwoli spory procent tej szybkosci wyciagnać, a co do macierzy to obecnie da sie wyciagnac jakies 2GB/s na niektorych (drogiiiich).