Sr-07-lab-1.0
Network File System
Network File System to rozproszony system plików stworzony przez firmę Sun Microsystems.
Konfiguracja klienta
Zanim klient będzie w stanie odwołać się do zasobów zdalnego systemu, musi poznać listę udostępnianych zasobów. Może to wykonać za pomocą komendy showmount(8):
# showmount -e localhost mount clntudp_create: RPC: Program not registered # showmount -e unixlab Export list for unixlab: /home lab1,lab2,lab3
Przełącznik -e (od ang. export) pobiera listę zasobów (katalogów) ze wskazanego komputera czyli katalogów eksportowanych przez ten system. W powyższym przypadku komputer klienta nie udostępnia żadnego katalogu, bo nie został uruchomiony jeszcze serwer NFS. Implementacja serwera NFS jest oparta na mechanizmie RPC, a komunikat pochodzi od usługi portmap wskazując, że nie ma zarejestrowanej wymaganej usługi RPC. Komputer unixlab udostępnia katalog /home i udostępnia go komputerom lab1, lab2, lab3.
Klient systemu NFS jest wbudowany w jądro systemu operacyjnego. Uzyskanie dostępu do zdalnego katalogu wymaga dołączenia zdalnego systemu plików analogicznie do tego, jak wykonywane jest to lokalnie. Montowanie katalogu wymaga użycia komendy mount(8):
mount system_plików katalog_docelowy
Przykładem zastosowania komendy mount jest dołączenie systemu plików z dyskietki lub napędu CD:
# mount /dev/fd0 /mnt
W przypadku dysków CD należy użyć nazwy /dev/cdrom. Katalog /mnt bardzo często wykorzystywany jest do tymczasowego dołączania systemów plików. Po poprawnym wykonaniu komendy mount zawartość katalogu /mnt powinna być tożsama z zawartością katalogu /home na serwerze unixlab. Przetwarzanie plików w katalogu /mnt może być realizowane w taki sam sposób jak innych plików lokalnych.
Odłączenie systemu plików, zarówno lokalnego jak i zdalnego, wykonywane jest komendą umount(8):
# umount /mnt
Parametrem komendy może być zarówno nazwa katalogu jak i nazwa systemu plików. Katalog musi być niewykorzystywany, tzn. żaden proces nie może mieć otwartego pliku z podkatalogów tego katalogu i żaden proces nie może mieć skojarzonego żadnego z podkatalogów jako swojego katalogu bieżącego.
Dołączając system plików można wskazać jakiego jest on typu. System Linux obsługuje m.in. następujące systemy plików:
ext2- standardowy system plików systemu Linux
ext3- rozszerzona o księgowanie wersja systemu
ext2 vfat- system plików FAT z obsługą długich nazw plików
ntfs- system plików NTFS z Windows NT/200x/XP
iso9660- system plików z dysków CD
udf- system plików UDF (np. DVD-ROM)
nfs- sieciowy system plików NFS
smbfs- system plików SMB
reiserfs- system plików ReiserFS
xfs- system plików XFS
Dołączenie systemu plików z dyskietki formatowanej w systemie Windows można więc wykonać następująco:
# mount -t vfat /dev/fd0 /mnt
W przypadku systemu NFS identyfikacja systemu plików wymaga wskazania zdalnego serwera i katalogu na tym serwerze. Dołączenie katalogu /home z systemu unixlab można więc zrealizować następująco:
# mount -t nfs unixlab:/home /mnt
Dołączanie systemów plików może być parametryzowane dodatkowymi opcjami definiowanymi przełącznikiem -o. Oto krótka lista ważniejszych opcji montowania:
ro- tryb tylko do odczytu
atime- włącznie aktualizacji daty ostatniego dostępu
dev- włączenie interpretacji plików specjalnych reprezentujących urządzenia
exec- zezwolenie na wykonywanie programów
suid- włączenie interpretacji bitów SUID i SGID
sync- synchroniczne wykonywanie operacji dostępu
async- asynchroniczne wykonywanie operacji dostępu
remount- zmiana parametrów montowania
Niektóre opcje występują również w wersjach negujących ich działanie z dodatkowym prefiksem no, np. noatime, nodev, noexec, nosuid. Dołączenie zdalnego systemu plików w trybie tylko do odczytu można więc wykonać następująco:
# mount -o ro unixlab:/home /mnt
W przykładzie pominięto specyfikację typu systemu plików, gdyż wynika ona bezpośrednio z formatu reprezentacji urządzenia (nazwa_komputera:katalog).
System plików NFS obsługuje wiele dodatkowych opcji montowania systemu plików. Pełną listę można znaleźć na stronie pomocy systemowej nfs(5). Oto ważniejsze z nich:
hard- nieprzerwane odwoływanie się do serwera w przypadku awarii
soft- sygnalizacja błędu na poziomie aplikacji w przypadku awarii serwera
intr- umożliwia przerwanie operacji wejścia/wyjścia poprzez sygnał w przypadku montowania miękkiego (opcja
soft) tcp- połączenie z serwerem za pośrednictwem protokołu TCP
rsize=n- rozmiar bufora odczytu z serwera NFS
wsize=n- rozmiar bufora zapisu z serwera NFS
timeo=n- czas oczekiwania na odpowiedź przed retransmisją żądania
retrans=n- maksymalna liczba retransmisji przed zgłoszeniem błędu w trybie
soft acreqmin=n- minimalny czas przechowywania informacji o plikach zwykłych w pamięci podręcznej
acreqmax=n- maksymalny czas przechowywania informacji o plikach zwykłych w pamięci podręcznej
acdirmin=n- minimalny czas przechowywania informacji o katalogach w pamięci podręcznej
acdirmax=n- maksymalny czas przechowywania informacji o katalogach w pamięci podręcznej
noac- całkowite wyłączenie pamięci podręcznej dla atrybutów plików
Konfiguracja serwera
Konfiguracja serwera jest bardzo prosta i wymaga modyfikacji pliku konfiguracyjnego /etc/exports. Plik ten zawiera listę katalogów, które będą udostępniane innym systemom. Oto przykład takiego pliku:
/home lab1(rw)
Po nazwie katalogu znajduje się lista komputerów, które będą miały prawo odwoływania się do tego katalogu. W nawiasach znajdują się dodatkowe opcje eksportowania takiego katalogu. Lista komputerów może zawierać nazwy w postaci domenowej (również z użyciem znaków uogólniających), adresy IP komputerów (i adresy sieci), odwołania do grup sieciowych. Oto przykład bardziej rozbudowanej konfiguracji:
/home *.cs.put.poznan.pl(ro) lab?.cs.put.poznan.pl(rw) /usr 192.168.0.0/255.255.255.0(async,rw) /export @lab
W przykładzie katalog /home został udostępniony wszystkim komputerom z domeny cs.put.poznan.pl do odczytu i wszystkim komputerom o nazwach zaczynających się od lab z tej samej domeny w trybie do zapisu. Katalog /usr jest udostępniany wszystkim komputerom o adresach od 192.168.0.1 do 192.168.0.254 w trybie asynchronicznym. Katalog /export udostępniany jest wszystkim komputerom z grupy sieciowej lab (zobacz dalej). Szczegółowy opis dostępnych opcji można znaleźć na stronie pomocy systemowej exports(5).
Uruchomienie serwera
wymaga wystartowania odpowiednich procesów usługowych. System NFS implementowany jest poprzez 2 protokoły (mountd i nfs), stąd 2 programy usługowe. Po uruchomieniu pierwszego z nich:
# rpc.mountd
będzie możliwe odpytanie serwera o listę dostępnych zasobów:
# showmount -e Export list for localhost: /export @lab /home lab?.cs.put.poznan.pl,*.cs.put.poznan.pl /usr 192.168.0.0/255.255.255.0
Próba dołączenia systemu plików skończy się jednak zawieszeniem operacji mount. Do poprawnej pracy niezbędny jest drugi proces usługowy:
# rpc.nfsd
odpowiedzialny za właściwy dostęp do zawartości poszczególnych plików.
Rekonfiguracja
Każda zmiana wprowadzona do pliku /etc/exports wymaga powiadomienia procesów usługowych serwera NFS. Można to zrobić wysyłając sygnał HUP do obu procesów usługowych:
# ps -ax ... # kill -HUP 2345 2456
Wartości 2345 i 2456 są identyfikatorami procesów rpc.mountd i rpc.nfsd. Można również wykorzystać do tego celu polecenia pkill(1):
# pkill -HUP rpc.mountd # pkill -HUP rpc.nfsd
lub killall(1):
# killall -HUP rpc.mountd rpc.nfsd
Niektóre implementacje serwera NFS udostępniają komendę exportfs, która m.in. umożliwia aktualizację konfiguracji serwera:
# exportfs -r
Powyższe polecenie umożliwia również dynamiczne dodawanie i usuwanie katalogów przeznaczonych do udostępnienia, co ilustruje poniższy przykład:
# exportfs <== działa analogicznie do showmount -e /usr 192.168.0.0/255.255.255.0 /home *.cs.put.poznan.pl /home lab?.cs.put.poznan.pl # exportfs -u '*.cs.put.poznan.pl:/home' # exportfs -v /usr 192.168.0.0/255.255.255.0(rw,async,wdelay,root_squash) # exportfs -o ro lab1.cs.put.poznan.pl:/home # exportfs -v /usr 192.168.0.0/255.255.255.0(rw,async,wdelay,root_squash) /home lab1.cs.put.poznan.pl(ro,async,wdelay,root_squash)
Przełącznik -u umożliwia usuwanie katalogu z listy udostępnianych katalogów. Przełącznik -v włącza wyświetlanie dodatkowych informacji (np. opcji eksportowania katalogu). Przełącznik -o powoduje ustawienie opcji eksportowanego katalogu.
Grupy sieciowe
Ograniczanie dostępu do katalogów na serwerze NFS może się odbywać w oparciu o grupy sieciowe. Grupa sieciowa konfigurowana jest w pliku /etc/netgroup i składa się z trójek wartości:
(komputer, użytkownik, domena)
Każda z tych wartości może być pominięta. Z punktu widzenia zastosowania grup sieciowych do konfiguracji systemu NFS najważniejsza jest możliwość definiowania grup komputerów. Poniższy przykład pokazuje definicję grupy lab składającej się z komputerów lab1, lab2, lab3:
lab (lab1, , ) (lab2, , ) (lab3, , )
W pliku konfiguracyjnym /etc/exports odwołania do grup sieciowych poprzedzone są znakiem @:
/home @lab(rw,async,no_root_squash)
Zadania
- Dołącz wybrany system plików z dyskietki lub CD-ROMu do katalogu
/mnt. - Dołącz wybrany system plików NFS do katalogu
/mnt. - Skonfiguruj serwer NFS udostępniając przykładowy katalog, np.
/test. Udostępnij katalog w trybie do odczytu, a następnie do zapisu dla wybranych komputerów. Zweryfikuj możliwość zapisu w katalogu zdalnym z poziomu użytkownikarooti zwykłego użytkownika. - Sprawdź odporność klienta systemu NFS na przejściowe awarie serwera. W tym celu zatrzymaj na chwilę działanie procesów serwera NFS.
- Sprawdź różnicę między trybami pracy dołączania zdalnego katalogu:
hard,softi połączeniehard,intr. - Sprawdź działanie pamięci podręcznej po stronie klienta NFS. W tym celu jednocześnie wyświetlaj zawartość katalogu po stronie klienta i zmieniaj ją po stronie serwera. Ćwiczenie wykonaj również po całkowitym wyłączeniu mechanizmu pamięci podręcznej.