{ }
menu zespół linki Logowanie
Stabilny hosting
BSDGuru zawdzięcza
firmie Datanet.pl
Hosting BSDGuru.org - DataNet.pl

Sieciowy system plików NFS


Wolne tłumaczenie rozdziału www.freebsd.org/handbook poświęconego NFS.

NFS

Spośród wielu systemów plików, wspieranych przez FreeBSD, rozróżniamy Network File System (Sieciowy System Plików), znany bardziej pod skrótem NFS. Pozwala on użytkownikom na współdzielenie katalogów oraz plików, oczywiście poprzez sieć. NFS stwarza nam możliwość dostępu do plików i katalogów prawie tak, jakbyśmy pracowali na lokalnym systemie plików.

Oto jedne z ważniejszych zalet NFS:

  • Stacje robocze używają mniej przestrzeni na swoich dyskach, jeśli współdzielone oprogramowanie pobierają poprzez sieć, z serwera.
  • Nie zachodzi potrzeba, by użytkownicy mieli osobne katalogi domowe na każdej maszynie w sieci. Katalogi /home można ustawić na serwerze NFS, co uczyni je osiągalnymi poprzez sieć.
  • Urządzenia przechowujące dane, jak dyski elastyczne, CDROM'y, czy też napędy ZIP, mogą być współużywane przez inne maszyny w sieci. Może to zredukować liczbę wymiennych napędów w sieci.

Jak działa NFS?

NFS składa się minimalnie z dwóch części; serwera oraz minimalnie jednej stacji klienckiej. Klienci mają dostęp do plików składowanych na serwerze. Aby działo się tak w rzeczywistości, niezbędnym staje się uruchomienie kilku procesów:

demon opis
nfsd Demon obsługujący zapytania klientów NFS.
mountd Demon montowania NFS troszczący się o zapytania przesłane do niego przez nfsd.
portmap Demon portmapper pozwala klientom NFS odkryć, który port serwera jest w użyciu przez NFS.

Klient może także uruchomić demona. Nazwa tego demona to nfsiod. Potrafi on obsługiwać zapytania które przychodzą z serwera NFS. Uruchamianie nfsiod jest jedynie opcją, czyli nie jest konieczne, aczkolwiek daje lepsze osiągi. Aby dowiedzieć się więcej o nfsiod zobacz stronę podręcznika systemowego man nfsiod(8).

Konfigurowanie NFS.

Konfiguracja NFS jest relatywnie prostą czynnością. Dzięki niewielkim modyfikacjom pliku /etc/rc.conf, procesy które muszą być uruchomione, mogą zostać obudzone podczas startu systemu.

Upewnij się, że w pliku /etc/rc.conf, na serwerze NFS, zostały skonfigurowane poniższe opcje

portmap_enable="YES"
nfs_server_enable="YES"
mountd_flags="-r"

mountd uruchamia się kiedykolwiek, gdy serwer NFS jest uruchomiony.

Upewnij się, że na komputerze będącym klientem masz wprowadzoną poniższą opcję
w pliku /etc/rc.conf:

nfs_client_enable="YES"

Plik /etc/exports wyszczególnia, które systemy plików NFS jest w stanie udostępnić (czasami jest to określane jako "share" - współdzielone). Każda linia pliku /etc/exports określa dla których maszyn, które katalogi mogą być udostępnione. Można skonfigurować również warunki, na jakich będzie odbywało się połączenie. Jest bardzo wiele opcji, których można tu użyć, ale wymienimy tylko nieliczne. Możesz łatwo dowiedzieć się o pozostałych, czytając stronę man dotyczącą exports(5).

Oto kilka przykładów opcji pliku /etc/exports:
Poniższe opcje dają generalną wiedzę, pozwalającą na eksportowanie systemu plików, jednakże ustawienia mogą różnić się w zależności od konfiguracji Twojej sieci. Zobaczysz na przykład, jak wyeksportować /cdrom trzem maszynom w sieci, mającym tš samš domenę jako serwer (stąd brak nazwy domenowej dla każdego) lub mającym wpisy w Twoim pliku /etc/hosts. Flaga -ro sprawia, że system plików eksportowany jest tylko do odczytu. Z tą flagą, system zdalny nie będzie miał możliwości zapisywania żadnych zmian na eksportowanym systemie plików.

