SM-NOTIFY(8) | System Manager's Manual | SM-NOTIFY(8) |
NUME¶
sm-notify - trimite notificări de repornire către omologii NFS
SINOPSIS¶
/usr/sbin/sm-notify [-dfn] [-m minute] [-v nume] [-p port-notificare] [-P ruta]
DESCRIERE¶
Blocajele de fișiere nu fac parte din starea persistentă a sistemului de fișiere. Astfel, starea de blocare se pierde atunci când o gazdă repornește.
Sistemele de fișiere de rețea trebuie să detecteze, de asemenea, când starea de blocare este pierdută deoarece o gazdă la distanță a fost repornită. După ce un client NFS repornește, un server NFS trebuie să elibereze toate blocările de fișiere deținute de aplicațiile care rulau pe clientul respectiv. După ce un server repornește, un client trebuie să reamintească serverului de blocările de fișiere deținute de aplicațiile care rulează pe clientul respectiv.
Pentru NFS versiunea 2 și versiunea 3, protocolul Network Status Monitor (sau NSM pe scurt) este utilizat pentru a notifica omologii NFS despre reporniri. În Linux, serviciul NSM este format din două componente separate în spațiul utilizatorului:
- sm-notify
- Un program de ajutor care notifică omologii NFS după repornirea sistemului local
- rpc.statd
- Un demon care ascultă notificările de repornire de la alte gazde și gestionează lista de gazde care urmează să fie notificate atunci când sistemul local repornește.
Managerul de blocare NFS local avertizează rpc.statd local cu privire la fiecare omolog de la distanță care trebuie monitorizat. Atunci când sistemul local repornește, comanda sm-notify notifică serviciul NSM de pe omologii monitorizați cu privire la repornire. Atunci când un omolog de la distanță repornește, acel omolog notifică serviciul rpc.statd local, care la rândul său transmite notificarea de repornire înapoi la managerul local de blocare NFS.
FUNCȚIONAREA NSM ÎN DETALIU¶
Prima interacțiune de blocare a fișierelor între un client și un server NFS determină managerii de blocare NFS de pe ambii omologi să contacteze serviciul NSM local pentru a stoca informații despre omologul opus. În Linux, managerul local de blocare contactează rpc.statd.
rpc.statd înregistrează informații despre fiecare unitate NFS monitorizată în memoria persistentă. Aceste informații descriu cum se contactează unitatea de la distanță în cazul în care sistemul local se repornește, cum se recunoaște care unitate monitorizată raportează o repornire și cum se notifică managerul local de blocare atunci când o unitate monitorizată indică faptul că a fost repornită.
Un client NFS trimite un nume de gazdă, cunoscut sub numele de nume-apelant al clientului, la fiecare cerere de blocare a unui fișier. Un server NFS poate utiliza acest nume de gazdă pentru a trimite apeluri asincrone GRANT către un client sau pentru a notifica clientul că a repornit.
Serverul Linux NFS poate furniza numele-apelantului clientului sau adresa de rețea a clientului către rpc.statd. În sensul protocolului NSM, acest nume sau adresă este cunoscut sub numele de nume-monitor al omologului monitorizat. În plus, gestionarul local de blocare îi spune lui rpc.statd care crede că este propriul nume de gazdă. În sensul protocolului NSM, acest nume de gazdă este cunoscut sub numele de numele-meu.
Nu există o interacțiune echivalentă între un server NFS și un client pentru a informa clientul cu privire la numele-apelantului serverului. Prin urmare, clienții NFS nu știu de fapt ce nume-monitor ar putea folosi un server NFS într-o cerere SM_NOTIFY. Clientul Linux NFS înregistrează numele de gazdă al serverului utilizat în comanda mount pentru a identifica serverele NFS care repornesc.
Notificare de repornire¶
La repornirea sistemului local, comanda sm-notify citește lista de omologi monitorizați din memoria persistentă și trimite o cerere SM_NOTIFY către serviciul NSM al fiecărui omolog la distanță din listă. Aceasta utilizează șirul nume-monitor ca destinație. Pentru a identifica ce gazdă a fost repornită, comanda sm-notify trimite în mod normal șirul numele-meu înregistrat atunci când gazda de la distanță a fost monitorizată. Comanda la distanță rpc.statd potrivește cererile SM_NOTIFY primite folosind acest șir, sau adresa de rețea a apelantului, la unul sau mai mulți omologi din propria listă de monitorizare.
Dacă rpc.statd nu găsește un omolog în lista sa de monitorizare care să corespundă unei cereri SM_NOTIFY primite, notificarea nu este transmisă managerului local de blocare. În plus, fiecare omolog are propriul număr număr de stare NSM, un număr întreg de 32 de biți care este actualizat după fiecare repornire de către comanda sm-notify. rpc.statd utilizează acest număr pentru a face distincția între repornirile reale și notificările reluate.
O parte a recuperării blocajului NFS constă în redescoperirea omologilor care trebuie să fie monitorizați din nou. Comanda sm-notify șterge lista de monitorizare din memoria persistentă după fiecare repornire.
OPȚIUNI¶
- -d
- Menține sm-notify atașat la terminalul său de control și rulează în prim-plan, astfel încât progresul notificării să poată fi monitorizat direct.
- -f
- Trimite notificări chiar dacă sm-notify a fost deja executat de la ultima repornire a sistemului.
- -m timp-reîncercare
- Specifică durata de timp, în minute, pentru a continua să se reia notificările către gazdele care nu răspund. Dacă această opțiune nu este specificată, sm-notify încearcă să trimită notificări timp de 15 minute. Specificarea unei valori de 0 face ca sm-notify să continue să trimită notificări către omologii care nu răspund până când este eliminat manual.
- Notificările sunt încercate din nou dacă trimiterea eșuează, dacă gazda de la distanță nu răspunde, dacă serviciul NSM de la distanță nu este înregistrat sau dacă există o eroare DNS care împiedică rezolvarea nume-monitor de la distanță la o adresă.
- Gazdele nu sunt eliminate din lista de notificare până când nu se primește un răspuns valid. Cu toate acestea, procedura SM_NOTIFY are un rezultat nul. sm-notify nu are cum să știe dacă gazda de la distanță a recunoscut expeditorul și a început recuperarea corespunzătoare a blocajului.
- -n
- Împiedică sm-notify să actualizeze numărul de stare NSM al sistemului local.
- -p port
- Specifică numărul portului sursă pe care sm-notify ar trebui să îl utilizeze atunci când trimite notificări de repornire. Dacă această opțiune nu este specificată, se utilizează un port efemer ales la întâmplare.
- Această opțiune poate fi utilizată pentru a traversa un firewall între client și server.
- -P, --state-directory-path nume-rută
- Specifică numele de rută al directorului părinte în care se află informațiile privind starea NSM. Dacă această opțiune nu este specificată, sm-notify utilizează în mod implicit /var/lib/nfs.
- După pornire, sm-notify încearcă să își stabilească UID și GID efective la proprietarul și grupul subdirectorului sm al acestui director. După modificarea id-urilor efective, sm-notify trebuie să acceseze doar fișierele din sm și sm.bak din cadrul rutei directorului de stare „state-directory-path”.
- -v adresa-ip | nume-gazdă
- Specifică adresa de rețea de la care se trimit notificările de repornire și argumentul nume-monitor care trebuie utilizat la trimiterea cererilor SM_NOTIFY. Dacă această opțiune nu este specificată, sm-notify utilizează o adresă de tip joker ca adresă de transport și utilizează numele-meu înregistrat atunci când la distanță a fost monitorizată ca argument nume-monitori atunci când trimite cereri SM_NOTIFY.
- Forma adresa-ip poate fi exprimată fie ca o adresă de prezentare IPv4, fie ca o adresă de prezentare IPv6. În cazul în care se utilizează forma adresa-ip, comanda sm-notify convertește această adresă într-un nume de gazdă pentru a fi utilizată ca argument nume-monitor la trimiterea cererilor SM_NOTIFY.
- Această opțiune poate fi utilă în configurațiile „multi-homed” (gazdă conectată la mai multe rețele) în cazul în care gazda de la distanță necesită notificare de la o anumită adresă de rețea.
FIȘIER DE CONFIGURARE¶
Multe dintre opțiunile care pot fi definite în linia de comandă pot fi, de asemenea, controlate prin intermediul valorilor stabilite în secțiunea [sm-notify] sau, într-un caz, în secțiunea [statd] a fișierului de configurare /etc/nfs.conf.
Valorile recunoscute în secțiunea [sm-notify] includ: retry-time, outgoing-port și outgoing-addr. Acestea au același efect ca și opțiunile din linia de comandă m, p și, respectiv, v.
O valoare suplimentară recunoscută în secțiunea [sm-notify] este lift-grace. În mod implicit, sm-notify va ridica mai devreme perioada de grație a blocajului dacă nu are gazde de notificat. Unele configurații de înaltă disponibilitate vor rula un sm-notify pe fiecare adresă IP flotantă. În aceste configurații, ridicarea anticipată a perioadei de grație poate împiedica clienții să recupereze blocările. Stabilirea lift-grace la n va împiedica sm-notify să încheie perioada de grație înainte de termen. lift-grace nu are o opțiune de linie de comandă corespunzătoare.
Valoarea recunoscută în secțiunea [statd] este state-directory-path.
SECURITATE¶
Comanda sm-notify trebuie inițiată ca root pentru a obține privilegiile necesare pentru a accesa baza de date cu informații despre stare. Aceasta renunță la privilegiile de root imediat ce pornește pentru a reduce riscul unui atac de escaladare a privilegiilor.
În timpul funcționării normale, ID-ul efectiv al utilizatorului pe care îl alege este proprietarul directorului de stare. Acest lucru îi permite să continue să acceseze fișierele din acest director după ce a renunțat la privilegiile de root. Pentru a controla ID-ul de utilizator pe care îl alege rpc.statd, este suficient să utilizați chown(1) pentru a stabili proprietarul directorului de stare.
NOTE ADIȚIONALE¶
Recuperarea blocării după o repornire este esențială pentru a menține integritatea datelor și pentru a preveni blocarea inutilă a aplicațiilor.
Pentru a ajuta rpc.statd să potrivească cererile SM_NOTIFY cu cererile NLM, trebuie respectate o serie de bune practici, care includ:
- Numele de nod UTS al sistemelor dvs. trebuie să corespundă cu numele DNS pe care omologii NFS le folosesc pentru a le contacta.
- Numele de nod UTS ale sistemelor dvs. trebuie să fie întotdeauna nume de domenii complet calificate.
- Corespondența DNS directă și inversă a numelor de noduri UTS ar trebui să fie consecventă.
- Numele de gazdă pe care clientul îl folosește pentru a monta serverul trebuie să corespundă cu nume-monitor al serverului în cererile SM_NOTIFY pe care le trimite.
Demontarea unui sistem de fișiere NFS nu oprește neapărat clientul sau serverul NFS să se monitorizeze reciproc. Ambele pot continua să se monitorizeze reciproc pentru o perioadă de timp, în cazul în care traficul NFS ulterior între cele două duce la noi montări și la blocarea de fișiere suplimentare.
În Linux, dacă modulul de nucleu lockd este descărcat în timpul funcționării normale, toți omologii NFS de la distanță nu sunt monitorizați. Acest lucru se poate întâmpla pe un client NFS, de exemplu, dacă un sistem de auto-montare elimină toate punctele de montare NFS din cauza inactivității.
Suport pentru protocoalele IPv6 și TI-RPC¶
TI-RPC este o condiție prealabilă pentru a susține NFS pe IPv6. În cazul în care suportul TI-RPC este integrat în comanda sm-notify, aceasta va alege un transport IPv4 sau IPv6 adecvat pe baza adresei de rețea returnată de DNS pentru fiecare omolog la distanță. Aceasta ar trebui să fie pe deplin compatibilă cu sistemele la distanță care nu acceptă TI-RPC sau IPv6.
În prezent, comanda sm-notify acceptă trimiterea de notificări numai prin intermediul protocoalelor de transport de datagrame.
FIȘIERE¶
- /var/lib/nfs/sm
- directorul care conține lista de monitoare
- /var/lib/nfs/sm.bak
- directorul care conține lista de notificări
- /var/lib/nfs/state
- Numărul de stare al NSM pentru această gazdă
- /proc/sys/fs/nfs/nsm_local_state
- copia nucleului a numărului de stare al NSM
CONSULTAȚI ȘI¶
rpc.statd(8), nfs(5), uname(2), hostname(7)
RFC 1094 - „NFS: Network File System Protocol
Specification”
RFC 1813 - „NFS Version 3 Protocol Specification”
OpenGroup Protocols for Interworking: XNFS, versiunea 3W - Capitolul 11
AUTORI¶
Olaf Kirch <okir@suse.de>
Chuck Lever <chuck.lever@oracle.com>
TRADUCERE¶
Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>
Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.
Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.
1 noiembrie 2009 |