boot(7) Miscellaneous Information Manual boot(7)

boot - procesul de pornire a sistemului bazat pe UNIX System V Release 4

Procesul de pornire (sau „secvența de pornire”) variază în detalii de la un sistem la altul, dar poate fi împărțit în linii mari în faze controlate de următoarele componente:

(1)
hardware
(2)
încărcător de sistem de operare (OS)
(3)
nucleu
(4)
proces în spațiul utilizatorului root (init și inittab)
(5)
scripturi de pornire

Fiecare dintre acestea este descris mai jos în detaliu.

După pornirea sau reinițializarea de la buton, controlul este acordat unui program stocat în memoria numai pentru citire (în mod normal PROM); din motive istorice legate de calculatorul personal, acest program este adesea numit „BIOS”.

Acest program efectuează în mod normal un autotest de bază al mașinii și accesează memoria nevolatilă pentru a citi alți parametri. Această memorie din PC este o memorie CMOS alimentată de baterie, așa că majoritatea oamenilor se referă la ea ca fiind „CMOS”; în afara lumii PC-urilor, ea este numită de obicei „NVRAM” (RAM nevolatilă).

Parametrii stocați în NVRAM variază de la un sistem la altul, dar, cel puțin, ar trebui să precizeze ce dispozitiv poate furniza un încărcător de sistem de operare sau, cel puțin, ce dispozitive pot fi verificate pentru unul; un astfel de dispozitiv este cunoscut sub numele de „dispozitivul de pornire”. Etapa de pornire hardware încarcă încărcătorul de sistem de operare dintr-o poziție fixă pe dispozitivul de pornire și apoi îi transferă controlul.

Dispozitivul de pe care se citește încărcătorul de sistem de operare poate fi atașat prin intermediul unei rețele, caz în care detaliile de pornire sunt specificate în continuare prin protocoale precum DHCP, TFTP, PXE, Etherboot etc.

Încărcător de sistem de operare (OS)

Sarcina principală a încărcătorului de sistem de operare este de a localiza nucleul pe un anumit dispozitiv, de a-l încărca și de a-l rula. Cele mai multe încărcătoare de SO permit o utilizare interactivă, pentru a permite specificarea unui nucleu alternativ (poate un nucleu de rezervă în cazul în care ultimul compilat nu funcționează) și pentru a transmite parametrii opționali către nucleu.

Într-un PC tradițional, încărcătorul sistemului de operare este localizat în blocul inițial de 512 octeți al dispozitivului de pornire; acest bloc este cunoscut sub numele de „MBR” (Master Boot Record).

În majoritatea sistemelor, încărcătorul sistemului de operare este foarte limitat din cauza diverselor constrângeri. Chiar și pe sistemele non-PC, există unele limitări privind dimensiunea și complexitatea acestui încărcător, dar limitarea dimensiunii MBR pentru PC (512 octeți, inclusiv tabelul de partiții) face aproape imposibilă introducerea multor funcționalități în el.

Prin urmare, majoritatea sistemelor împart rolul de încărcare a sistemului de operare între un încărcător principal și un încărcător secundar; acest încărcător secundar poate fi localizat într-o porțiune mai mare de stocare persistentă, cum ar fi o partiție de disc.

În Linux, încărcătorul sistemului de operare este adesea grub(8) (o alternativă este lilo(8)).

Atunci când este încărcat, nucleul inițializează diverse componente ale calculatorului și ale sistemului de operare; fiecare porțiune de software responsabilă pentru o astfel de sarcină este considerată, de obicei, „un controlor” pentru componenta respectivă. Nucleul pornește gestionarul de memorie virtuală „swap” (este un proces al nucleului, numit „kswapd” într-un nucleu Linux modern) și montează un anumit sistem de fișiere la ruta rădăcină, /.

Unii dintre parametrii care pot fi pasați nucleului se referă la aceste activități (de exemplu, sistemul de fișiere rădăcină implicit poate fi înlocuit); pentru mai multe informații despre parametrii nucleului Linux, citiți bootparam(7).

Abia apoi nucleul creează procesul inițial al utilizatorului, căruia i se atribuie numărul 1 ca PID (ID de proces). În mod tradițional, acest proces execută programul /sbin/init, căruia îi sunt trecuți parametrii care nu au fost deja gestionați de nucleu.

Următoarea descriere se aplică unui sistem de operare bazat pe UNIX System V Release 4. Cu toate acestea, o serie de sisteme utilizate pe scară largă au adoptat o abordare conexă, dar fundamental diferită, cunoscută sub numele de systemd(1), pentru care procesul de pornire este detaliat în bootup(7).

