Configurarea și montarea NFS. Ce este RPC. Funcții generale pentru exportul ierarhiilor de directoare

Când vorbiți despre rețele de calculatoare, puteți auzi adesea menționarea NFS. Ce înseamnă această abreviere?

Este un protocol de sistem de fișiere distribuit dezvoltat inițial de Sun Microsystems în 1984, care permite unui utilizator de pe un computer client să acceseze fișiere printr-o rețea, similar cu accesarea stocării locale. NFS, ca multe alte protocoale, se bazează pe sistemul Open Network Computing Remote Procedure Call (ONC RPC).

Cu alte cuvinte, ce este NFS? Acest standard deschis, definit în Request for Comments (RFC), permițând oricui să implementeze protocolul.

Versiuni și variante

Inventatorul a folosit doar prima versiune pentru propriile sale scopuri experimentale. Când echipa de dezvoltare a adăugat modificări semnificative la NFS original și l-a lansat în afara autorului lui Sun, au desemnat noua versiune ca v2, astfel încât să poată testa interoperabilitatea între distribuții și să creeze o soluție alternativă.

NFS v2

Versiunea 2 a funcționat inițial numai pe protocolul User Datagram Protocol (UDP). Dezvoltatorii săi au dorit să păstreze partea de server fără blocare implementată în afara protocolului principal.

Interfața sistemului de fișiere virtual permite implementarea modulară reflectată în protocol simplu. Până în februarie 1986, soluțiile au fost demonstrate pentru sisteme de operare precum System V versiunea 2, DOS și VAX/VMS folosind Eunice. NFS v2 a permis doar citirea primilor 2 GB dintr-un fișier din cauza limitărilor de 32 de biți.

NFS v3

Prima propunere de dezvoltare a NFS versiunea 3 la Sun Microsystems a fost anunțată la scurt timp după lansarea celei de-a doua distribuții. Motivația principală a fost aceea de a încerca să atenueze problema de performanță a înregistrării sincrone. Până în iulie 1992, îmbunătățirile practice au rezolvat multe dintre deficiențele NFS versiunea 2, lăsând doar suport insuficient pentru fișiere (dimensiuni de fișiere pe 64 de biți și decalaje ale fișierelor).

  • suport pentru dimensiuni de fișiere de 64 de biți și decalaje pentru a gestiona date mai mari de 2 gigaocteți (GB);
  • suport pentru înregistrarea asincronă pe server pentru a îmbunătăți performanța;
  • atribute de fișiere suplimentare în multe răspunsuri pentru a evita să fie nevoie să le preluăm din nou;
  • Operațiune READDIRPLUS pentru a obține date și atribute împreună cu numele fișierelor la scanarea unui director;
  • multe alte îmbunătățiri.

În timpul introducerii versiunii 3, suportul pentru TCP ca protocol de nivel de transport a început să crească. Utilizarea TCP ca mijloc de transfer de date, efectuată folosind NFS pe un WAN, a început să permită transferul de fișiere de dimensiuni mari pentru vizualizare și scriere. Datorită acestui fapt, dezvoltatorii au reușit să depășească limitările de 8 KB impuse de User Datagram Protocol (UDP).

Ce este NFS v4?

Versiunea 4, influențată de Endres File System (AFS) și Server Message Block (SMB, numită și CIFS), include îmbunătățiri ale performanței, oferă o securitate mai bună și introduce un protocol de conformitate.

Versiunea 4 a fost prima distribuție dezvoltată de Internet Engineering Task Force (IETF) după ce Sun Microsystems a externalizat dezvoltarea protocolului.

Versiunea NFS 4.1 urmărește să ofere suport pentru protocol pentru valorificarea implementărilor de servere în cluster, inclusiv capacitatea de a oferi acces paralel scalabil la fișierele distribuite pe mai multe servere (extensia pNFS).

Cel mai nou protocol de sistem de fișiere, NFS 4.2 (RFC 7862), a fost lansat oficial în noiembrie 2016.

Alte extensii

Odată cu dezvoltarea standardului, au apărut instrumente corespunzătoare pentru lucrul cu acesta. De exemplu, WebNFS, o extensie pentru versiunile 2 și 3, permite protocolului de acces la sistemul de fișiere în rețea să se integreze mai ușor în browserele web și să permită lucrul peste firewall-uri.

Diverse protocoale terțe au devenit, de asemenea, asociate cu NFS. Cele mai cunoscute dintre ele sunt:

  • Network Lock Manager (NLM) cu suport pentru protocolul de octeți (adaugat pentru a suporta API-ul de blocare a fișierelor UNIX System V);
  • Remote Quota (RQUOTAD), care permite utilizatorilor NFS să vadă cotele de stocare pe serverele NFS;
  • NFS over RDMA este o adaptare a NFS care utilizează accesul direct la memorie la distanță (RDMA) ca mediu de transmisie;
  • NFS-Ganesha este un server NFS care rulează în spațiul utilizatorului și acceptă CephFS FSAL (File System Abstraction Layer) folosind libcephfs.

Platforme

Network File System este adesea folosit cu sisteme de operare Unix (cum ar fi Solaris, AIX, HP-UX), MacOS Apple și sisteme de operare asemănătoare Unix (cum ar fi Linux și FreeBSD).

Este disponibil și pentru platforme precum Acorn RISC OS, OpenVMS, MS-DOS, Microsoft Windows, Novell NetWare și IBM AS/400.

Protocoalele alternative de acces la fișiere de la distanță includ Server Message Block (SMB, numit și CIFS), Apple Transfer Protocol (AFP), NetWare Core Protocol (NCP) și OS/400 Server File System (QFileSvr.400).

Acest lucru se datorează cerințelor NFS, care vizează mai ales „shell-uri” asemănătoare Unix.

Cu toate acestea, protocoalele SMB și NetWare (NCP) sunt utilizate mai des decât NFS pe sistemele care rulează Microsoft Windows. AFP este cel mai utilizat pe platforme Apple Macintosh, iar QFileSvr.400 este cel mai frecvent în OS/400.

Implementare tipică

Presupunând un scenariu tipic în stil Unix în care un computer (clientul) are nevoie de acces la datele stocate pe altul (serverul NFS):

  • Serverul implementează procese Network File System, care rulează implicit ca nfsd, pentru a-și face datele disponibile public pentru clienți. Administratorul serverului determină cum să exporte numele directorului și setările, utilizând de obicei fișierul de configurare /etc/exports și comanda exportfs.
  • Administrarea securității serverului asigură că acesta poate recunoaște și aproba un client autentificat. Configurația sa de rețea asigură că clienții eligibili pot negocia cu acesta prin orice sistem firewall.
  • Mașina client solicită acces la datele exportate, de obicei prin lansarea unei comenzi. Interogează serverul (rpcbind) care utilizează portul NFS și ulterior se conectează la acesta.
  • Dacă totul se întâmplă fără erori, utilizatorii de pe computerul client vor putea să vadă și să interacționeze cu sistemele de fișiere instalate pe server în limitele parametrilor permisi.

De asemenea, trebuie remarcat faptul că automatizarea procesului Network File System poate avea loc - poate folosind etc/fstab și/sau alte instrumente similare.

Dezvoltare până în prezent

Până în secolul 21, protocoalele rivale DFS și AFS nu au obținut niciun succes comercial major în comparație cu sistemul de fișiere în rețea. IBM, care a achiziționat anterior toate drepturile comerciale asupra tehnologiilor de mai sus, a donat majoritatea codului sursă AFS comunității de dezvoltatori liberi. softwareîn 2000. Proiectul Open AFS există și astăzi. La începutul anului 2005, IBM a anunțat încheierea vânzărilor AFS și DFS.

La rândul său, în ianuarie 2010, Panasas a propus NFS v 4.1 bazat pe tehnologie care îmbunătățește capabilitățile de acces la date paralele. Protocolul Network File System v 4.1 definește o metodă pentru separarea metadatelor sistemului de fișiere de locația anumitor fișiere. Deci, depășește simpla separare nume/date.

Ce este NFS al acestei versiuni în practică? Caracteristica de mai sus o deosebește de protocolul tradițional, care conține numele fișierelor și datele lor sub o singură conexiune la server. Cu Network File System v 4.1, unele fișiere pot fi partajate pe servere cu mai multe noduri, dar implicarea clientului în partajarea metadatelor și a datelor este limitată.

La implementarea celei de-a patra distribuții a protocolului, serverul NFS este un set de resurse sau componente de server; se presupune că acestea sunt controlate de serverul de metadate.

Clientul încă contactează un singur server de metadate pentru a traversa sau a interacționa cu spațiul de nume. Pe măsură ce mută fișierele către și de la server, poate interacționa direct cu setul de date, aparținând grupului NFS.

N FS ( Sistem de fișiere de rețea) concepute în primul rând pentru partajare fișiereŞi foldere intre / Unix sisteme de la Microsisteme solare V 1980. Vă permite să montați sisteme de fișiere locale într-o rețea și gazde la distanță pentru a interacționa cu ele ca și cum ar fi montate local pe același sistem. Prin folosirea NFS, putem configura partajarea fișierelor între Unix V Linux sistem și Linux pentru sistem Unix.

Beneficiile NFS

  1. NFS creează acces local la fișierele șterse.
  2. Utilizează arhitectura standard client/server pentru a partaja fișiere între toate mașinile bazate pe * NIX.
  3. Prin folosirea NFS nu este nevoie ca ambele mașini să funcționeze pe același OS.
  4. Prin folosirea NFS putem personaliza soluția depozitare centralizată.
  5. Utilizatorii își primesc date indiferent de locația lor fizică.
  6. Automat actualizare pentru fișiere noi.
  7. Versiune mai noua NFS suporta montaj acl, pseudo sub rădăcină.
  8. Poate fi protejat firewall-uriŞi Kerberos.

Servicii NFS

Serviciu Sistem V-lansat. Pachetul de server NFS include trei produse incluse în pachet portmapŞi nfs-Utils.

  1. portmap: Afișează apelurile efectuate de la alte aparate către serviciul corect RPC(nu este necesar cu NFSv4).
  2. nfs: convertește cererile de la distanță accesul publicului la dosare la cererile din sistemul de fișiere local.
  3. rpc.mountd: acest serviciu este responsabil pentru montareŞi demontarea sisteme de fișiere.

Fișiere de configurare importante pentru NFS

  1. /etc/exports: fișierul său de configurare principal NFS, toate exportate fișiereŞi cataloage, care sunt definite în acest fișier și mai departe Server de destinație NFS.
  2. /etc/fstab: A monta directorul NFS pe sistemul dvs. fără repornește, trebuie să înregistrăm /etc/fstab.
  3. /etc/sysconfig/nfs: Fișier de configurare NFS pentru control pe ce port RPC si alte servicii audiții.

Configurarea și montarea NFS pe un server Linux

Pentru a configura suportul NFS, vom avea nevoie de cel puțin două mașini Linux/Unix. Aici, în acest tutorial, vom folosi două servere.

  1. Server NFS: nfsserver.example.ru cu IP – 192.168.0.55
  2. Client NFS: nfsclient.example.ru cu IP – 192.168.0.60

Instalarea serverului NFS și a clientului NFS

Trebuie să instalăm pachete NFS pe noastre Server NFS si de asemenea cu masina Client NFS. Îl putem instala folosind „ ” ( Pălărie Roșie Linux) și pachetul de instalare „ apt-get” (DebianŞi Ubuntu).

# yum install nfs-utils nfs-utils-lib # yum install portmap (nu este necesar cu NFSv4) # apt-get install nfs-utils nfs-utils-lib

Acum fugi servicii pe ambele mașini.

# /etc/init.d/portmap start # /etc/init.d/nfs start # chkconfig --level 35 portmap on # chkconfig --level 35 nfs on

După instalarea pachetelor și rularea serviciilor pe ambele mașini, trebuie să configuram ambele mașini pentru a partaja fișiere.

Configurarea unui server NFS

Mai întâi, să setăm serverul NFS.

Configurarea directorului de export

#mkdir/nfsshare

Acum trebuie să facem o intrare în „ /etc/exports„Și repornire servicii pentru a face ca directorul nostru să poată fi partajat pe web.

# vi /etc/exports /nfsshare 192.168.0.60(rw,sync,no_root_squash)

În exemplul de mai sus, există un director sub / numită „ nfsshare„, partajat în prezent cu clientul IP „ 192.168.0.60 ” cu privilegii lecturăŞi înregistrări (RW), puteți utiliza și nume de gazdă client în schimb IPîn exemplul de mai sus.