/cdrom -ro host1 host2 host3

Poniższe linie eksportują /home do trzech maszyn, rozpoznawanych po ich adresie IP. Jest to użyteczna konfiguracja w przypadku, gdy dysponujesz prywatną siecią bez serwera DNS. Opcjonalnie plik /etc/hosts może zostać skonfigurowany, by uzyskać wewnętrzne nazwy; proszę zobaczyć hosts(5), by uzyskać więcej informacji. Flaga -alldirs zezwala, aby podkatalogi były punktami montowania. Innymi słowy, nie zamontuje to katalogów, ale pozwoli zamontować jedynie te, które są wymagane, lub niezbędne.

/home -alldirs 10.0.0.2 10.0.0.3 10.0.0.4

Poniższa linia eksportuje /a, dlatego dwaj klienci, z różnych domen, mają dostęp do systemu plików. Natomiast flaga -maproot=root zezwala root'owi systemu zdalnego zapisywać pliki w wyeksportowanym systemie plików jako root. Jeśli flaga -maproot=root nie jest ustawiona, to nawet jeśli użytkownik ma prawa root'a na systemie zdalnym, nie będzie miał możliwości modyfikowania na nim plików.

/a -maproot=root host.example.com box.example.com

Aby klient miał dostęp do eksportowanego systemu plików, musi mieć do tego prawo. Upewnij się dlatego, że został dopisany do pliku /etc/exports.

W /etc/exports każda linia przedstawia informację o jednym systemie plików oraz o jednym komputerze. Ten zdalny komputer może być wymieniony tylko raz na jeden system plików, ponadto może mieć tylko jedno domyślne wejście. Dla przykładu, załóżmy, że /usr jest pojedynczym systemem plików. Poniższe /etc/exports będą poprawne:

/usr/src client
/usr/ports client

Jeden system plików, /usr, opisany jest dwoma liniami, z których każda dotyczy tego samego komputera klienta. Poprawną formą w tej sytuacji jest:

/usr/src /usr/ports client

Właściwości jednego systemu plików, eksportowane do danego komputera, wszystkie muszą znaleźć się w jednym pliku. Linie, w których nie został podany komputer klient, są traktowane jako pojedynczy komputer. Limituje to nieco możliwości eksportowania, jednakże dla niektórych nie stanowi to problemu.

Poprawnym jest poniższy przykład, gdzie /usr i /local są lokalnymi systemami plików:

# eksportuj src oraz ports do klienta client01 i client02, ale tylko
# client01 ma przywileje root'a
/usr/src /usr/ports -maproot=root client01
/usr/src /usr/ports client02
# maszyny klientów mają prawa root'a i mogą montować gdziekolwiek w /exports
# wszyscy mogą montować /exports/obj w trybie do odczytu
/exports -alldirs -maproot=root client01 client02
/exports/obj -ro

Musisz zrestartować demona mountd, aby zmiany w pliku /etc/exports zostały zauważone. Może to zostać wykonane, przez wysłanie sygnału hangup do procesu mountd:

# kill -HUP `cat /var/run/mountd.pid`

Alternatywnie możesz uruchomic ponownie FreeBSD, co na pewno ustawi wszystko poprawnie. Nie musisz jednak tego robić. Uruchom te komendy jako root:

Na serwerze NFS:

FreeBSD# portmap
FreeBSD# nfsd -u -t -n 4
FreeBSD# mountd -r

Na kliencie NFS:

FreeBSD# nfsiod -n 4

Teraz wszystko powinno być gotowe by zamontować zdalny system plików. W poniższym przykładzie, serwer będzie się nazywał server, a klient client. Jeśli masz zamiar raczej tymczasowo zamontować katalog, lub
robisz to w celach testowych, wpisz tylko poniższą komendę jako root jednego z klientów:

FreeBSD# mount server:/home /mnt

