Personal tools

Sr-07-lab-1.0

From Studia Informatyczne

Spis treści

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

  1. Dołącz wybrany system plików z dyskietki lub CD-ROMu do katalogu /mnt.
  2. Dołącz wybrany system plików NFS do katalogu /mnt.
  3. 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żytkownika root i zwykłego użytkownika.
  4. Sprawdź odporność klienta systemu NFS na przejściowe awarie serwera. W tym celu zatrzymaj na chwilę działanie procesów serwera NFS.
  5. Sprawdź różnicę między trybami pracy dołączania zdalnego katalogu: hard, soft i połączenie hard,intr.
  6. 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.