Setări NFS

Alte opțiuni pe care le putem folosi în fișierele „ /etc/exports” partajarea fișierelor arată așa.

  1. ro: Cu această opțiune putem oferi acces numai în citire la fișierele partajate, adică client va putea doar citire.
  2. rw: Această opțiune permite client la server acces pentru ambele lecturăŞi înregistrăriîn cadrul catalogului general.
  3. sincronizare: Sincronizarea acceptă cererile către directorul partajat numai după schimbari au fost comise.
  4. no_subtree_check: Această opțiune împiedică verificarea subarborele. Când directorul partajat este un subdirector al unui sistem de fișiere mai mare, NFS scanează fiecare director de deasupra acestuia pentru a-i verifica permisiunile și detaliile. Se dezactivează verificarea subarborele poate îmbunătăți fiabilitatea NFS, dar reduce siguranţă.
  5. no_root_squash: Această frază permite rădăcină, conectațiîntr-un folder specific.

Pentru mai multe opțiuni cu „ /etc/exports„Lectură recomandată pagini manuale pentru export.

Configurarea unui client NFS

După configurare NFS-server, avem nevoie munte acest director partajat sau partiție pe client server.

Montarea directoarelor partajate pe un client NFS

Acum mai departe Client NFS, avem nevoie munte acest director pentru a-l accesa nivel local. Pentru a face acest lucru, în primul rând, trebuie să aflăm ce resurse sunt disponibile pe serverul la distanță sau pe serverul NFS.

# showmount -e 192.168.0.55 Exportați lista pentru 192.168.0.55: /nfsshare 192.168.0.60

Montarea unui director accesibil pe NFS

Pentru a munte general NFS director, putem folosi următoarea comandă de montare.

# mount -t nfs 192.168.0.55:/nfsshare /mnt/nfsshare

Comanda de mai sus va seta directorul partajat la „ /mnt/nfsshare” pe serverul client. Puteți verifica cu următoarea comandă.

#montură | grep nfs sunrpc pe /var/lib/nfs/rpc_pipefs tip rpc_pipefs (rw) nfsd pe /proc/fs/nfsd tip nfsd (rw) 192.168.0.55:/nfsshare pe /mnt tip nfs = 1.90.5addr) (rw)

Comanda de montare de deasupra se montează pe Director partajat NFS pe Client NFS temporar pentru a monta un director NFS în mod constant pe sistemul dvs., indiferent de reporniri, trebuie să facem o intrare în „ /etc/fstab“.

# vi /etc/fstab

Adăugați următoarea linie nouă, așa cum se arată mai jos.

192.168.0.55:/nfsshare /mnt nfs implicit 0 0

Testarea modului de instalare NFS

Le putem testa pe ale noastre Instalare server NFS prin crearea fisierul de testare pe partea serverului și verificați prezența acestuia pe Client NFS lateral sau invers.

Pe partea de server nfserver

Am creat un nou fișier text cu numele „ nfstest.txt” în acest director partajat.

# cat > /nfsshare/nfstest.txt Acesta este un fișier de testare pentru a testa funcționarea setării serverului NFS.

Pe partea clientului nfsclient

Accesați directorul partajat server clientși veți găsi un fișier partajat fără niciunul actualizare manuală sau reporniți serviciile.

# ll /mnt/nfsshare total 4 -rw-r--r-- 1 root root 61 Sep 21 21:44 nfstest.txt root@nfsclient ~]# cat /mnt/nfsshare/nfstest.txt Acesta este un fișier de testare pentru testați funcționarea setării serverului NFS.

Îndepărtarea unei monturi NFS

Dacă doriți demonta acest director partajat de pe server după ce ați terminat cu partajarea fișierelor, puteți pur și simplu demonta acel director specific folosind comanda „ umount„. Vezi mai jos acest exemplu.

Root@nfsclient ~]# umount /mnt/nfsshare

Puteți vedea că suportul a fost eliminat din sistemul de fișiere.

# df -h -F nfs

Veți vedea că aceste directoare partajate nu mai sunt disponibile.

Comenzi importante pentru NFS

Mai multe comenzi importante Pentru NFS .

  1. showmount -e: Spectacole disponibile obiecte comune pe computerul dvs. local
  2. showmount -e : Lista celor disponibile obiecte comune pe telecomanda server
  3. showmount -d: Lista tuturor subdirectoare
  4. exportfs -v: Afișează o listă de partajate fișiereŞi opțiuni pe server
  5. exportfs -a: Exportă toate obiectele disponibile listate în /etc/exports, sau nume
  6. exportfs -u: reexportă toate obiectele disponibile listate în /etc/exports, sau nume
  7. exportfs -r: Actualizați lista de server după modificare /etc/exports

Este vorba despre Montare NFS momentan, dacă sunteți interesat, puteți citi ghidul despre asta. Lasă-l pe al tău

#image.jpg Distracție plăcută, cititori și oaspeți ai blogului meu. A fost o pauză foarte lungă între postări, dar m-am întors în luptă). În articolul de astăzi mă voi uita Operarea protocolului NFS, precum și configurarea serverului NFS și a clientului NFS pe Linux.

Introducere în NFS

NFS (Sistem de fișiere de rețea- rețea sistem de fișiere) după părerea mea - o soluție ideală într-o rețea locală, unde este necesar schimbul de date rapid (mai rapid în comparație cu SAMBA și mai puțin consumator de resurse în comparație cu sistemele de fișiere la distanță cu criptare - sshfs, SFTP etc...). securitatea de prim plan a informațiilor transmise. Protocolul NFS vă permite să montați sisteme de fișiere la distanță într-o rețea într-un arbore de directoare local, ca și cum ar fi un sistem de fișiere pe disc montat.

Ei aplicații locale poate lucra cu un sistem de fișiere la distanță ca și cu unul local. Dar trebuie să fii atent (!) cu configurarea NFS , deoarece cu o anumită configurație este posibil să înghețe sistemul de operare al clientului în așteptarea unei I/O fără sfârșit.

Protocolul NFS bazat pe muncă Protocolul RPC, care este încă dincolo de înțelegerea mea)) așa că materialul din articol va fi puțin vag... Înainte de a putea folosi NFS, fie că este un server sau un client, trebuie să vă asigurați că nucleul dumneavoastră are suport pentru fișierul NFS sistem. Puteți verifica dacă nucleul acceptă sistemul de fișiere NFS căutând prezența liniilor corespunzătoare în fișierul /proc/filesystems:

ARCHIV ~ # grep nfs /proc/filesystems nodev nfs nodev nfs4 nodev nfsd

Dacă liniile indicate nu sunt în fișierul /proc/filesystems, atunci trebuie să instalați pachetele descrise mai jos. Acest lucru vă va permite probabil să instalați module dependente de kernel pentru a suporta sistemele de fișiere adecvate.

Dacă, după instalarea pachetelor, suportul NFS nu este afișat în fișierul desemnat, atunci va trebui să recompilați nucleul pentru a activa această funcție.

Poveste Sistem de fișiere de rețea

Protocolul NFS dezvoltat de Sun Microsystems și are patru versiuni în istoria sa. NFSv1 a fost dezvoltat în 1989 și a fost experimental, rulând pe protocolul UDP. Versiunea Unu este descrisă în RFC 1094.

NFSv2 a fost lansat în același an 1989, a fost descris de același RFC1094 și a fost, de asemenea, bazat pe protocolul UDP, permițând în același timp citirea a cel puțin 2 GB dintr-un fișier. NFSv3 a fost finalizat în 1995 și este descris în RFC 1813.

Principalele inovații ale celei de-a treia versiuni au fost suportul pentru fișiere mari, suport adăugat pentru protocolul TCP și pachete TCP mai mari, care au accelerat semnificativ performanța tehnologiei. NFSv4 a fost finalizat în 2000 și descris în RFC 3010, revizuit în 2003 și descris în RFC 3530.

A patra versiune a inclus îmbunătățiri de performanță, suport pentru diverse mijloace de autentificare (în special, Kerberos și LIPKEY cu introducerea protocolului RPCSEC GSS) și liste de control al accesului (atât tipurile POSIX, cât și Windows). NFS v4.1 a fost aprobat de IESG în 2010 și a primit RFC 5661.

Inovația fundamentală a versiunii 4.1 este specificarea pNFS - Parallel NFS, un mecanism de acces paralel al unui client NFS la datele de pe mai multe servere NFS distribuite. Prezența unui astfel de mecanism într-un eșantion de sistem de fișiere de rețea va ajuta la construirea de sisteme de stocare și informații în „cloud” distribuite.

Server NFS

Din moment ce avem NFS- Asta reţea sistem de fișiere, trebuie să configurați netîn Linux. (Puteți citi și articolul conceptele principale ale rețelelor). Apoi, trebuie să instalați pachetul corespunzător. Pe Debian, acesta este pachetul nfs-kernel-server și nfs-common, pe RedHat acesta este pachetul nfs-utils.

De asemenea, trebuie să permiteți demonului să ruleze la niveluri de execuție adecvate (comandă în RedHat - /sbin/chkconfig nfs on, în Debian - /usr/sbin/update-rc.d nfs-kernel-server defaults).

Pachetele instalate în Debian sunt lansate în următoarea ordine:

ARCHIV ~ # ls -la /etc/rc2.d/ | grep nfs lrwxrwxrwx O rădăcină 20 oct Eighteen 15:02 S15nfs-common -> ../init.d/nfs-common lrwxrwxrwx O rădăcină 20 șapte Oct 20 două 01:23 S16nfs -> kernel.-/rwxrwx .d/nfs-kernel-server

Cu alte cuvinte, începe primul nfs-comun, mai târziu serverul însuși nfs-kernel-server.

În RedHat situația este similară, cu singura excepție că se apelează primul script nfslock, iar serverul este numit simplu nfs. Despre nfs-comun Site-ul web debian ne spune textul acesta: fișiere partajate pentru client și server NFS, acest pachet trebuie instalat pe mașina care va acționa ca client sau server NFS.

Pachetul include programe: lockd, statd, showmount, nfsstat, gssd și idmapd. Prin vizualizarea conținutului scriptului de pornire /etc/init.d/nfs-common, puteți urmări următoarea secvență de lucru: scriptul verifică prezența fișierului binar executabil /sbin/rpc.statd, verifică prezența în fișierele /etc/default/nfs-common, /etc/fstab și /etc/exports caracteristicile care necesită rularea demonilor idmapdŞi gssd, pornește demonul /sbin/rpc.statd, apoi înainte de a porni /usr/sbin/rpc.idmapd și /usr/sbin/rpc.gssd verifică prezența acestor executabile fișiere binare, apoi pentru demon /usr/sbin/rpc.idmapd verifică prezența modulelor de kernel sunrpc, nfs și nfsd, precum și suportul pentru sistemul de fișiere rpc_pipefs în kernel (cu alte cuvinte, prezența acestuia în /proc/filesystems fișier), dacă totul are succes, se lansează /usr/sbin/rpc.idmapd. În plus, pentru demon /usr/sbin/rpc.gssd verifică modulul kernel rpcsec_gss_krb5 și pornește demonul.

Dacă vizualizați conținutul Scriptul de pornire a serverului NFS pe Debian (/etc/init.d/nfs-kernel-server), atunci puteți urma următoarea secvență: la pornire, scriptul verifică existența fișierului /etc/exports, prezența modulului kernel nfsd, prezența suportului pentru sistemul de fișiere NFS în nucleul Linux (alte cuvinte în fișierul /proc/filesystems), dacă totul este la locul său, atunci demonul începe /usr/sbin/rpc.nfsd, apoi verifică dacă parametrul NEED_SVCGSSD este setat (setat în fișierul de opțiuni de server /etc/default/nfs-kernel-server) și, dacă este setat, pornește demonul /usr/sbin/rpc.svcgssd, ultimul care a lansat demonul /usr/sbin/rpc.mountd. Din acest scenariu este clar că Operarea serverului NFS constă în demonii rpc.nfsd, rpc.mountd și dacă se folosește autentificarea Kerberos, atunci demon rcp.svcgssd. Demonul rpc.rquotad și nfslogd încă rulează în red hat (Din anumite motive în Debian nu am găsit informații despre acest demon și motivele absenței sale, se pare că a fost șters...).