Când pornește /sbin/init, acesta citește /etc/inittab pentru instrucțiuni suplimentare. Acest fișier definește ceea ce ar trebui să fie rulat atunci când programul /sbin/init este instruit să intre într-un anumit nivel de execuție, oferind administratorului o modalitate ușoară de a stabili un mediu pentru o anumită utilizare; fiecare nivel de execuție este asociat cu un set de servicii (de exemplu, nivelul de execuție S este modul mono-utilizator, iar nivelul de execuție 2 presupune rularea majorității serviciilor de rețea).

Administratorul poate modifica nivelul actual de execuție prin init(1) și poate interoga nivelul actual de execuție prin runlevel(8).

Cu toate acestea, deoarece nu este convenabil să gestionați serviciile individuale prin editarea acestui fișier, /etc/inittab se limitează doar să apeleze un set de scripturi care pornesc/opresc efectiv serviciile individuale.

Următoarea descriere se aplică unui sistem de operare bazat pe UNIX System V Release 4. Cu toate acestea, o serie de sisteme utilizate pe scară largă (Slackware Linux, FreeBSD, OpenBSD) au o schemă oarecum diferită pentru scripturile de pornire.

Pentru fiecare serviciu gestionat (poștă electronică, server nfs, cron etc.), există un singur script de pornire localizat într-un director specific (/etc/init.d în majoritatea versiunilor de Linux). Fiecare dintre aceste scripturi acceptă ca un singur argument cuvântul «start» (care determină pornirea serviciului) sau cuvântul «stop» (care determină oprirea serviciului). Scriptul poate accepta opțional și alți parametri de „utilitate” (de exemplu, «restart» pentru a opri și apoi a porni, «status» pentru a afișa starea serviciului etc.). Rularea scriptului fără parametri afișează argumentele posibile.

Pentru a face ca anumite scripturi să pornească/să se oprească la anumite niveluri de execuție și într-o anumită ordine, există directoare de execuție în ordine, în mod normal de forma /etc/rc[0-6S].d. În fiecare dintre aceste directoare, există legături (de obicei simbolice) către scripturile din directorul /etc/init.d.

Un script principal (de obicei /etc/rc) este apelat din inittab(5); acest script principal apelează scriptul fiecărui serviciu prin intermediul unei legături din directorul de execuție în ordine relevant. Fiecare legătură al cărei nume începe cu „S” este apelată cu argumentul «start» (pornind astfel serviciul respectiv). Fiecare legătură al cărei nume începe cu „K” este apelată cu argumentul «stop» (oprind astfel serviciul).

Pentru a defini ordinea de pornire sau de oprire în cadrul aceluiași nivel de execuție, numele unei legături conține un număr de ordine. De asemenea, pentru claritate, numele unei legături se termină de obicei cu numele serviciului la care se referă. De exemplu, legătura /etc/rc2.d/S80sendmail pornește serviciul sendmail(8) la nivelul de execuție 2. Acest lucru se întâmplă după ce /etc/rc2.d/S12syslog este rulat, dar înainte de a fi rulat /etc/rc2.d/S90xfs.

Gestionarea acestor legături înseamnă gestionarea ordinii de pornire și a nivelurilor de execuție; în multe sisteme, există instrumente care ajută la această sarcină (de exemplu, chkconfig(8)).

Un program care furnizează un serviciu este adesea numit „demon”. De obicei, un demon poate primi diverse opțiuni și parametri de linie de comandă. Pentru a permite unui administrator de sistem să modifice aceste intrări fără a edita un întreg script de pornire, se utilizează un anumit fișier de configurare separat, care este localizat într-un anumit director în care un script de pornire asociat îl poate găsi (/etc/sysconfig pe sistemele Red Hat mai vechi).

În sistemele UNIX mai vechi, un astfel de fișier conținea opțiunile reale ale liniei de comandă pentru un demon, dar în sistemele Linux moderne (și, de asemenea, în HP-UX), acesta conține doar variabile de shell. Un script de pornire din /etc/init.d citește și include fișierul său de configurare (adică „sursele” fișierului său de configurare) și apoi utilizează valorile variabilelor.

/etc/init.d/, /etc/rc[S0-6].d/, /etc/sysconfig/

init(1), systemd(1), inittab(5), bootparam(7), bootup(7), runlevel(8), shutdown(8)

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.

31 octombrie 2023 Pagini de manual de Linux 6.06