Omrežni datotečni sistemi
Storitev omrežnega datotečnega sistema NFS (Network File System) so razvili v podjetju Sun Microsystems v 80-tih letih prejšnjega stoletja kot način deljenja skupnega datotečnega sistema, ki je nameščen na disku krajevnega strežnika, za več odjemalcev operacijskega sistema UNIX. Ta topologija računalniškega omrežja je bila tedaj pogojena predvsem z visokimi cenami diskov.
Omrežni datotečni sistem NFS temelji na odnosu odjemalec-strežnik. Strežnik NFS ponuja podatkovne vire na lastnem disku na voljo odjemalcem NFS. Določanje podatkov za izvoz in dostopnih pravic za odjemalce ter pripadajoče uporabnike je opredeljeno v nastavitveni datoteki /etc/exports strežnika NFS. Odjemalci NFS priklapljajo mape v strežniku NFS na lokalne mape z ukazom mount, ki se prav tako uporablja za dostop do podatkov na disketi in cd-romu. Po priklopu podatkov so ti dostopni za običajne ukaze v datotečnih sistemih, na primer za preslikavo in urejanje datotek. Danes je uporaba datotečnega sistema NFS manj razširjena zaradi razmeroma nizke cene in zmogljivejših diskov, vendar je uporaba te storitve zelo uporabna, predvsem pri ustvarjanju javno dostopnih arhivov.
Priklop
Za priklop datotečnega sistema v krajevnem strežniku v omrežju na naš računalnik se uporabi ukaz mount (priklop). Osnovna sintaksa je naslednja:
mount opcije oddaljeni_strežnik:/mapa_na_oddaljenem_strežniku mapa_na_lokalnem_računalniku
Če želimo na primer priklopiti vsebino mape /home/odjemalci, ki je v oddaljenem strežniku master, na mapo lokalnega računalnika /mnt/nfs, kot korenski (root) uporabnik v ukazni lupini vpišemo naslednje:
# mount -t nfs master:/home/odjemalci /mnt/nfs
Argument nfs pri opciji -t določa tip datotečnega sistema. Za identifikacijo oddaljenega sistema je podano gostiteljsko ime (host name) strežnika master, ki je vpisano skupaj s pripadajočim naslovom IP v datoteko /etc/hosts v lokalnem računalniku. Če ta vpis ni podan v datoteki /etc/hosts, lahko za priklop uporabimo samo naslov IP. Na primer:
# mount -t nfs 213.161.3.11:/home/odjemalci /mnt/nfs
Podatek o gostiteljskem imenu ali naslovu IP strežnika NFS in dostopne pravice za uvoz map se dobi od upravitelja krajevnega omrežja.
Možen je izvoz oddaljene mape z dostopnimi pravicami samo za branje. V ta namen uporabimo opcijo -r (read-only):
# mount -t nfs -r 213.161.3.11:/home/odjemalci /mnt/nfs
ali pa
# mount -t nfs -o rdonly 213.161.3.11:/home/odjemalci /mnt/nfs
Več informacij o ukazu mount je podano na straneh man:
# man mount
Odklop
Sintaksa je enaka kot pri ukazu mount, vendar se tokrat uporabi ukaz umount (odklop).
Priklop ob zagonu
V datoteki /etc/fstab so podani datotečni sistemi računalnika, katerih priklop se izvede ob zagonu. Navadno ob zagonu priklapljamo datotečne sisteme na diskih, vendar je prav tako možno priklapljanje omrežnih datotečnih sistemov.
Naslednji vnos vrstice v datoteki /etc/fstab omogoča avtomatski priklop vsebine mape /home/odjemalci, ki je v oddaljenem strežniku master v mapo /mnt/nfs v lokalnem računalniku:
master:/home/odjemalci /mnt/nfs nfs rsize=8192,wsize=8192,timeo=14, intr
Pregled nastavitvenih opcij v datoteki /etc/fstab:
Rsize
Število bajtov, ki jih NFS prebere v enem podatkovnem paketu (datagram) iz strežnika NFS. Privzeta vrednost je 1024 bajtov. Vrednost 8192 bajtov bo zagotovila maksimalno prepustnost podatkov.
Wsize
Število bajtov, ki jih NFS vpisuje v enem podatkovnem paketu (datagram) v strežnik NFS. Privzeta vrednost je 1024 bajtov. Vrednost 8192 bajtov bo zagotovila maksimalno prepustnost podatkov.
Timeo = n
Nastavitev časovnega izteka timeout (v desetinah sekunde):
Odjemalec NFS počaka čas n na iztek trenutne zahteve strežniku NFS. Po preteku časovnega izteka se zahteva ponovi. Privzeta vrednost n je 14.
Intr
Omogoča uporabniku prekinitev klica na strežnik NFS s pomočjo signalov v Linuxu. Opcija ni privzeta.
Natančen opis opcij najdete na straneh "man" (man nfs).
Strežnik NFS
NFS uporablja zbirko orodij in knjižnic programskega paketa RPC (Remote Procedure Call - klic za oddaljeni postopek). Strežnik RPC je sestavljen iz zbirke postopkov, namenjenih za komunikacijo z odjemalci, ki jih odjemalci lahko kličejo s pošiljanjem zahteve RPC in pripadajočih parametrov postopka strežniku. Zbirka postopkov RPC je poimenovana program in jo identificira številka programa (program number).
Seznam, ki povezuje storitve RPC s številkami programov, je v datoteki /etc/rpc:
# cat /etc/rpc
#ident "@(#)rpc 1.11 95/07/14 SMI" /* SVr4.0 1.2 */
#
# rpc
#
portmapper 100000 portmap sunrpc rpcbind
rstatd 100001 rstat rup perfmeter rstat_svc
rusersd 100002 rusers
nfs 100003 nfsprog
ypserv 100004 ypprog
mountd 100005 mount showmount
ypbind 100007
walld 100008 rwall shutdown
yppasswdd 100009 yppasswd
(Izsek iz datoteke /etc/rpc)
Ključno vlogo pri postopku povezovanja odjemalca in strežnika RPC ima demon portmap. Strežnik RPC ob zagonu sporoči demonu portmap vrata TCP/UDP, na katerih posluša povezave in številke programov, ki jih streže. Ob klicu določene številke programa odjemalec najprej izvede povpraševanje demona portmap v strežniku, to pa nato določi številko vrat TCP/UDP za pošiljanje paketov RPC.
Zagon, zaustavitev in vnovični zagon demona portmap izvedemo kot korenski (root) uporabnik na naslednji način:
Red Hat Linux:
# /etc/rc.d/init.d/portmap start
# /etc/rc.d/init.d/portmap stop
# /etc/rc.d/init.d/portmap restart
SuSE Linux:
# rcportmap start
# rcportmap stop
# rcportmap restart
ali pa
# /etc/init.d/portmap start
# /etc/init.d/portmap stop
# /etc/init.d/portmap restart
Zahteva se, da demon portmap deluje pred zagonom strežnika NFS,
Jedro delovanja strežnika NFS omogočata demona rpc.nfsd (rpc.knfsd za kernel demon) in rpc.mountd. Način zagona, zaustavitve in vnovičnega strežnika NFS zagona je naslednji (uporabnik root):
Red Hat Linux:
# /etc/rc.d/init.d/nfs start
# /etc/rc.d/init.d/nfs stop
# /etc/rc.d/init.d/nfs restart
SuSE Linux:
# rcnfsserver start
# rcnfsserver stop
# rcnfsserver restart
Poglavitne nastavitve strežnika NFS, ki odločajo o mapah za izvoz odjemalcem NFS, so podane v izvozni datoteki (export file) /etc/ exports. Vsak vnos v datoteki /etc/exports se nanaša na en izvoz datotečnega sistema in ima sledečo osnovno sintakso:
datotečni-sistem oddaljeni_odjemalci(opcije, opcije...) ...
Zgled:
/home/mapa_za_izvoz *(rw, no_root_squash)
Izvedli smo izvoz mape /home/mapa_za_izvoz in pripadajočih podmap vsem (znak *) računalnikom v omrežju. Če želimo omejiti izvoz na samo določene računalnike, uporabimo naslednjo sintakso:
/home/mapa_za_izvoz računalnik_1(rw, no_root_squash) računalnik_2(ro, no_root_squash) ...
Pregled nastavitvenih možnosti v datoteki /etc/exports:
ro
Izvoz mape samo za branje (read-only).
rw
Izvoz mape za branje in pisanje (read & write).
root_squash
Korenski (root) uporabnik v oddaljenem sistemu nima dovoljenja za pisanje v izvoženo mapo.
no_root_squash
Korenski (root) uporabnik v oddaljenem sistemu ima dovoljenja za pisanje v izvoženo mapo.
link_relative
Izvede pretvorbo absolutnih simboličnih povezav v izvoženi mapi na relativne simbolične povezave. Opcija je koristna pri izvozu celotnega datotečnega sistema in omogoča pravilno "preusmerjanje" simboličnih povezav po priklopu izvožene mape.
link_absolute
Ne spreminja simboličnih povezav.
Map_identity
Opcija predpostavi, da so uporabniki na strežniku NFS in uporabniki na odjemalcih NFS isti - omogočen je prenos dostopnih pravic "istih" uporabnikov pri izvozu mape iz strežnika na odjemalca. Privzeto.
Map_daemon
Opcija predpostavi, da uporabniki na strežniku NFS in uporabniki na odjemalcih NFS niso isti. Za preslikavo dostopnih pravic uporabnikov strežnika NFS na "iste" uporabnike odjemalca NFS se uporabi demon ugidd.
Vsaka naknadna sprememba nastavitev v datoteki /etc/exports zahteva vnovično ustvarjanje izvozne tabele (export table) s pomočjo orodja exportfs. Izvozna tabela se shranjuje v datoteko /var/lib/nfs/xtab, ki jo demon mountd prebere pri zahtevi odjemalca za priklapljanje. Torej, po spremembi nastavitev v datoteki /etc/exports poženemo ukaz (kot root):
# exportfs -r
Alternativa ukazu exportfs :
# rcnfsserver reload (Suse)
# /etc/rc.d/init.d/nfs reload (Red Hat)
Delovanje strežnika NFS se lahko preveri s pomočjo ukaza rpcinfo. Ukaz izpiše seznam vseh registriranih programov RPC v strežniku.
Zgled izpisa ukaza rpcinfo na delujočem strežniku NFS:
# rpcinfo -p
program vers proto port
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper
100003 2 udp 2049 nfs
100003 3 udp 2049 nfs
100003 2 tcp 2049 nfs
100003 3 tcp 2049 nfs
100021 1 udp 32771 nlockmgr
100021 3 udp 32771 nlockmgr
100021 4 udp 32771 nlockmgr
100021 1 tcp 32783 nlockmgr
100021 3 tcp 32783 nlockmgr
100021 4 tcp 32783 nlockmgr
100005 1 udp 740 mountd
100005 1 tcp 743 mountd
100005 2 udp 740 mountd
100005 2 tcp 743 mountd
100005 3 udp 740 mountd
100005 3 tcp 743 mountd
Samba
Samba je programski paket za Linux, ki omogoča povezavo z gostitelji, na katerih je nameščeni operacijski sistem Windows. Za komunikacijo uporablja Samba protokola NetBIOS in SMB , ki sta značilna za operacijske sisteme družine Windows.
Strežnik Samba, nameščen v krajevnem omrežju, je tako javno dostopen in viden računalnikom omrežja, ki imajo nameščen OS Windows, in nasprotno.
Ukaz mount v Linuxu omogoča priklop deljenih map gostitelja, v katerem je nameščen OS Windows oziroma strežnik Samba na Linuxu.
Zgled:
# mount
-t smbfs
-o username=uporabnik/DOMENA.SI%geslo
//gostitelj_win/deljena_mapa
/mnt/win
Ukaz izvede priklop deljene mape deljena_mapa, ki je v gostitelju gostitelj_win z nameščenim OS Windows, na mapo /mnt/win lokalnega računalnika. Za opcijo -o je podano uporabniško ime (username), domena (DOMENA.SI) in geslo uporabnika, ki se prijavlja za dostop na deljeno mapo. Tip datotečnega sistema, ki sledi opciji -t, je nastavljen na smbfs (samba datotečni sistem).
Možna je tudi naslednja sintaksa:
# mount
-t smbfs
-o username=uporabnik%geslo
//gostitelj/deljena_mapa
/mnt/win
# mount
-t smbfs
-o username=uporabnik
//gostitelj/deljena_mapa
/mnt/win
Odklop deljene mape:
# umount //gostitelj/deljena_mapa
Ukaz smbclient
je orodje paketa Samba, ki prav tako omogoča dostop do deljenih map v oddaljenem gostitelju, ki ima nameščen OS Windows. Način uporabe ukaza smbclient je zelo podoben orodju ftp (File Transfer Protocol), ki ga uporabljamo za prenos datotek med računalniki.
Zgled:
Prijava uporabnika izidor ob vstopu v mapo home oddaljenega gostitelja win_machine (Windows) v domeni DOMAIN.SI:
comp:/home/dali # smbclient //win_machine/home -W DOMAIN.SI -U izidor
added interface ip=172.16.52.14 bcast=172.16.52.255 nmask=255.255.255.0
Vpišemo geslo:
Password:
Anonymous login successful
Domain=[DOMAIN.SI] OS=[Windows 5.1]
Server=[Windows 2000 LAN Manager]
tree connect failed: NT_STATUS_ACCESS_DENIED
comp:/home/dali #
comp:/home/dali # smbclient
//win_machine/home -W DOMAIN.SI
-U izidor%test12
added interface ip=172.16.52.14 bcast=172.16.52.255
nmask=255.255.255.0
Domain=[DOMAIN.SI] OS=[Windows 5.1]
Server=[Windows 2000 LAN Manager]
Po uspešni prijavi se odpre upravljalna vrstica orodja smbclient:
smb: \>
Izpis datotek v mapi home v gostitelju win_machine:
smb: \> ls
. D 0 Tue Oct 19 09:06:46 2004
.. D 0 Tue Oct 19 09:06:46 2004
boot.iso A 24313856 Wed Sep 8 12:10:52 2004
setup.exe A 268800 Fri Aug 6 11:42:14 2004
55231 blocks of size 1048576. 24066 blocks available
Izpis lokalne mape (Linux):
smb: \> lcd
the local directory is now /home/dali
Izpis položaja v datotečnem sistemu gostitelja win_machine (Windows):
smb: \> pwd
Current directory is \\win_machine\home\
Preslikava mape boot.iso, ki je v deljeni mapi home gostitelja win_machine, v lokalni računalnik v mapo /home/dali:
smb: \> get boot.iso
getting file \boot.iso of size 0 as boot.iso (2675.7 kb/s)
(average 2675.7 kb/s)
smb: \> ! ls -la /home/dali/boot.iso.
-rw-r--r-- 1 root root 24313856 2004-10-19 10:03 boot.iso
smb: \>
Konec seje smbclient:
smb: \> exit
Ukaz smbclient je možno uporabiti tudi "zunaj seje". V tem primeru se ukazi seje podajo za opcijo -c (command):
comp:/home/dali # smbclient //win_machine/home
-W DOMAIN.SI -U izidor%geslo -c 'history'
added interface ip=172.16.52.14 bcast=172.16.52.255
nmask=255.255.255.0
Domain=[DOMAIN.SI] OS=[Windows 5.1]
Server=[Windows 2000 LAN Manager]
comp:/home/dali # smbclient //win_machine/home
-W DOMAIN.SI -U izidor%geslo -c 'lcd'
added interface ip=172.16.52.14 bcast=172.16.52.255
nmask=255.255.255.0
Domain=[DOMAIN.SI] OS=[Windows 5.1]
Server=[Windows 2000 LAN Manager]
the local directory is now /home/dali
Več informacij o ukazu smbclinet najdete na straneh man.