Zamontuje to katalog /home na serwerze w katalogu /mnt u klienta. Jeśli wszystko zostało skonfigurowane poprawnie powinieneś mieć możliwość wejścia do kagalogu /mnt, na kliencie, i zobaczenia wszystkich plików, które są na serwerze.

Jeśli chcesz automatycznie montować systemy plików, za każdym razem, przy uruchomieniu komputera, dopisz poniższą linię do pliku /etc/fstab. Oto przykład:

server:/home /mnt nfs rw 0 0

Strona podręcznika man polecenia fstab(5) opisuje wszystkie możliwe opcje.

Użycie praktyczne

NFS ma wiele praktycznych zastosowań. Wiele z najpowszechniejszych zostało wypisanych poniżej:

  • Ustawienie kilku maszyn, by współdzieliły się napędem CDROM lub innym nośnikiem. Jest to metoda tańsza od tradycyjnych oraz pomagająca instalować oprogramowanie na kilku komputerach jednocześnie.

  • W wielkich sieciach, może okazać się bardziej poręcznym skonfigurowanie serwera NFS i umieszczenia na nim katalogów /home. Przez to użytkownicy będą mieli zawsze ten sam katalog /home, niezależnie z którego komputera się zalogują.
  • Kilka maszyn może mieć wspólny katalog /usr/ports/distfiles. W ten sposób nie zachodzi potrzeba wielokrotnego pobierania plików z Internetu, gdy chcemy instalować takie samo oprogramowanie na wielu maszynach.

amd

amd (automatycznie montujący demon) jest użytecznym demonem, montującym system plików za każdym razem, gdy jest do niego dostęp. Systemy plików które są nieaktywne przez pewien określony czas zostają automatycznie odmontowane przez amd. Używanie amd stwarza alternatywne możliwości w stosunku do stałych montowań, które to powinny być wypisane w pliku /etc/fstab.

amd odgrywa rolę serwera NFS dla katalogów /host oraz /net. Kiedy plik jest osiągalny przez jeden z tych katalogów, amd rozgląda się w poszukiwaniu właściwego dla niego zdalnego punktu montowania. Następnie amd automatycznie montuje dane pliki. /net używany jest do montowania eksportowanego systemu plików z danego adresu IP, podczas gdy /host używany jest do montowania eksportów ze zdalnego komputera.

Dostęp do pliku w /host/foobar/usr oznacza dla amd tyle, że powinien starać się zamontować eksportowany /usr na komputerze foobar.

Przykład - montowanie z amd

FreeBSD% showmount -e foobar

Exports list on foobar: (Eksportowane przez foobar:)

/usr 10.10.10.0
/a 10.10.10.0

FreeBSD% cd /host/usr/foobar

Jak to ukazano w przykładzie, showmount pokazuje /usr jako eksport. Gdy zmieniamy katalog do /host/foobar/usr, amd stara się przetłumaczyć sobie nazwę foobar na numer IP i automatycznie zamontować zadany eksport.

amd może być wystartowany przez rc.conf dzięki umieszczeniu poniższej linii w pliku /etc/rc.conf:

amd_enable="YES"

Dodatkowo istnieje możliwość ustawienia pewnych flag. Domyślne to:

amd_flags="-a /.amd_mnt -l syslog /host /etc/amd.map /net /etc/amd.map"

W pliku /etc/amd.map zdefiniowane są domyślne ustawienia eksportów. Plik /etc/amd.conf opisuje bardziej wymyślne ustawienia amd.

Po więcej informacji sięgnij do manuala amd(8) oraz amd.conf(5).

Problemy integracji z innymi systemami.

Niektóre karty sieciowe typu ISA, mają ograniczenia, które mogą prowadzić do pewnych problemów, zwłaszcza z NFS. Nie jest to właściwością systemu FreeBSD, aczkolwiek jego też dotyczy.

Problem prawie zawsze występuje, gdy komputery typu PC są połączone siecią z potężnymi maszynami, takimi jak na przykład komputerami robionymi przez Silicon Graphics, Inc., Sun Microsystems, Inc. Montowanie NFS działa, pewne operacje również sprawują się poprawnie, ale czasem niespodziewanie serwer staje się nieosiągalny dla klienta. W międzyczasie wszystko poza tym połączeniem działa poprawnie. Wszystko rozgrywa się po stronie klienta, jeśli klient działa w systemie FreeBSD lub jest stacją roboczą. W pewnych systemach, po wystąpieniu tego problemu, nie istnieje możliwość normalnego wyłączenia
systemu. Jedynym wyjściem pozostaje zresetowanie klienta.