De aici devine clar că Serverul Network File System este format din următoarele procese (citește - demoni), situat în directoarele /sbin și /usr/sbin:

  • rpc.statd- Monitorizare imposibilă a stării rețelei (aka Network Status Monitor, alias NSM). Vă permite să anulați corect blocarea după o blocare/repornire. Pentru a notifica încălcări, utilizați programul /usr/sbin/sm-notify. Statd imp funcționează atât pe servere, cât și pe clienți. Anterior, acest server era necesar pentru ca rpc.lockd să funcționeze, dar acum nucleul este responsabil pentru blocare (notă: dacă nu mă înșel #image.jpg). (Programul RPC 100 mii 20 unu și 100 mii 20 patru - în versiuni noi)
  • rpc.lockd- Lockd lock imp (cunoscut și ca manager de blocare NFS (NLM)) gestionează cererile de blocare a fișierelor. Impul de blocare funcționează atât pe servere, cât și pe clienți. Clienții solicită blocarea fișierelor, iar serverele o permit. (învechit și nefolosit ca demon în distribuțiile noi. Funcțiile sale în distribuțiile moderne (cu un nucleu mai vechi de 2.2.18) sunt realizate de nucleu, mai precis de modulul de kernel (lockd).) (programul RPC 100024)
  • rpc.nfsd- Demonul principal al serverului NFS este nfsd (în versiunile noi se numește uneori nfsd4). Acest imp servește cererile clientului NFS. Parametrul RPCNFSDCOUNT din fișierul /etc/default/nfs-kernel-server pe Debian și NFSDCOUNT din fișierul /etc/sysconfig/nfs de pe RedHat determină numărul de demoni de rulat (prestabilit este 8 (programul RPC 100003).
  • rpc.mountd- Fără montarea NFS, mountd gestionează cererile clientului de a monta directoare. Mountd imp funcționează pe servere NFS. (programul RPC 100005)
  • rpc.idmapd- Idmapd pentru NFSv4 de pe server convertește uid/gid-ul local al utilizatorilor în formatul nume@domeniu, iar serviciul de pe client convertește numele de utilizator/grup de tipul nume@domeniu în identificatori locali de utilizator și grup (conform configurației fișier /etc/idmapd.conf, mai multe detalii în man idmapd.conf):.
  • În plus, versiunile mai vechi de NFS foloseau imps: nfslogd- NFS log imp înregistrează activitatea pentru sistemele de fișiere exportate, funcționează pe servere NFS și rquotad- serverul de cote la distanță oferă informații despre cotele de utilizatori în sistemele de fișiere la distanță, poate funcționa atât pe servere, cât și pe clienți (programul RPC 100011).

În NFSv4, atunci când utilizați Kerberos, demonii sunt lansați suplimentar:

  • rpc.gssd- Bes NFSv4 oferă metode de autentificare prin GSS-API (autentificare Kerberos). Funcționează pe client și server.
  • rpc.svcgssd- Imp server NFSv4, care oferă autentificare client pe partea de server.

portmap și protocol RPC (Sun RPC)

Pe lângă pachetele indicate mai sus, NFSv2 și v3 necesită un pachet suplimentar pentru funcționarea corectă portmap(înlocuit în distribuțiile mai noi cu redenumit în rpcbind). Acest pachet este de obicei instalat automat cu NFS ca pachet dependent și implementează funcționarea serverului RPC, cu alte cuvinte, este responsabil de alocarea dinamică a porturilor pentru unele servicii înregistrate în serverul RPC.

Literal, conform documentației, acesta este un server care convertește numerele de program RPC (Remote Procedure Call) în numere de porturi TCP/UDP. portmap operează pe mai multe entități: apeluri sau solicitări RPC, TCP/ Port UDP ami, versiunea protocolului (tcp sau udp), numerele programului și versiunile programului. Demonul portmap este lansat de scriptul /etc/init.d/portmap înainte de începerea serviciilor NFS.

Pe scurt, sarcina unui server RPC (Remote Procedure Call) este de a procesa apeluri RPC (așa-numitele proceduri RPC) din procesele locale și de la distanță.

Folosind apeluri RPC, serviciile se înregistrează sau se elimină către/din portmapper (aka port mapper, aka portmapper, aka portmapper, aka, în versiuni noi, rpcbind), iar clienții folosesc apelurile RPC pentru a trimite cereri către portmapper pentru a primi informații relevante. Numele ușor de utilizat ale serviciilor de program și numerele lor corespunzătoare sunt definite în fișierul /etc/rpc.

Deoarece orice serviciu a trimis cererea corespunzătoare și s-a înregistrat pe serverul RPC în mapatorul de porturi, serverul RPC atribuie, mapează serviciului porturile TCP și UDP pe care a pornit serviciul și stochează în nucleu informațiile corespunzătoare despre serviciul care rulează. (nume), număr unic service (conform /etc/rpc), despre protocolul și portul pe care funcționează serviciul și despre versiunea serviciului și furnizează informațiile indicate clienților la cerere. Convertorul de porturi în sine are un număr de program (100000), un număr de versiune 2, portul TCP 100 unsprezece și portul UDP 111.

Mai sus, când am indicat componența demonilor serverului NFS, am indicat numerele principale ale programului RPC. Probabil că v-am confundat puțin cu acest paragraf, așa că voi spune fraza principală care ar trebui să clarifice lucrurile: principala funcție a port mapper este de a reveni, la cererea clientului care a furnizat numărul programului RPC (sau Numărul programului RPC) și versiunea lui (client) a portului pe care rulează programul solicitat. În consecință, dacă un client trebuie să acceseze un RPC cu un anumit număr de program, trebuie să contacteze mai întâi procesul portmap de pe computerul server și să găsească numărul portului de comunicație cu serviciul RPC de care are nevoie.

Funcționarea unui server RPC poate fi reprezentată prin următorii pași:

Pentru a obține informații de la serverul RPC, utilizați utilitarul rpcinfo. Când specificați trăsătura gazdă -p, programul afișează o listă cu toate programele RPC înregistrate gazdă gazdă. Fără a specifica gazda, programul va afișa serviciile pe localhost. Exemplu:

ARCHIV ~ # rpcinfo -p prog-ma vers proto port 100 mii Două tcp 100 unsprezece portmapper 100 mii Două udp 100 unsprezece portmapper 100 mii 20 patru Unu udp 50 nouă mii patru sute 50 o stare 100 mii 20 patru mii o sută ecp șase 70 doi statut 100 mii 20 unu Unu udp 40 patru mii trei sute 10 nlockmgr 100 mii 20 unu Trei udp 40 patru mii trei sute 10 nlockmgr 100 mii 20 unu Patru udp 40 patru mii trei sute 10 nlockmgr 100 mii 204 unu tcp 204 mie opt sute 50 unu nlockmgr 100 mii 20 unu Trei tcp 40 patru mii opt sute 50 unu nlockmgr 100 mii 20 unu Patru tcp 40 patru mii opt sute 50 unu nlockmgr 100 mii trei Două tcp Două mii 40 nouă mii trei tcp 100 mii 40 nouă nfs 100 mii trei Patru tcp Două mii 40 nouă nfs 100 mii trei Două udp Două mii 40 nouă nfs 100 mii trei Trei udp Două mii 40 nouă nfs 100 mii trei Patru udp Două mii 40 nouă nfs 100 mii 50 unu udp o mie trei sute 6 mountd 100 mii 5 Un tcp 40 o mie patru sute 5 mountd 100 mii 5 Două udp 50 o mie trei sute 6 mountd 100 mii 5 Două tcp 40 o mie patru sute 5 mountd 100 mii 5 Trei udp 50 o mie trei sute 6 mountd 100 mii 5 Trei tcp 40 o mie patru sute 5 mound

După cum puteți vedea, rpcinfo indică (în coloane de la stânga la dreapta) numărul programului înregistrat, versiunea, protocolul, portul și numele.

Folosind rpcinfo puteți elimina înregistrarea unui program sau puteți obține informații despre un anumit serviciu RPC (mai multe opțiuni în man rpcinfo). După cum puteți vedea, versiunea portmapper Doi demoni sunt înregistrați pe porturile udp și tcp, versiunea rpc.statd One pe porturile udp și tcp, NFS lock manager versiunile 1,3,4, serverul nfs versiunea 2,3,4, precum și montare demon versiuni 1,2,3.

Serverul NFS (mai precis, rpc.nfsd) primește cereri de la client sub formă de datagrame UDP pe portul 2049. În ciuda faptului că NFS funcționează cu un rezolutor de porturi, care permite serverului să utilizeze porturi alocate dinamic, portul UDP Două mii 40 nouă sunt strict atribuite NFS în majoritatea implementărilor.

Operarea protocolului sistemului de fișiere în rețea

Montarea NFS la distanță

Procesul de montare a unui sistem de fișiere NFS la distanță poate fi reprezentat prin următoarea diagramă:

Descrierea protocolului NFS la montarea unui director la distanță:

  1. Un server RPC este lansat pe server și client (de obicei la pornire), care este deservit de procesul portmapper și înregistrat pe portul tcp/111 și udp/111.
  2. Sunt lansate servicii (rpc.nfsd, rpc.statd etc.), care sunt înregistrate pe serverul RPC și înregistrate pe porturi ale rețelei (dacă nu este specificat un port static în setările serviciului).
  3. comanda mount de pe computerul client trimite o cerere de montare către kernel directorul de rețea indicând tipul de sistem de fișiere, gazdă și practic director, nucleul trimite și generează o cerere RPC către procesul portmap de pe serverul NFS de pe portul udp/111 (dacă funcția de funcționare prin tcp nu este setată pe client)
  4. Nucleul serverului NFS interoghează RPC-ul pentru prezența imp rpc.mountd și returnează nucleului clientului portul de rețea pe care rulează imp.
  5. mount trimite o cerere RPC către portul pe care rulează rpc.mountd. În acest moment, serverul NFS poate valida un client pe baza adresei IP și a numărului de port pentru a vedea dacă clientul poate monta sistemul de fișiere desemnat.
  6. Mountless returnează o descriere a sistemului de fișiere solicitat.
  7. Comanda de montare a clientului emite apelul de sistem de montare pentru a asocia mânerul de fișier găsit la pasul 5 cu punctul de montare local de pe gazda clientului. Hranul de fișier este stocat în codul clientului NFS și, de acum înainte, orice acces de către procesele utilizatorului la fișierele din sistemul de fișiere al serverului va folosi mânerul de fișier ca punct de plecare.

Schimb de date între client și serverul NFS

Accesul obișnuit la un sistem de fișiere la distanță poate fi descris prin următoarea schemă:

Descrierea procesului de accesare a unui fișier aflat pe un server NFS:

Configurarea unui server NFS

Configurare serverîn general constă în specificarea directoarelor locale permise pentru montare sisteme de la distanțăîn fișierul /etc/exports. Această acțiune se numește ierarhia directoarelor de export. Principalele surse de informații despre directoarele exportate sunt următoarele fișiere:

  • /etc/exports- fișierul principal de configurare care stochează configurația directoarelor exportate. Folosit la pornirea NFS și de utilitarul exportfs.
  • /var/lib/nfs/xtab- conține o listă de directoare montate de clienți la distanță. Folosit de rpc.mountd imp atunci când un client încearcă să monteze o ierarhie (este creată o înregistrare de montare).
  • /var/lib/nfs/etab- o listă de directoare care pot fi montate de sisteme la distanță, indicând toate caracteristicile directoarelor exportate.
  • /var/lib/nfs/rmtab- o listă de directoare care nu sunt în prezent neexportate.
  • /proc/fs/nfsd- un sistem de fișiere special (kernel 2.6) pentru gestionarea serverului NFS.
    • exporturi- o listă de ierarhii active exportate și clienți către care au fost exportați, precum și proprietăți. Miezul primește aceste informații din /var/lib/nfs/xtab.
    • fire- conține numărul de fire (de asemenea, poate fi schimbat)
    • folosind filehandle puteți obține un pointer către un fișier
    • etc...
  • /proc/net/rpc- conține statistici „brute”, care pot fi obținute folosind nfsstat, precum și diverse cache-uri.
  • /var/run/portmap_mapping- informatii despre serviciile inregistrate in RPC

Nota:În general, pe Internet există o mulțime de interpretări și formulări ale scopului fișierelor xtab, etab, rmtab, nu știu pe cine să cred #image.jpg Nici pe http://nfs.sourceforge.net/ interpretarea nu este clara.

Configurarea fișierului /etc/exports

În cazul normal, fișierul /etc/exports este singurul fișier care necesită editare pentru funcția de server NFS. Acest fișier controlează următoarele proprietăți:

  • Ce fel de clienți poate accesa fișierele de pe server
  • Care ierarhii? directoarele de pe server pot fi accesate de fiecare client
  • Cum vor fi numele personalizate de clienți fi afisat la nume de utilizator locale

Nu contează ce linie a fișierului de export are următorul format:

export_point client1(funcții) [client2(funcții) ...]

Unde punct_export calea absolută a ierarhiei directoarelor exportate, client1 - n numele a 1 sau mai mulți clienți sau adrese IP, separate prin spații, cărora li se permite montarea punct_export. Funcții schițați regulile de montare pentru client indicate înainte de opțiuni.

Iată una obișnuită exemplu de configurare a fișierului de export:

ARCHIV ~ # cat /etc/exports /archiv1 files(rw,sync) 10.0.0.1(ro,sync) 10.0.230.1/24(ro,sync)

În acest exemplu, fișierele computerelor și 10.0.0.1 au acces la punctul de export /archiv1, cu acces de citire/scriere la gazda fișierelor și acces numai pentru citire pentru gazda 10.0.0.1 și subrețeaua 10.0.230.1/24.

Descrierile gazdelor din /etc/exports sunt permise în următorul format:

  • Numele nodurilor individuale sunt descrise ca fișiere sau fișiere.DOMAIN.local.
  • Descrierea măștii domeniului se face în următorul format: *DOMAIN.local include toate nodurile domeniului DOMAIN.local.
  • Subrețelele sunt specificate ca perechi adresă IP/mască. De exemplu: 10.0.0.0/255.255.255.0 include toate nodurile ale căror adrese încep cu 10.0.0.
  • Specificarea numelui grupului de rețea @myclients care are acces la resursă (când se utilizează un server NIS)

Funcții generale pentru exportul ierarhiilor de directoare

Următoarele funcții comune sunt utilizate în fișierul de export:(în primul rând, funcțiile utilizate implicit în majoritatea sistemelor sunt indicate, între paranteze - nu implicit):

  • auth_nlm (nu_auth_nlm) sau secure_locks (blocuri_nesigure)- specifică că serverul ar trebui să caute autentificarea cererilor de blocare (folosind protocolul NFS Lock Manager).
  • nohide (ascunde)- dacă serverul exportă două ierarhii de directoare, în timp ce una este imbricată (montată) în cealaltă. Clientul trebuie, desigur, să monteze a doua ierarhie (copil), altfel punctul de montare al ierarhiei copil va arăta ca un director gol. Funcția nohide are ca rezultat o a doua ierarhie a directorului fără montaj trivial. (notă: nu am putut face ca această opțiune să funcționeze...)
  • ro(rw)- Permite numai cereri de citire (scriere). (În cele din urmă, dacă poate fi citit/scris sau nu este determinat pe baza drepturilor sistemului de fișiere, cu toate acestea, serverul nu este capabil să distingă o solicitare de citire a unui fișier de o solicitare de executare, deci permite citirea dacă utilizatorul are drepturi de citire sau executare.)
  • sigur (nesigur)- solicită ca cererile NFS să provină din porturi securizate (< 1024), чтобы программа без прав root не могла монтировать иерархию каталогов.
  • subtree_check (fără_subtree_check)- Dacă este exportat un subdirector al sistemului de fișiere, dar nu întregul sistem de fișiere, serverul verifică dacă fișierul solicitat se află în subdirectorul exportat. Dezactivarea verificării reduce securitatea, dar crește viteza de transfer al datelor.
  • sincronizare (async)- specifică că serverul trebuie să răspundă la solicitări numai după ce a scris pe disc configurațiile efectuate de acele solicitări. Funcția asincronă îi spune serverului să nu aștepte ca informațiile să fie scrise pe disc, ceea ce crește performanța, dar reduce fiabilitatea, deoarece În cazul unei întreruperi a conexiunii sau a unei defecțiuni a echipamentului, informațiile se pot pierde.
  • wdelay (fără_wdelay)- instruiește serverul să întârzie executarea cererilor de scriere dacă o cerere de scriere ulterioară este în așteptare, scriind datele în blocuri mai mari. Acest lucru îmbunătățește performanța la trimiterea unor cozi mari de comenzi de scriere. no_wdelay specifică să nu întârzie execuția unei comenzi de scriere, ceea ce poate fi util dacă serverul primește un număr nelimitat de comenzi fără legătură.

Exportați linkuri simbolice și fișiere de dispozitiv. La exportul unei ierarhii de directoare care conține legături simbolice, obiectul link trebuie să fie accesibil sistemului client (la distanță), cu alte cuvinte, una dintre următoarele reguli trebuie să fie adevărată:

  • obiectul link trebuie să existe pe sistemul de fișiere client
  • trebuie să exportați și să montați obiectul de referință

Fișierul dispozitivului se referă la interfață Kernel-urile Linux. Când exportați un fișier de dispozitiv, această interfață este exportată. Dacă sistemul client nu are un dispozitiv de același tip, dispozitivul exportat nu va funcționa.

Pe sistemul client, atunci când montați obiecte NFS, puteți utiliza opțiunea nodev, astfel încât fișierele dispozitivului din directoarele montate să nu fie utilizate.

Funcțiile implicite pot varia între sisteme și pot fi găsite în /var/lib/nfs/etab. După descrierea directorului exportat în /etc/exports și repornirea serverului NFS, toate funcțiile lipsă (a se citi: funcții implicite) vor fi reflectate în fișierul /var/lib/nfs/etab.

Funcții pentru afișarea (potrivirii) ID-urilor de utilizator

Pentru o mai mare înțelegere Având în vedere cele ce urmează, v-aș sfătui să citiți articolul Gestionarea utilizatorilor Linux. Fiecare utilizator Linux are propriul său UID și GID principal, care sunt descrise în fișierele /etc/passwd și /etc/group.

Serverul NFS presupune că sistemul de operare al gazdei la distanță a autentificat utilizatorii și le-a atribuit UID-ul și GID-ul corect. Exportarea fișierelor oferă utilizatorilor sistemului client același acces la acele fișiere ca și cum ar fi fost logați direct pe server. În consecință, atunci când un client NFS trimite o cerere către server, serverul folosește UID și GID pentru a identifica utilizatorul în sistem local, ceea ce poate duce la unele probleme:


Următoarele funcții stabilesc regulile pentru afișarea utilizatorilor de la distanță în cei locali:

Un exemplu de utilizare a unui fișier de mapare utilizator:

ARCHIV ~ # cat /etc/file_maps_users # Maparea utilizatorului # uid comentariu local la distanță 0-50 O mie doi # utilizatori de mapare cu UID la distanță 0-50 la UID local O mie doi gid 0-50 O mie doi # utilizatori de mapare cu /span GID de la distanță 0-50 la GID local 1002

Managementul serverului NFS

Serverul NFS este gestionat folosind următoarele utilitare:

  • nfsstat
  • showmmontare sigură (nesigură).
  • exportfs

nfsstat: statistici NFS și RPC

Utilitarul nfsstat vă permite să vizualizați statisticile serverelor RPC și NFS. Funcțiile comenzii pot fi găsite în man nfsstat.

showmount: afișați informații despre starea NFS

utilitarul showmount interogă rpc.mountd pe gazda la distanță despre sistemele de fișiere montate. În mod implicit, este returnată o listă sortată de clienți. Chei:

  • --toate- este afișată o listă de clienți și puncte de montare indicând locul unde clientul a montat directorul. Este posibil ca aceste informații să nu fie de încredere.
  • --directoare- este afișată o listă de puncte de montare
  • --exporturi- o listă a sistemelor de fișiere exportate este dată pe baza credințelor nfsd

Când rulați showmount fără argumente, informațiile despre sistemele cărora li se permite montarea vor fi tipărite pe consolă local colecții. De exemplu, gazda ARCHIV ne oferă o listă de directoare exportate cu adrese IP ale gazdelor cărora li se permite să monteze colecțiile desemnate:

FIȘIERE ~ # showmount --exports archive Exportați lista pentru arhivă: /archiv-big 10.0.0.2 /archiv-small 10.0.0.2

Dacă specificați numele de gazdă/IP în argument, vor fi afișate informații despre această gazdă:

ARCHIV ~ # showmount files clnt_create: RPC: Programul nu este înregistrat # acest mesaj ne spune că NFSd nu rulează pe gazda FILES

exportfs: gestionați directoarele exportate

Această comandă servește colecții exportate, date din fișier /etc/exports, ar fi mai corect să scrieți că nu servește, ci se sincronizează cu fișierul /var/lib/nfs/xtabși le elimină pe cele inexistente din xtab. exportfs se face atunci când rulează demonul nfsd cu argumentul -r. Utilitarul exportfs în modul kernel 2.6 vorbește cu rpc.mountd imp prin fișierele din directorul /var/lib/nfs/ și nu vorbește direct cu nucleul. Fără trăsături, afișează o listă a sistemelor de fișiere exportate în prezent.

proprietățile exportfs:

  • [client:nume-director] - adăugați sau eliminați sistemul de fișiere desemnat pentru clientul desemnat)
  • -v - afișează mai multe informații
  • -r - reexportă toate colecțiile (sincronizează /etc/exports și /var/lib/nfs/xtab)
  • -u - elimina din lista de exportate
  • -a - adăugați sau eliminați toate sistemele de fișiere
  • -o - funcții separate prin virgule (similar cu opțiunile utilizate în /etc/exports; adică puteți schimba funcțiile sistemelor de fișiere deja montate)
  • -i - nu utilizați /etc/exports când adăugați, doar proprietățile liniei de comandă curente
  • -f - resetează lista sistemelor exportate în kernel 2.6;

Client NFS

Înainte de a accesa un fișier pe un sistem de fișiere la distanță, clientul trebuie să montați-lși primiți de la server indicatorul spre ea. Montare NFS se poate face folosind comenzi de montare sau folosind unul dintre dispozitivele de montare automate care prolifera (amd, autofs, automount, supermount, superpupermount). Procesul de instalare este perfect demonstrat în ilustrația de mai sus.

Pe Clienți NFS nu este nevoie să eliberezi vreun demoni, funcțiile clientului realizează un modul de kernel kernel/fs/nfs/nfs.ko, care este folosit la montarea unui sistem de fișiere la distanță. Colecțiile exportate de pe server pot fi instalate pe client în următoarele moduri:

  • manual folosind comanda mount
  • automat la pornire, la montarea sistemelor de fișiere prezentate în /etc/fstab
  • folosind automat demonul autofs

Nu voi lua în considerare a 3-a metodă cu autofs în acest articol, din cauza cantității mari de informații. Poate că va fi o descriere separată în articolele următoare.

Montarea sistemului de fișiere de rețea cu comanda mount

Un exemplu de utilizare a comenzii mount este prezentat în comenzile post Block Device Control. Aici mă voi uita la un exemplu de comandă mount pentru montarea unui sistem de fișiere NFS:

FIȘIERE ~ # mount -t nfs arhiv:/archiv-small /archivs/archiv-small FIȘIERE ~ # mount -t nfs -o ro arhiv:/archiv-big /archivs/archiv-big FIȘIERE ~ # mount ..... .. arhiv:/archiv-small pe /archivs/archiv-small tip nfs (rw,addr=10.0.0.6) arhiv:/archiv-big pe /archivs/archiv-big tip nfs (ro,addr=10.0.0.6)

Prima comandă montează directorul exportat /archiv-small pe serverul de arhivare la punctul de montare local /archivs/archiv-small cu opțiuni implicite (cu alte cuvinte, citire-scriere).

Deşi comanda de montareîn cele mai recente distribuții este capabil să se gândească la ce tip de sistem de fișiere este utilizat chiar și fără a specifica tipul, cu toate acestea, este mai bine să specificați parametrul -t nfs. A doua comandă montează directorul exportat /archiv-big pe serverul de arhive în directorul local /archivs/archiv-big cu opțiunea de numai citire (ro). comanda de montare fără caracteristici ne arată clar rezultatul montării. Pe lângă funcția de doar citire (ro), pot fi specificate și altele funcțiile principale la montarea NFS:

  • nosuid- Această funcție interzice execuția programelor setuid din directorul montat.
  • nodev(fără dispozitiv - nu dispozitiv) - Această funcție interzice utilizarea caracterelor și blochează fișierele speciale ca dispozitive.
  • blocare (nolock)- Permite blocarea NFS (implicit). nolock dezactivează blocarea NFS (nu rulează lockd) și este convenabil atunci când lucrați cu servere mai vechi care nu acceptă blocarea NFS.
  • mounthost=nume- Numele gazdei pe care rulează NFS mountless - mountd.
  • mountport=n - Portul folosit de mountd imp.
  • port=n- portul folosit pentru conectarea la serverul NFS (implicit este 2049 dacă rpc.nfsd nu este înregistrat pe serverul RPC). Dacă n=0 (implicit), atunci NFS trimite o solicitare către portmap de pe server pentru a găsi portul.
  • dimensiunea=n(citiți dimensiunea blocului - citiți dimensiunea blocului) - Numărul de octeți citiți la un moment dat de pe serverul NFS. Standard - 4096.
  • wsize=n(write block size - write block size) - Numărul de octeți scriiți simultan pe serverul NFS. Standard - 4096.
  • tcp sau udp- Pentru a monta NFS, utilizați protocolul TCP sau, respectiv, UDP.
  • bg- Dacă pierdeți accesul la server, repetați testele în fundal pentru a nu întrerupe procesul de pornire a sistemului.
  • fg- Dacă pierdeți accesul la server, repetați testele în modul prioritar. Această opțiune poate bloca procesul de pornire a sistemului prin repetarea încercărilor de montare. Din acest motiv, parametrul fg este folosit în principal pentru depanare.

Funcții care afectează memorarea în cache a atributelor pe monturile NFS

Atributele fișierului, stocate în inod (descriptori de index), cum ar fi timpul de modificare, dimensiunea, linkurile hard, proprietarul, de obicei se schimbă ocazional pentru fișierele obișnuite și chiar mai rar pentru directoare. Multe programe, cum ar fi ls, accesează fișierele doar în citire și nu modifică atributele sau conținutul fișierelor, ci risipesc resursele sistemului cu operațiuni costisitoare de rețea.

Pentru a evita irosirea resurselor inutile, poți stocați în cache aceste atribute. Nucleul folosește timpul de modificare a unui fișier pentru a determina dacă memoria cache este învechită, comparând timpul de modificare din cache și timpul de modificare a fișierului însuși. Cache-ul de atribute este actualizat periodic în conformitate cu acești parametri:

  • ac (noac)(attribute cache - attribute cache) - Permite punerea în cache a atributelor (în mod implicit). Deși noac încetinește serverul, evită învechirea atributelor atunci când mai mulți clienți scriu în mod activ informații într-o ierarhie comună.
  • acdirmax=n(maximum fișierul directorului cache al atributelor - stocarea în cache maximă a atributelor pentru un fișier director) - Numărul maxim de secunde pe care NFS le așteaptă înainte de a actualiza atributele directorului (implicit Șaizeci de secunde)
  • acdirmin=n(minimum fișierul directorului cache al atributelor - cache minim al atributelor pentru un fișier director) - Un număr mic de secunde pe care NFS le așteaptă înainte de a actualiza atributele directorului (implicit 30 sec.)
  • acregmax=n(maximum fișier cache a atributelor - stocarea în cache maximă a atributelor pentru un fișier obișnuit) - Numărul maxim de secunde pe care NFS le așteaptă înainte de a actualiza atributele unui fișier obișnuit (implicit Șaizeci de secunde)
  • acregmin=n(minimum al fișierului obișnuit din memoria cache a atributelor - cache minim al atributelor pentru un fișier obișnuit) - Un număr mic de secunde pe care NFS le așteaptă înainte de a actualiza atributele unui fișier obișnuit (implicit Trei secunde)
  • actimeo=n(atribut cache timeout - atribut cache timeout) - Înlocuiește valorile pentru toate opțiunile de mai sus. Dacă actimeo nu este specificat, atunci valorile de mai sus preiau valorile implicite.

Funcții de tratare a erorilor NFS

Următoarele funcții controlează ce face NFS atunci când nu există niciun răspuns de la server sau când apar erori I/O:

  • fg(bg)(prim-plan - prim-plan, fundal - fundal) - Creați probe de montare NFS nereușite în prim-plan/fond.
  • tare (moale)- afișează mesajul „serverul nu răspunde” la consolă când este atins timeout-ul și continuă montarea testelor. Cu această funcție moale- în timpul unui timeout, raportează o eroare I/O programului care a apelat operația. (se recomandă să nu folosiți opțiunea soft)
  • nointr (intr)(fără întrerupere) - Nu permite semnalelor să întrerupă operațiunile de fișiere într-o ierarhie de directoare montată greu atunci când este atins un timeout mare. intr- permite întreruperea.
  • retrans=n(valoare de retransmisie) - După n timeout-uri mici, NFS generează un timeout mare (implicit 3). Un timeout mare oprește operațiunile sau tipărește un mesaj „serverul nu răspunde” pe consolă, în funcție de dacă este specificată funcția hard/soft.
  • reîncercați=n(valoare de reîncercare) - Numărul de minute în care serviciul NFS va repeta operațiunile de montare înainte de a renunța (implicit 10000).
  • timeo=n(valoarea timeout) - Numărul de 10 de secundă pe care serviciul NFS îl așteaptă înainte de a retransmite în cazul RPC sau un timeout mic (implicit 7). Această valoare crește cu fiecare timeout până la o valoare mai mare de 60 de secunde sau până când apare un timeout mare. Dacă rețeaua este ocupată, serverul este lent sau cererea trece prin mai multe routere sau gateway-uri, creșterea acestei valori poate îmbunătăți performanța.

Montare automată NFS la pornire (descrierea sistemelor de fișiere în /etc/fstab)

Am atins descrierea fișierului /etc/fstab în articolul corespunzător. În exemplul actual, voi analiza câteva exemple de montare a sistemelor de fișiere NFS cu o descriere a opțiunilor:

FIȘIERE ~ # cat /etc/fstab | grep nfs arhiv:/archiv-small /archivs/archiv-small nfs rw,timeo=4,rsize=16384,wsize=16384 Null Null nfs-server:/archiv-big /archivs/archiv-big nfs rw,timeo=50 ,hard,fg Zero 0

Primul exemplu montează sistemul de fișiere /archiv-small de la gazda arhiv la punctul de montare /archivs/archiv-small, tipul sistemului de fișiere este specificat ca nfs (trebuie specificat întotdeauna pentru de acest tip), sistemul de fișiere este montat cu opțiunea de citire-scriere (rw).

Gazda arhivei este conectată printr-un canal local rapid, astfel încât pentru a crește performanța, parametrul timeo a fost redus, iar valorile rsiize și wsize au fost semnificativ crescute. Câmpurile pentru programele dump și fsck sunt setate la zero, astfel încât aceste programe să nu utilizeze un sistem de fișiere montat pe NFS.

Al doilea exemplu montează sistemul de fișiere /archiv-big de la gazda serverului nfs. Deoarece Suntem conectați la gazda serverului nfs printr-o conexiune lentă, parametrul timeo este crescut la 5 secunde (50 10 de secundă), iar parametrul hard este, de asemenea, setat greu, astfel încât NFS să continue să remonteze sistemul de fișiere după o perioadă lungă de timp. timeout, parametrul fg este de asemenea setat, astfel încât atunci când sistemul pornește și gazda nfs-server nu este disponibilă, acesta să nu se înghețe.

Înainte de a salva configurațiile în /etc/fstab, asigurați-vă că încercați să montați manual și asigurați-vă că totul funcționează!!!

Performanță NFS îmbunătățită

Performanța NFS poate fi afectată de mai multe lucruri, mai ales atunci când rulează pe conexiuni lente. Când lucrați cu conexiuni lente și puternic încărcate, este mai bine să utilizați parametrul hard, astfel încât intervalele de timp să nu facă ca programele să nu mai funcționeze. Dar trebuie să luați în considerare că dacă montați un sistem de fișiere prin NFS cu parametrul hard prin fstab și gazda la distanță nu este accesibilă, atunci sistemul se va îngheța la pornire.

De asemenea, una dintre cele mai ușoare modalități de a crește performanța NFS este creșterea numărului de octeți transferați la un moment dat. Dimensiunea de Patru mii nouăzeci și șase de octeți este foarte mică pentru conexiunile rapide moderne, creșterea acestei valori la Opt mii 100 nouăzeci și doi sau mai mult poate fi găsită experimental pentru a găsi cea mai bună viteză.

De asemenea, nu trebuie pierdut din vedere funcții de timeout. NFS așteaptă un răspuns la transferul de date în perioada de timp specificată în funcția timeo dacă nu se primește un răspuns în acest timp, atunci se efectuează un transfer repetat;

Dar pe ocupat și conexiuni lente Acest timp poate fi mai mic decât timpul de răspuns al serverului și capacitatea canalului de comunicare, ceea ce duce la retransmisii inutile care încetinesc funcționarea În mod implicit, timeo este de 0,7 secunde (700 milisecunde). după niciun răspuns timp de șapte sute de ms, serverul va retransmite și va dubla timpul de așteptare la 1,4 secunde, creșterea timpului va continua la o valoare mai mare de șaizeci de secunde. În continuare, în funcție de parametrul hard/soft, va avea loc o anumită acțiune (vezi mai sus).

Puteți selecta cel mai bun timp pentru o anumită valoare a pachetului transmis (valori rsiize/wsize) folosind comanda ping:

FIȘIERE ~ # ping -s 30 două mii șapte sute șaizeci și opt arhiv PING arhiv.DOMAIN.local (10.0.0.6) 32768(32796) octeți de date. 30 două mii șapte sute 70 6 octeți din archiv.domain.local (10.0.0.6): icmp_req=1 ttl=64 time=0,931 ms 30 două mii șapte sute 70 6 octeți din archiv.domain.local (10.0.0.6): icmp_req= 2 ttl=64 time=0,958 ms 30 două mii șapte sute 70 6 octeți din archiv.domain.local (10.0.0.6): icmp_req=3 ttl=64 time=1,03 ms 30 două mii șapte sute 70 6 octeți din arhivă .domain.local (10.0.0.6): icmp_req=4 ttl=64 time=1,00 ms 30 două mii șapte sute 70 6 octeți din archiv.domain.local (10.0.0.6): icmp_req=5 ttl=64 time=1,08 ms ^C --- statistici ping arhiv.DOMAIN.local --- 5 pachete transmise, 5 primite, 0% pierdere de pachete, timp 4006ms rtt min/avg/max/mdev = 0.931/1.002/1.083/0.061 ms

După cum puteți vedea, atunci când trimiteți un pachet de dimensiunea 30 două mii șapte sute șaizeci și opt (32Kb), timpul său de călătorie de la client la server și înapoi plutește în jur de O milisecundă. Dacă acest timp depășește două sute de ms, atunci ar trebui să vă gândiți la creșterea valorii timeo, astfel încât să depășească valoarea de schimb de trei până la patru ori. În consecință, este mai bine să faceți acest test în timpul sarcinii grele ale rețelei

Lansarea NFS și configurarea paravanului de protecție

Nota a fost copiata de pe blogul http://bog.pp.ru/work/NFS.html, pentru care multumesc mult!!!

Rulați serverul NFS, montați, blocați, cota și starea cu porturi „corecte” (pentru firewall)

  • este mai bine să demontați mai întâi toate resursele de pe clienți
  • opriți și dezactivați pornirea rpcidmapd dacă NFSv4 nu este planificat: chkconfig --level Trei sute 40 5 rpcidmapd off service rpcidmapd stop
  • dacă este necesar, permiteți pornirea serviciilor portmap, nfs și nfslock: chkconfig --levels Trei sute 40 5 portmap/rpcbind pe chkconfig --levels Trei sute 40 5 nfs pe chkconfig --levels Trei sute 40 5 nfslock activat
  • dacă este necesar, opriți serviciile nfslock și nfs, porniți portmap/rpcbind, descărcați modulele service nfslock stop service nfs stop service portmap start # service rpcbind start umount /proc/fs/nfsd service rpcidmapd stop rmmod nfsd service autofs stop # undeva mai târziu trebuie rulat rmmod nfs rmmod nfs_acl rmmod lockd
  • deschideți porturi în iptables
    • pentru RPC: UDP/111, TCP/111
    • pentru NFS: UDP/2049, TCP/2049
    • pentru rpc.statd: UDP/4000, TCP/4000
    • pentru blocare: UDP/4001, TCP/4001
    • pentru mountd: UDP/4002, TCP/4002
    • pentru rpc.rquota: UDP/4003, TCP/4003
  • pentru serverul rpc.nfsd, adăugați linia RPCNFSDARGS="--port 2049" la /etc/sysconfig/nfs
  • pentru serverul de montare, adăugați linia MOUNTD_PORT=4002 la /etc/sysconfig/nfs
  • pentru funcția rpc.rquota pentru versiuni noi, trebuie să adăugați linia RQUOTAD_PORT=4003 la /etc/sysconfig/nfs
  • pentru funcția rpc.rquota este necesar pentru versiunile mai vechi (la urma urmei, trebuie să aveți pachetul de cotă 3.08 sau mai nou) adăugați la /etc/services rquotad 4003/tcp rquotad 4003/udp
  • va verifica caracterul adecvat al /etc/exports
  • rulați serviciile rpc.nfsd, mountd și rpc.rquota (rpcsvcgssd și rpc.idmapd sunt lansate în același timp, dacă vă amintiți să le ștergeți) service nfsd start sau în versiuni noi service nfs start
  • pentru serverul de blocare pentru sisteme noi, adăugați liniile LOCKD_TCPPORT=4001 LOCKD_UDPPORT=4001 la /etc/sysconfig/nfs
  • pentru serverul de blocare pentru sisteme mai vechi, adăugați direct în /etc/modprobe[.conf]: opțiuni lockd nlm_udpport=4001 nlm_tcpport=4001
  • legați serverul de stare rpc.statd la portul Patru Mii (pentru sisteme mai vechi, rulați rpc.statd cu cheia -p 4000 în /etc/init.d/nfslock) STATD_PORT=4000
  • porniți serviciile lockd și rpc.statd service nfslock start
  • asigurați-vă că toate porturile sunt legate în mod normal folosind „lsof -i -n -P” și „netstat -a -n” (unele dintre porturi sunt folosite de modulele kernel pe care lsof nu le vede)
  • dacă înainte de „reconstruire” serverul era folosit de clienți și nu puteau fi demontați, atunci va trebui să reporniți serviciile pe clienți montaj automat(am-utils, autofs)

Exemplu de configurare pentru server și client NFS

Configurare server

Dacă doriți să faceți directorul dvs. partiționat NFS public și inscriptibil, puteți utiliza opțiunea all_squash în combinație cu opțiunile anonuid și anongid. De exemplu, pentru a seta permisiuni pentru utilizatorul „nimeni” din grupul „nimeni”, puteți face următoarele:

ARCHIV ~ # cat /etc/exports # Acces de citire și scriere pentru client pe 192.168.0.100, cu acces rw pentru utilizatorul Ninety-nine cu gid Ninety-nine /files 192.168.0.100(rw,sync,all_squash,anonuid=99,anongid = 99)) # Acces de citire și scriere pentru client pe 192.168.0.100, cu acces rw pentru utilizatorul Nouăzeci și nouă cu gid Nouăzeci și nouă /fișiere 192.168.0.100(rw,sync,all_squash,anonuid=99,anongid=99))

Aceasta înseamnă, de asemenea, că, dacă doriți să permiteți accesul la un director desemnat, nobody.nobody trebuie să fie proprietarul directorului partajat:

# chown -R nimeni.nimeni /fișiere

Configurare client

Pe client, trebuie să montați directorul la distanță într-un mod convenabil, de exemplu cu comanda mount:

FIȘIERE ~ # mount -t nfs archive:/files /archivs/files

Relua

Puff... Articolul s-a terminat. Momentan am studiat ce este sistemul de fișiere de rețeași cum să-l mănânc, în următorul articol voi încerca să fac un HOWTO cu autentificare Kerberos. Sper că materialul a fost inteligibil și necesar.

Mă bucur să văd completările și comentariile tale!

NFS HOWTO, nfs.sourceforge, man nfs? man mount, omul exportă

RFC O mie nouăzeci și patru - NFSv1, v2
RFC O mie opt sute treisprezece - NFSv3
RFC Trei mii 500 30 - NFSv4
RFC 5 mii 600 șaizeci și unu - NFSv4.1
NFS HOWTO
nfs.sourceforge.net
man mount
omul exportă

Protocolul Network File Server (NFS) este un standard deschis pentru furnizarea accesului utilizatorilor de la distanță la sistemele de fișiere. Sistemele de fișiere centralizate create pe baza acestuia facilitează realizarea sarcinilor zilnice, cum ar fi backup sau scanarea virușilor și partițiile consolidate ale discurilor sunt mai ușor de întreținut decât multe dintre cele mici și distribuite.

Pe lângă furnizarea de stocare centralizată, NFS s-a dovedit a fi foarte util pentru alte aplicații, inclusiv pentru clienții fără disc și thin, clustering de rețea și colaborarea middleware.

O mai bună înțelegere atât a protocolului în sine, cât și a detaliilor implementării acestuia va face mai ușor să faceți față problemelor practice. Acest articol este dedicat NFS și constă din două părți logice: mai întâi, descrie protocolul în sine și obiectivele stabilite în timpul dezvoltării sale, iar apoi implementarea NFS în Solaris și UNIX.

UNDE A ÎNCEPUT TOTUL...

Protocolul NFS a fost dezvoltat de Sun Microsystems și a apărut pe Internet în 1989 ca RFC 1094 sub următorul titlu: Network File System Protocol Specification (NFS). Este interesant de remarcat faptul că strategia Novell la acea vreme viza îmbunătățirea în continuare a serviciilor de fișiere. Până de curând, în timp ce mișcarea pentru sursă deschisă Sun nu luase încă avânt, Sun nu era dornic să dezvăluie secretele soluțiilor sale de rețea, dar chiar și atunci compania a înțeles importanța interoperabilității cu alte sisteme.

RFC 1094 conținea două specificații originale. Până la data publicării sale, Sun dezvolta deja următoarea, a treia versiune a specificației, care este stabilită în RFC 1813 „NFS Version 3 Protocol Specification”. Versiunea 4 a acestui protocol este definită în RFC 3010, NFS Version 4 Protocol.

NFS este utilizat pe scară largă pe toate tipurile de gazde UNIX, pe rețelele Microsoft și Novell și pe soluții IBM, cum ar fi AS400 și OS/390. Deși necunoscut în afara regnului rețelelor, NFS este poate cel mai răspândit sistem de fișiere de rețea independent de platformă.

UNIX A FOST GENEZA

Deși NFS este un sistem independent de platformă, strămoșul său este UNIX. Cu alte cuvinte, arhitectura ierarhică și metodele de acces la fișiere ale arhitecturii, inclusiv structura sistemului de fișiere, modalitățile de identificare a utilizatorilor și a grupurilor și tehnicile de gestionare a fișierelor, toate seamănă foarte mult cu sistemul de fișiere UNIX. De exemplu, sistemul de fișiere NFS, fiind structural identic cu sistemul de fișiere UNIX, este montat direct pe acesta. Când lucrați cu NFS pe alte sisteme de operare, parametrii de identificare a utilizatorului și drepturile de acces la fișiere sunt supuse maparii.

NFS

NFS este conceput pentru a fi utilizat într-o arhitectură client-server. Clientul accesează sistemul de fișiere exportat de serverul NFS printr-un punct de montare pe client. Acest acces este de obicei transparent pentru aplicația client.

Spre deosebire de multe sisteme client-server, NFS utilizează Remote Procedure Calls (RPC) pentru a face schimb de informații. De obicei, clientul stabilește o conexiune la un port cunoscut anterior și apoi, în conformitate cu protocolul, trimite o solicitare pentru a efectua o anumită acțiune. În cazul apelurilor de procedură la distanță, clientul creează un apel de procedură și apoi îl trimite către server pentru execuție. O descriere detaliată a NFS va fi prezentată mai jos.

De exemplu, să presupunem că un client a montat directorul usr2 pe sistemul de fișiere rădăcină local:

/root/usr2/ -> remote:/root/usr/

Dacă o aplicație client are nevoie de resurse din acest director, pur și simplu trimite o cerere către sistemul de operare pentru aceasta și numele fișierului, care acordă acces prin clientul NFS. De exemplu, luați în considerare comandă simplă CD UNIX, care „nu știe nimic” despre protocoalele de rețea. Echipă

Cd /root/usr2/

va plasa directorul de lucru pe un sistem de fișiere la distanță, „fără să-și dea seama” (de asemenea, utilizatorul nu are nevoie de acest lucru) că sistemul de fișiere este la distanță.

La primirea cererii, serverul NFS va verifica dacă utilizator dat dreptul de a efectua acțiunea solicitată și, dacă răspunsul este pozitiv, o va efectua.

SĂ CUNOAȘM MAI BINE

Din punctul de vedere al clientului, procesul de montare locală a unui sistem de fișiere la distanță folosind NFS constă din mai mulți pași. După cum sa menționat, clientul NFS va emite un apel de procedură de la distanță pentru a-l executa pe server. Rețineți că în UNIX, clientul este un singur program (comanda mount), în timp ce serverul este implementat ca mai multe programe cu următorul set minim: un serviciu de cartografiere de porturi, un demon de montare și un server NFS.

Comanda client mount comunică mai întâi cu serviciul de traducere a portului al serverului, care ascultă cererile pe portul 111. Cele mai multe implementări ale comenzii client mount acceptă versiuni multiple de NFS, ceea ce crește probabilitatea de a găsi o versiune de protocol comun pentru client și server. Căutarea se efectuează pornind de la cea mai veche versiune, astfel încât atunci când este găsită cea comună, aceasta va deveni automat cea mai mare noua versiune dintre cele suportate de client și server.

(Materialul prezentat este axat pe cea de-a treia versiune a NFS, deoarece este cea mai răspândită în acest moment. A patra versiune nu este încă susținută de majoritatea implementărilor.)

Serviciul de traducere porturi al serverului răspunde solicitărilor pe baza protocolului acceptat și a portului pe care rulează demonul de montare. Programul client de montare stabilește mai întâi o conexiune la demonul de montare al serverului și apoi îi lansează comanda de montare prin RPC. Dacă această procedură cu succes, aplicația client se conectează la serverul NFS (port 2049) și, folosind una dintre cele 20 de proceduri la distanță care sunt definite în RFC 1813 și enumerate în Tabelul 1, obține acces la sistemul de fișiere la distanță.

Semnificația majorității comenzilor este intuitivă și nu provoacă dificultăți administratorilor de sistem. Următoarea listă, obținută folosind tcdump, ilustrează comanda de citire generată de comanda UNIX cat pentru a citi un fișier numit test-file:

10:30:16.012010 eth0 > 192.168.1.254.

3476097947 > 192.168.1.252.2049: 144 lookup fh 32.0/ 224145 "test-file" 10:30:16.012010 eth0 > 192.168.1.254.

3476097947 > 192.168.1.252.2049: 144 de căutare fh 32.0/ 224145 „fișier de testare” 10:30:16.012729 eth0 192.168.1.254.3476.254.3472.2002.2002 307 (DF) 10:30: 16.012729 eth0 192.168 .1.254.3476097947: răspuns ok 128 lookup fh 32.0/224307 (DF) 10:30:16.013124 eth0 > 192.168.1.254. 3492875163 > 192.168.1.252.2049: 140 citiți fh 32.0/ 224307 4096 octeți @ 0 10:30:16.013124 eth0 > 192.168.1.254. 3492875163 > 192.168.1.252.2049: 140 citiți fh 32.0/ 224307 4096 octeți @ 0 10:30:16.013650 eth0 192.168.1.254: rep. 81 DF 0:16.013650 eth0 192.168.1.254.3492875163 : răspuns ok 108 citit (DF)

NFS a fost implementat în mod tradițional prin UDP. Cu toate acestea, unele versiuni ale NFS acceptă TCP (suportul TCP este definit în specificația protocolului). Principalul avantaj al TCP este un mecanism de retransmisie mai eficient în rețelele nesigure. (Cu UDP, dacă apare o eroare, întregul mesaj RPC, constând din mai multe pachete UDP, este retrimis. Cu TCP, doar fragmentul rupt este retrimis.)

ACCES NFS Implementările NFS acceptă de obicei patru moduri de a acorda drepturi de acces: prin atribute utilizator/fișier, la nivel de resurse partajate, la nivel de nod principal și ca o combinație a altor metode de acces. Prima metodă se bazează pe sistemul de permisiuni pentru fișiere UNIX încorporat pentru

utilizator individual

sau grupuri. Pentru a simplifica întreținerea, identificarea utilizatorilor și a grupului ar trebui să fie consecventă pe toți clienții și serverele NFS. Securitatea trebuie luată în considerare cu atenție: NFS poate oferi din neatenție acces la fișiere care nu au fost destinate când au fost create. Accesul la nivel de partajare vă permite să restricționați drepturile pentru a permite numai anumite acțiuni, indiferent de proprietatea fișierului sau privilegiile UNIX. De exemplu, lucrul cu sistemul de fișiere NFS poate fi limitat la doar citire. Majoritatea implementărilor NFS vă permit să restricționați accesul la nivel de resurse partajate la anumiți utilizatori și/sau grupuri. De exemplu, grupului de Resurse Umane i se permite să vizualizeze informații și nimic mai mult., deoarece sistemele de fișiere pot fi create cu ușurință pe orice nod care acceptă NFS.

Accesul combinat combină pur și simplu tipurile de mai sus (de exemplu, acces la nivel partajat cu acces acordat unui anumit utilizator) sau permite utilizatorilor să acceseze NFS numai de la un anumit nod.

NFS ÎN STIL PINGUIN

Materialul legat de Linux se bazează pe Red Hat 6.2 cu versiunea de nucleu 2.4.9, care este livrat cu versiunea nfs-utils 0.1.6. Există și versiuni mai noi: la momentul scrierii acestui articol, cele mai multe ultima actualizare Numărul pachetului nfs-utils a fost 0.3.1. Poate fi descărcat de pe: .

Pachetul nfs-utils conține următoarele executabile: exportfs, lockd, mountd, nfsd, nfsstat, nhfsstone, rquotad, showmount și statd.

Din păcate, suportul NFS este uneori o sursă de confuzie pentru administratorii Linux, deoarece disponibilitatea unei anumite caracteristici depinde direct de numerele de versiune ale nucleului și ale pachetului nfs-utils. Din fericire, lucrurile se îmbunătățesc în acest domeniu, cele mai recente distribuții incluzând cele mai recente versiuni ale ambelor. Pentru versiunile anterioare, secțiunea 2.4 din NFS-HOWTO oferă lista completa funcţionalitate sisteme disponibile pentru fiecare combinație de pachete kernel și nfs-utils. Sprijin pentru dezvoltatori compatibil invers pachet cu versiuni anterioare, acordând o mare atenție asigurării securității și eliminării erorilor software.

Suportul NFS ar trebui să fie inițiat în timpul compilării nucleului. Dacă este necesar, capacitatea de a lucra cu NFS versiunea 3 ar trebui adăugată la nucleu.

Pentru distribuțiile care acceptă linuxconf, este ușor să configurați serviciile NFS atât pentru clienți, cât și pentru servere. Cu toate acestea, modalitatea rapidă de a instala NFS folosind linuxconf nu oferă informații despre ce fișiere au fost create sau editate, ceea ce este foarte important pentru administrator să cunoască situația în cazul unei defecțiuni a sistemului. Arhitectura NFS pe Linux are o cuplare slabă cu versiunea BSD, deci fisierele necesareși programele de asistență sunt ușor de găsit pentru administratorii care rulează BSD, Sun OS 2.5 sau versiuni anterioare de NFS.

Fișierul /etc/exports, ca și în versiunile anterioare ale BSD, definește sistemele de fișiere pe care clienții NFS au voie să le acceseze. În plus, conține un număr caracteristici suplimentare legate de probleme de management și securitate, oferind administratorului un mijloc de reglare fină. Acesta este un fișier text format din intrări, rânduri goale sau comentate (comentariile încep cu simbolul #).

Să presupunem că vrem să oferim clienților acces numai în citire la directorul /home de pe nodul Lefty. Aceasta ar corespunde următoarei intrări din /etc/exports:

/home (ro)

Aici trebuie să spunem sistemului ce directoare vom face accesibile utilizând demonul de montare rpc.mountd:

# exportfs -r exportfs: Nu este specificat niciun nume de gazdă în /home (ro), introduceți *(ro) pentru a evita avertismentul #

Când este rulată, comanda exportfs emite un avertisment că /etc/exports nu restricționează accesul la un anumit nod și creează o intrare corespunzătoare în /var/lib/nfs/etab din /etc/exports care spune ce resurse pot fi vizualizate folosind cat :

# cat /var/lib/nfs/etab /home (ro,async,wdelay,hide,secure,root_squash, no_all_squash,subtree_check, secure_locks, mapping=identity,anonuid=-2,anongid=-2)

Alte opțiuni enumerate în etab includ valorile implicite utilizate de NFS. Detaliile vor fi descrise mai jos. Pentru a oferi acces la directorul /home, trebuie să porniți serviciile NFS corespunzătoare:

# portmap # rpc.mountd # rpc.nfsd # rpc.statd # rpc.rquotad

În orice moment după pornirea demonului de montare (rpc.mountd), puteți vizualiza fișierele individuale disponibile pentru ieșire, vizualizând conținutul fișierului /proc/fs/nfs/exports:

# cat /proc/fs/nfs/exports # Versiunea 1.0 # Path Client(Flags) # IP-uri /home 192.168.1.252(ro,root_squash,async, wdelay) # 192.168.1.252 #

Același lucru poate fi vizualizat folosind comanda showmount cu parametrul -e:

# showmount -e Exportați lista pentru stângaci: /home (toți) #

Având un pic înainte, comanda showmount poate fi folosită și pentru a determina toate sistemele de fișiere montate sau, cu alte cuvinte, pentru a afla care noduri sunt clienți NFS pentru sistemul care rulează comanda showmount. Comanda showmount -a va lista toate punctele de montare client:

# showmount -a Toate punctele de montare pe stânga: 192.168.1.252:/home #

După cum sa menționat mai sus, majoritatea implementărilor NFS acceptă diferite versiuni ale acestui protocol. Implementarea Linux vă permite să limitați lista de versiuni NFS care pot fi lansate prin specificarea comutatorului -N pentru demonul de montare. De exemplu, pentru a rula NFS versiunea 3 și numai versiunea 3, introduceți următoarea comandă:

# rpc.mountd -N 1 -N 2

Utilizatorii frecvenți pot considera incomod ca demonul NFS al Linux (rpc.nfsd) să aștepte pachetele versiunii 1 și 2, deși acest lucru are efectul dorit de a nu suporta protocolul corespunzător. Să sperăm că dezvoltatorii versiunilor următoare vor face corecțiile necesare și vor putea obține o mai mare consistență între componentele pachetului în raport cu versiuni diferite protocol.

„ÎNOT CU PINGUINI”

Acces la Lefty configurat mai sus, exportat sistemul de fișiere NFS activat Bazat pe Linux, depinde de sistemul de operare client. Stilul de instalare pentru majoritatea sistemelor de operare din familia UNIX coincide cu stilul fiecăreia sisteme sursă Sun OS și BSD sau Solaris mai nou. Deoarece acest articol este despre Linux și Solaris, să ne uităm la configurația clientului Solaris 2.6 din punctul de vedere al stabilirii unei conexiuni cu versiunea Linux a NFS pe care am descris-o mai sus.

Datorită caracteristicilor moștenite de la Solaris 2.6, acesta poate fi ușor configurat pentru a acționa ca client NFS. Aceasta necesită o singură comandă:

# mount -F nfs 192.168.1.254:/home /tmp/tmp2

Presupunând că comanda de montare anterioară a avut succes, atunci comanda de montare fără parametri va scoate următoarele:

# mount / on /dev/dsk/c0t0d0s0 read/write/setuid/ largefiles on Mon Sep 3 10:17:56 2001 ... ... /tmp/tmp2 on 192.168.1.254:/home read/ write/remote on Luni, 3 septembrie 23:19:25 2001

Să analizăm ieșirea tcpdump primită pe nodul Lefty după ce utilizatorul a lansat comanda ls /tmp/tmp2 pe nodul Sunny:

# tcpdump gazdă lefty și gazdă sunny -s512 06:07:43.490583 sunny.2191983953 > lefty.mcwrite.n.nfs: 128 getattr fh Necunoscut/1 (DF) 06:07:43.490678 lefty.nnny.mcwrite > 2191983953: răspuns ok 112 getattr DIR 40755 ids 0/0 sz 0x000001000 (DF) 06:07:43.491397 sunny.2191983954 > lefty.mcwrite.n.nfs: fh 13/20:00 43,491463 stângaci. mcwrite.n.nfs > sunny.2191983954: răspuns ok 120 acces c0001 (DF) 06:07:43.492296 sunny.2191983955 > lefty.mcwrite.n.nfs: 152 readdirplus/fh 07008/167008. 00000 (DF) 06 :07:43.492417 lefty.mcwrite.n.nfs > sunny.2191983955: răspuns ok 1000 readdirplus (DF)

Vedem că nodul Sunny solicită un handle de fișier (fh) pentru ls, la care nodul Lefty răspunde cu OK și returnează structura directorului. Sunny verifică apoi permisiunea de a accesa conținutul directorului (132 acces fh) și primește un răspuns de permisiune de la Lefty. Nodul Sunny citește apoi întregul conținut al directorului folosind rutina readdirplus. Apelurile de procedură de la distanță sunt descrise în RFC 1813 și sunt enumerate la începutul acestui articol.

Deși secvența de comandă pentru accesarea sistemelor de fișiere de la distanță este foarte simplă, o serie de circumstanțe pot face ca sistemul să se monteze incorect. Înainte de a monta un director, punctul de montare trebuie să existe deja, altfel trebuie creat folosind comanda mkdir. De obicei, singura cauză a erorilor din partea clientului este lipsa unui director de montare local. Cele mai multe probleme asociate cu NFS se datorează unei nepotriviri între client și server sau configurației incorecte a serverului.

Cel mai simplu mod de a depana problemele de pe un server este de la nodul pe care rulează serverul. Cu toate acestea, atunci când altcineva administrează serverul pentru tine, acest lucru nu este întotdeauna posibil. Mod rapid Pentru a vă asigura că serviciile de server corespunzătoare sunt configurate corect, utilizați comanda rpcinfo cu parametrul -p. Din gazda Solaris Sunny, puteți determina ce procese RPC sunt înregistrate pe gazda Linux:

# rpcinfo -p 192.168.1.254 program vers proto port service 100000 2 tcp 111 rpcbind 100000 2 udp 111 rpcbind 100024 1 udp 692 status 100024 1904 100024 100024 udp mount d /100005 3 tcp 1024 mountd 100003 2 udp 2049 nfs 100003 3 udp 2049 nfs 100021 1 udp 1026 nlockmgr 100021 3 udp 1026 nlockmgr 100021 4 udp 1026 nlockmgr #

Rețineți că aici sunt furnizate și informații despre versiune, ceea ce este destul de util atunci când sistemul necesită suport pentru diferite protocoale NFS. Dacă vreun serviciu nu rulează pe server, atunci această situație trebuie corectată. Dacă montarea eșuează, următoarea comandă rpcinfo -p vă va ajuta să determinați că serviciul mountd de pe server nu rulează:

# rpcinfo -p 192.168.1.254 program vers proto port service 100000 2 tcp 111 rpcbind ... ... 100021 4 udp 1026 nlockmgr #

Comanda rpcinfo este foarte utilă pentru a afla dacă un anumit proces de la distanță este activ. Parametrul -p este cel mai important dintre comutatoare. Pentru a vedea toate caracteristicile rpcinfo, consultați pagina de manual.

Un alt instrument util este comanda nfsstat. Cu ajutorul acestuia, puteți afla dacă clienții accesează efectiv sistemul de fișiere exportat și, de asemenea, puteți afișa informații statistice în conformitate cu versiunea protocolului.

În cele din urmă, un alt instrument destul de util pentru a determina cauzele defecțiunilor sistemului este tcpdump:

# tcpdump gazdă lefty și gazdă sunny -s512 tcpdump: ascultare pe eth0 06:29:51.773646 sunny.2191984020 > lefty.mcwrite.n.nfs: 140 căutare fh Necunoscut/1"test.c" (DF): 581:7293:58. lefty.mcwrite.n.nfs > sunny.2191984020: răspuns ok 116 căutare EROARE: Nu există un astfel de fișier sau director (DF) 06:29:51.774593 sunny.2191984021 > lefty.mcwrite.n.nfs: 128 Unknown getattr (fh28) DF) 06:29:51.774670 lefty.mcwrite.n.nfs > sunny.2191984021: răspuns ok 112 getattr DIR 40755 ids 0/0 sz 0x000001000 (DF) 06.775:2891 lefty > sunny. mcwrite.n.nfs : 140 căutare fh Unknown/1"test.c" (DF) 06:29:51.775357 lefty.mcwrite.n.nfs > sunny.2191984022: răspuns ok 116 căutare EROARE: Nu există un astfel de fișier sau director (DF) 06:29: 51.776029 sunny.2191984023 > lefty.mcwrite.n.nfs: 184 create fh Unknown/1 "test.c" (DF) 06:29:51.776169 lefty.mcwrite.n.nfs > sunny.21931984 ERROR create ok: ERROR Permisiune refuzată (DF)

Lista de mai sus, produsă prin executarea instrucțiunii touch test.c, arată următoarea secvență de acțiuni: mai întâi comanda touch încearcă să acceseze un fișier numit test.c, apoi caută un director cu același nume și după încercări nereușite încearcă să creeze un fișier test.c , care, de asemenea, nu duce la succes.

Dacă sistemul de fișiere este montat, cele mai frecvente erori sunt legate de permisiunile UNIX normale. Utilizarea unui uid sau NIS+ pe Sun vă ajută să evitați setarea globală a permisiunilor pentru toate sistemele de fișiere. Unii administratori practică directoare „deschise”, unde accesul de citire este dat „întregii lumi”. Cu toate acestea, acest lucru ar trebui evitat din motive de siguranță. Pe lângă preocupările de securitate, această abordare este încă o practică proastă, deoarece utilizatorii rareori creează date cu intenția de a le face lizibile de către toată lumea.

Accesul unui utilizator privilegiat (rădăcină) la sistemele de fișiere NFS montate este tratat diferit. Pentru a evita acordarea unui utilizator privilegiat acces nelimitat, cererile de la utilizatorul privilegiat sunt tratate ca și cum ar veni de la utilizatorul nimeni. Acest mecanism puternic limitează accesul utilizatorilor privilegiați la fișiere care pot fi citite și inscriptibile la nivel global.

VERSIUNEA SOLARIS SERVER NFS

Configurarea Solaris pentru a acționa ca un server NFS este la fel de ușoară ca și cu Linux. Cu toate acestea, comenzile și locațiile fișierelor sunt ușor diferite. La bootstrap Solaris, la atingerea nivelului de rulare 3, serviciile NFS sunt pornite automat și toate sistemele de fișiere sunt exportate. Pentru a porni aceste procese manual, introduceți comanda:

#/usr/lib/nfs/mountd

Pentru a porni demonul de montare și serverul NFS, introduceți:

#/usr/lib/nfs/nfsd

Începând cu versiunea 2.6, Solaris nu mai utilizează un fișier de export pentru a specifica ce sisteme de fișiere să exporte. Fișierele sunt acum exportate folosind comanda share. Să presupunem că vrem să permitem gazdelor de la distanță să monteze /export/home. Pentru a face acest lucru, introduceți următoarea comandă:

Partajați -F nfs /export/home

Măsuri de securitate

SECURITATE ÎN LINUX

Unele servicii de sistem NFS sunt activate Bazat pe Linux au un mecanism suplimentar de restricționare a accesului prin liste de control sau tabele. La nivel intern, acest mecanism este implementat folosind biblioteca tcp_wrapper, care folosește două fișiere pentru a genera liste de control acces: /etc/hosts.allow și /etc/hosts/deny. O privire de ansamblu cuprinzătoare a regulilor de lucru cu tcp_wrapper depășește scopul acestui articol, dar principiul de bază este următorul: comparația se face mai întâi cu etc/hosts.allow și apoi cu /etc/hosts. nega. Dacă regula nu este găsită, atunci este solicitată serviciul de sistem nu apare. Pentru a ocoli această ultimă cerință și pentru a oferi un nivel foarte ridicat de securitate, puteți adăuga următoarea intrare la sfârșitul /etc/hosts.deny:

TOȚI: Toate

După aceasta, puteți utiliza /etc/hosts.allow pentru a seta unul sau altul mod de operare. De exemplu, fișierul /etc/hosts. allow, pe care l-am folosit când am scris acest articol, conținea următoarele rânduri:

Lockd:192.168.1.0/255.255.255.0 mountd:192.168.1.0/255.255.255.0 portmap:192.168.1.0/255.255.255.0 rquotad:192.255.0525.255.0525. 1 68.1.0/255.255.255.0

Acest lucru permite un anumit tip de acces la gazde înainte de a acorda acces la nivel de aplicație. Pe Linux, accesul la nivel de aplicație este controlat de fișierul /etc/exports. Constă din intrări în următorul format:

Export director (spațiu) gazdă|rețea (opțiuni)

Un „director de export” este un director pentru care demonul nfsd îi este permis să proceseze cereri. O „gazdă|rețea” este gazda sau rețeaua care are acces la sistemul de fișiere exportat, iar „opțiunile” definesc restricțiile pe care demonul nfsd le impune utilizării acestei resurse partajate - acces numai în citire sau mapare a ID-ului utilizatorului. .

Următorul exemplu oferă întregului domeniu mcwrite.net acces numai în citire la /home/mcwrite.net:

/home/mcwrite.net *.mcwrite.net(ro)

Mai multe exemple pot fi găsite în pagina de manual pentru exporturi.

SECURITATE NFS ÎN SOLARIS

Solaris oferă opțiuni de acces NFS similare cu Linux, dar în acest caz restricțiile sunt stabilite folosind anumiti parametriîn comanda share cu comutatorul -o. Următorul exemplu arată cum să activați montarea numai în citire a /export/mcwrite.net pe orice gazdă din domeniul mcwrite.net:

#share -F nfs -o ro=.mcwrite.net/ export/ mcwrite.net

Pagina de manual pentru detaliile share_nfs care acordă acces folosind liste de control pe Solaris.

Resurse Internet

NFS și RPC nu sunt lipsite de găuri. În general, NFS nu ar trebui să fie utilizat atunci când navigați pe internet. Nu puteți face găuri în firewall-uri pentru a permite orice fel de acces prin NFS. Urmăriți îndeaproape orice patch-uri RPC și NFS emergente, iar numeroase surse de informații de securitate vă pot ajuta. Cele mai populare două surse sunt Bugtraq și CERT:

Primul poate fi vizualizat regulat în căutarea informațiilor necesare sau prin abonarea la buletine informative periodice. Al doilea oferă, poate, informații nu la fel de prompte în comparație cu altele, dar într-un volum destul de complet și fără nuanța de senzaționalism caracteristică unor site-uri dedicate securității informaționale.

Toată lumea știe că pe sistemele UNIX, un sistem de fișiere este în mod logic o colecție de sisteme de fișiere fizice conectate la un singur punct. Unul dintre principalele avantaje ale unei astfel de organizații, în opinia mea, este capacitatea de a modifica dinamic structura unui sistem de fișiere existent. De asemenea, datorită eforturilor dezvoltatorilor, astăzi avem posibilitatea de a conecta un sistem de fișiere de aproape orice tip și în orice mod convenabil. Prin „metodă”, vreau în primul rând să subliniez capacitatea nucleului OS de a lucra cu sisteme de fișiere prin conexiuni de rețea.

Multe protocoale de rețea oferiți-ne posibilitatea de a lucra cu fișiere de la distanță, fie ele FTP, SMB, Telnet sau SSH. Datorită capacității nucleului, în cele din urmă, de a nu depinde de tipul de sistem de fișiere conectat, avem capacitatea de a conecta orice și oricum dorim folosind programul de montare.

Astăzi aș vrea să vorbesc despre NFS - Network File System. Această tehnologie vă permite să vă conectați puncte individuale FS pe un computer la distanță către sistemul de fișiere calculator local. eu însumi Protocolul NFS vă permite să efectuați operațiuni cu fișiere rapid, sigur și fiabil. Ce altceva avem nevoie? :-)

Ce este necesar pentru ca asta să funcționeze

Pentru a nu dezvălui mult timp pe tema versiunilor NFS și a suportului acestora în diferite nuclee, vom face imediat presupunerea că versiunea dvs. de kernel nu este mai mică decât 2.2.18. În documentația oficială, dezvoltatorii promit sprijin deplin Funcționalitatea NFS versiunea 3 în acest nucleu și în versiunile ulterioare.

Instalare

Pentru a rula serverul NFS în Ubuntu 7.10 meu - Gutsy Gibbon, trebuia să instalez pachetele nfs-common și nfs-kernel-server. Dacă aveți nevoie doar de un client NFS, atunci nfs-kernel-server nu trebuie să fie instalat.

Configurare server

După ce toate pachetele au fost instalate cu succes, trebuie să verificați dacă demonul NFS rulează:

starea /etc/init.d/nfs-kernel-server

Dacă demonul nu rulează, trebuie să îl porniți cu comanda

/etc/init.d/nfs-kernel-server start

După ce totul a început cu succes, puteți începe să exportați sistemul de fișiere. Procesul în sine este foarte simplu și durează minim.

Fișierul principal de configurare a serverului NFS se află în /etc/exports și are următorul format:

Director machine1(opțiune11,opțiune12) mașină2(opțiune21,opțiune22)

director— cale absolută către directorul serverului FS la care trebuie să acordați acces

mașinăX— Numele DNS sau adresa IP a computerului client de la care este permis accesul

opțiuneaXX— Parametrii de export FS, cei mai des utilizați dintre ei:

  • ro- accesul la fișiere este doar pentru citire
  • rw— accesul de citire/scriere este acordat
  • no_root_squash— în mod implicit, dacă vă conectați la o resursă NFS ca root, serverul, de dragul securității, va accesa fișierele ca utilizator nimeni. Cu toate acestea, dacă activați această opțiune, fișierele de pe partea serverului vor fi accesate ca root. Fii atent cu această opțiune.
  • no_subtree_check— în mod implicit, dacă exportați nu întreaga partiție de pe server, ci doar o parte a sistemului de fișiere, demonul va verifica dacă fișierul solicitat se află fizic pe aceeași partiție sau nu. Dacă exportați întreaga partiție sau punctul de montare al sistemului de fișiere exportat nu afectează fișierele din alte volume fizice, atunci puteți activa această opțiune. Acest lucru vă va oferi o creștere a vitezei serverului.
  • sincronizare— activați această opțiune dacă există posibilitatea unei pierderi bruște a conexiunii sau a unei întreruperi de alimentare a serverului. Dacă această opțiune nu este activată, există un risc foarte mare de pierdere a datelor dacă serverul NFS se oprește brusc.

Deci, să presupunem că trebuie să acordăm acces la computerul ashep-desktop la directorul /var/backups al computerului ashep-laptop. Accesul la director este necesar pentru a copia fișierele de rezervă de pe ashep-desktop. Fișierul meu a ieșit așa:

/var/backups ashep-desktop(rw,no_subtree_check,sync)

După adăugarea liniei la /etc/exports, trebuie să reporniți serverul NFS pentru ca modificările să aibă efect.

/etc/init.d/nfs-kernel-server reporniți

Asta este. Puteți începe conectarea FS exportată pe computerul client.

Configurarea clientului

Pe partea clientului, sistemul de fișiere la distanță este montat în același mod ca toate celelalte - cu comanda mount. De asemenea, nimeni nu vă interzice să utilizați /etc/fstab dacă trebuie să vă conectați automat FS-ul când sistemul de operare pornește. Deci, opțiunea de montare va arăta astfel:

Montați -t nfs ashep-laptop:/var/backups/ /mnt/ashep-laptop/backups/

Dacă totul a mers bine și trebuie să vă conectați automat la FS la distanță la pornire, trebuie doar să adăugați linia în /etc/fstab:

Ashep-laptop:/var/backups /mnt/ashep-laptop/backups nfs auto 0 0

Ce altceva

Așadar, avem o imagine de ansamblu mică și practică a capabilităților NFS. Desigur, aceasta este doar o mică parte din ceea ce poate face NFS. Acest lucru este suficient pentru utilizare acasă sau într-un birou mic. Dacă acest lucru nu este suficient pentru tine, recomand să citești mai întâi

  • Serghei Savenkov

    un fel de recenzie „scurtă”... de parcă s-ar grăbi undeva