Poprawnym rozwiązaniem problemu jest zaopatrzenie komputera z FreeBSD w kartę sieciową mającą lepsze osiągi. Jeśli system FreeBSD jest serwerem, włącz opcję -w=1024 na montowaniu od klienta. Jeśli FreeBSD jest klientem, zamontuj NFS z opcją -r=1024. Opcje te można włączać używając do tego czwartego pola w pliku /etc/fstab, dla automatycznego montowania, lub używając flagi -o dla manualnego montowania.

Należy wspomnieć, że czasem występuje inny problem, często mylony z powyższym. Problemem jest to, że serwer oraz klient są w różnych sieciach. W takim przypadku należy się upewnić, że routery przekazują niezbędne informacje UDP.

W poniższym przykładzie, fastws jest komputerem (o wysokiej klasy sprzęcie - kartach sieciowych), a freebox jest komputerem FreeBSD (na słabym sprzęcie - kartach sieciowych). Także /sharedfs zostaną wyeksportowane przez NFS, a /project będzie punktem montowania u klienta, dla eksportowanego systemu plików.

Przykłady dla systemu FreeBSD (freebox), będącego klientem: w /etc/fstab na freebox'ie:
fastws:/sharedfs /project nfs rw,-r=1024 0 0

Jako ręczna komenda wydana przez administratora freebox'a:
FreeBSD# mount -t nfs -o -r=1024 fastws:/sharedfs /project

Przykłady dla systemu FreeBSD pełniącego funkcje serwera: w /etc/fstab na fastws
freebox:/sharedfs /project nfs rw,-w=1024 0 0

Jako manualna komenda na fastws:
FreeBSD# mount -t nfs -o -w=1024 freebox:/sharedfs /project

Prawie każda karta sieciowa 16 bitowa zezwoli na wykonywanie operacji bez powyższych restrykcji, nałożonych na rozmiary odczytu i zapisu.

Dla zainteresowanych prezentuję opis tego co dzieje się, gdy występuje błąd, będzie on jednocześnie wyjaśniał dlaczego owy błąd jest nieodwracalny. NFS typowo pracuje z "blokami" o rozmiarach
8K (jeśli może fragmentuje na mniejsze). Maksymalny pakiet ethernetowy wynosi około 1500 bajtów, NFS dzielony jest dlatego na kilka mniejszych ethernetowych pakietów. Jednakże jest on wciąż jednym pakietem (dla wyższych warstw kodu) i musi zostać otrzymany w postaci scalonej i przedstawiony jako jednostka. Sprzęt wysokiej klasy może wypompowywać z siebie pakiety, w skład których wchodzą pakiety NFS, jeden po drugim. Na kartach o mniejszej wydajności, wcześniejsze pakiety nachodzą na późniejsze, zanim te dotrą do punktu przeznaczenia. Uniemożliwia to późniejsze scalenie pakietów. W rezultacie komputer klient czeka i próbuje ponownie, ale niestety próbę ponawia z 8K jednostką i proces powtarza się w nieskończoność.

Przez trzymanie jednostki poniżej limitu jednostek ethernetowych, upewniamy się, że każdy pakiet otrzymany może zostać rozpoznany jako samodzielny, co przeciwdziała konfliktom.

Problem ze zbyt szybkim wysyłaniem może wciąż wystąpić, gdy sprzęt o wysokich osiągach wysyła dane do komputera PC, ale o lepszych kartach sieciowych. Tego typu nadbiegi nie są eliminowane przez działanie na jednostkach NFS. Kiedy występuje tego typu problem, jednostki których to dotyczy, zostaną ponownie przetransmitowane, istnieje wówczas szansa, że zostaną otrzymane i połączone.

Id: Aleksander Fafuła  2003-06-19 

mlodszy, pt., 18/07/2008 - 23:17