capitolul 9 pornirea sistemului - erasmus pulseelf.cs.pub.ro/uso/res/carte/uso_cap-09-boot.pdf ·...

22
Capitolul 9 Pornirea sistemului Atunci când un sistem hardware pornes , te, acesta urm˘ ares , te înc˘ arcarea sistemului de operare, pornirea acestuia s , i a proceselor de baz˘ a. Aceast ˘ a se act , iune se cheam ˘ a booting sau bootstrapping : modul în care un sistem, din momentul în care este alimentat s , i pornit fizic ajunge s˘ a ofere o interfat , ˘ a de lucru utilizatorului. Procesul de boot/booting se refer˘ a la pas , ii urmat , i de la pornirea electric˘ a(power on) pân ˘ a la pornirea proceselor. Înt , elegerea procesului de boot este util ˘ a pentru un utilizator dac ˘ a dores , te s˘ a îs , i configureze modul în care este configurat hardware-ul sistemului, ce sistem de operare ruleaz ˘ a, opt , iuni de rulare a sistemului de operare s , i ce procese sunt create la pornire (startup). Pentru un utilizator avizat, a s , ti informat , ii despre internele procesului de boot s , i a secvent , a de pas , i urmat , i este important pentru a depana probleme ce pot ap ˘ area sau pentru a îmbun˘ at˘ at , i aspecte precum timpul de pornire, securitatea sistemului, consumul de resurse. As , a cum am precizat, procesul de boot începe de la alimentarea sistemului s , i continu ˘ a pân ˘ a la pornirea primelor procese din sistem. Dup ˘ a pornirea fizic˘ a (power on) a sistemului, este înc ˘ arcat firmware-ul de boot (numit BIOS pe arhitectura x86) apoi este identificat un dispozitiv bootabil, este înc ˘ arcat bootloader-ul, apoi sistemul de operare s , i apoi sunt pornite procesele de început (startup processes). În Figura de mai jos este prezentat un sumar al pas , ilor urmat , i în secvent , a de boot, urmând s˘ a îi detaliem în sect , iunile de mai jos: + sumar/diagram ˘ a de boot care va fi detaliat˘ a în continuare 1. Firmware de boot (BIOS) 2. Dispozitiv bootabil 3. Bootloader 4. Sistem de operare (kernel) 5. Procese init , iale 182

Upload: others

Post on 27-Dec-2019

46 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Capitolul 9 Pornirea sistemului - ERASMUS Pulseelf.cs.pub.ro/uso/res/carte/uso_cap-09-boot.pdf · Capitolul 9 Pornirea sistemului Atunci când un sistem hardware pornes, te, acesta

Capitolul 9

Pornirea sistemului

Atunci când un sistem hardware pornes, te, acesta urmares, te încarcarea sistemului deoperare, pornirea acestuia s, i a proceselor de baza. Aceasta se act, iune se cheamabooting sau bootstrapping: modul în care un sistem, din momentul în care este alimentats, i pornit fizic ajunge sa ofere o interfat,a de lucru utilizatorului. Procesul de boot/bootingse refera la pas, ii urmat, i de la pornirea electrica (power on) pâna la pornirea proceselor.

Înt,elegerea procesului de boot este utila pentru un utilizator daca dores, te sa îs, iconfigureze modul în care este configurat hardware-ul sistemului, ce sistem de operareruleaza, opt, iuni de rulare a sistemului de operare s, i ce procese sunt create la pornire(startup). Pentru un utilizator avizat, a s, ti informat, ii despre internele procesului de boots, i a secvent,a de pas, i urmat, i este important pentru a depana probleme ce pot apareasau pentru a îmbunatat, i aspecte precum timpul de pornire, securitatea sistemului,consumul de resurse.

As, a cum am precizat, procesul de boot începe de la alimentarea sistemului s, i continuapâna la pornirea primelor procese din sistem. Dupa pornirea fizica (power on) asistemului, este încarcat firmware-ul de boot (numit BIOS pe arhitectura x86) apoi esteidentificat un dispozitiv bootabil, este încarcat bootloader-ul, apoi sistemul de operare s, iapoi sunt pornite procesele de început (startup processes). În Figura de mai jos esteprezentat un sumar al pas, ilor urmat, i în secvent,a de boot, urmând sa îi detaliem însect, iunile de mai jos:

+ sumar/diagrama de boot care va fi detaliata în continuare

1. Firmware de boot (BIOS)

2. Dispozitiv bootabil

3. Bootloader

4. Sistem de operare (kernel)

5. Procese init, iale

182

Page 2: Capitolul 9 Pornirea sistemului - ERASMUS Pulseelf.cs.pub.ro/uso/res/carte/uso_cap-09-boot.pdf · Capitolul 9 Pornirea sistemului Atunci când un sistem hardware pornes, te, acesta

CAPITOLUL 9. PORNIREA SISTEMULUI 183

Figura 9.1: diagrama de boot care va fi detaliata în continuare

Page 3: Capitolul 9 Pornirea sistemului - ERASMUS Pulseelf.cs.pub.ro/uso/res/carte/uso_cap-09-boot.pdf · Capitolul 9 Pornirea sistemului Atunci când un sistem hardware pornes, te, acesta

184 INTRODUCERE ÎN SISTEME DE OPERARE

9.1 Secvent,a de boot

În cadrul secvent,ei de boot fiecare pas, descris în Figura 9.1 (de mai sus) are rolulsau. Unul dintre roluri este acela de a transfera controlul urmatorului pas: fiecare pasare capacitate limitata în procesul de pornire, urmatorul pas preluând rezultatul sau s, irealizând alte act, iuni. Alt rol al fiecarui pas este de configurare a unor opt, iuni specificeîn procesul de boot, as, a cum vom preciza mai jos.

În momentul pornirii fizice a sistemului (power on) se încarca dintr-o zona dedicata dinhardware-ul sistemul firmware-ul de boot. Firmware-ul de boot este numit BIOS (sauUEFI ) pe arhitectura x86. Firmware-ul de boot exista pe sistemul fizic indiferent deprezent,a sau nu a unui sistem de operare sau dispozitiv bootabil. Firmware-ul de bootface verificari de baza ale funct, ionarii hardware-ului, ofera utilizatorului posibilitatea deconfigurari aproape de hardware (precum activarea/dezactivarea virtualizarii,configurarea vitezei de acces la memorie) s, i stabiles, te ordinea de boot: ce dispozitive s, iîn ce ordine sunt verificate pentru a trece la urmatorul pas.

Firmware-ul de boot identifica dispozitivul de boot s, i încarca o secvent,a dedicata de peacesta. Dispozitivul de boot poate fi hard disk drive, USB flash drive, CD-ROM drive.Dispozitivul de boot nu are un rol activ, ci unul de stocare. Acesta stocheaza urmatoareasecvent,a de cod care sa fie executata, în mod tipic bootloader-ul. Bootloader-ul esteîncarcat de catre firmware-ul de boot din dispozitivul de boot în memorie. Apoi îi estetransferat controlul bootloader-ului.

Întrucât firmware-ul de boot are de obicei capacitat, i limitate de a încarca în memorie part, istocate pe un dispozitiv precum hard disk, se transfera controlul bootloader-ului pentru agestiona acest lucru. Bootloader-ul urmares, te încarcarea de pe un dispozitiv de stocareîn memorie a sistemului de operare, mai precis a imaginii de kernel. Bootloader-ul poateoferi opt, iunea utilizatorului de a decide ce sistem de operare sa încarce, funct, ionalitateutila pentru sistemele dual boot (când putem boota s, i Windows s, i Linux).

Sistemul de operare este pornit cu ajutorul bootloader-ului din imaginea de kernel.Imaginea de kernel este un fis, ier care se regases, te pe un dispozitiv de stocare de undeeste încarcata în memorie s, i îi este transferat controlul. Imaginea de kernel este practicun fis, ier executabil care cont, ine datele s, i codul sistemului de operare. Transferulcontrolului înseamna execut, ia codului sistemului de operare. Din acest punct sistemulde operare det, ine controlul sistemului s, i se asigura de buna funct, ionare a acestuia.

O data încarcat sistemul de operare, acesta încarca s, i driverele de dispozitiv (devicedrivers). Driverele de dispozitiv sunt ret, inute în fis, iere similare imaginii de kernel s, isunt încarcate în memorie de catre sistemul de operare pentru gestionarea dispozitivelorhardware: disc, ret,ea, tastatura etc.

Dupa încarcarea driverelor, sistemul de operare pornes, te primele procese alesistemului (startup processes). Aceste procese sunt serviciile de baza ale sistemului(precum ment, inerea timpului sistemului, aplicarea configurat, iilor de ret,ea) s, i aplicat, iilede interfat,a cu utilizatorul (shell-urile). Acum utilizatorul se poate autentifica în sistemulde operare s, i poate beneficia de serviciile acestuia.

Secvent,a de pas, i de bootare este comuna pentru arhitecturi hardware s, i sisteme deoperare diferite, dar fiecare pas are caracteristici s, i denumiri particulare. Pe arhitecturax86 firmware-ul de boot se numes, te BIOS sau UEFI, pe arhitectura ARM nu are o

Page 4: Capitolul 9 Pornirea sistemului - ERASMUS Pulseelf.cs.pub.ro/uso/res/carte/uso_cap-09-boot.pdf · Capitolul 9 Pornirea sistemului Atunci când un sistem hardware pornes, te, acesta

CAPITOLUL 9. PORNIREA SISTEMULUI 185

denumire specifica. Bootloadere folosite pe arhitectura x86 sunt GRUB (pentru Linux)sau WinLoader (pentru Windows), în vreme ce Das U-boot e un bootloader folositpentru platforme embedded precum ARM.

În cele ce urmeaza vom descrie în detaliu pas, ii din secvent,a de boot.

9.2 Firmware de boot

Firmware-ul de boot este o secvent,a de cod localizata pe un chip specific al sistemului,în general un chip ROM (read-only memory). Din acest motiv i se mai spune s, i bootROM. Firmware-ul de boot are urmatoarele roluri:

• init, ializeaza s, i verifica componentele hardware ale sistemului

• permite configurarea componentelor s, i opt, iunilor hardware ale sistemului

• parcurge lista cu dispozitive de stocare posibile pentru a transfera controlul catreunul dintre acestea

Firmware-ul de boot este rulat în momentul pornirii sistemului (adica la apasarea pebutonul de pornire). Este prima secvent,a de cod executata de sistemul de calcul. Parteade verificare a componentelor hardware poarta numele de POST (Power-On Self Test)pe arhitectura x86; daca sunt defecte hardware acestea vor fi semnalizate de firmware-ulde boot.

Firmware-ul de boot este parte a hardware-ului sistemului s, i vine “preinstalat” pe un chipal acestuia. În mod uzual, firmware-ul de boot este furnizat de producatorul placii debaza care cont, ine s, i acel chip.

Firmware-ul de boot permite realizarea de configurari la nivelul sistemului s, i hardware-ului. Mai jos sunt o serie de configurari permise de firmware-ul de boot:

• parola de configurare

• timpul sistemului

• activare virtualizare

• viteza de acces la memorie

• activarea bootarii de pe stick USB

• configurarea ordinii de boot

• activarea/dezactivare folosirii porturilor USB

9.2.1 BIOS s, i UEFI

https://www.howtogeek.com/56958/htg-explains-how-uefi-will-replace-the-bios/https://www.computerhope.com/issues/ch001360.htmhttps://www.happyassassin.net/2014/01/25/uefi-boot-how-does-that-actually-work-then/http://www.uefi.org/faq https://blog.cdemi.io/deep-dive-uefi/

Page 5: Capitolul 9 Pornirea sistemului - ERASMUS Pulseelf.cs.pub.ro/uso/res/carte/uso_cap-09-boot.pdf · Capitolul 9 Pornirea sistemului Atunci când un sistem hardware pornes, te, acesta

186 INTRODUCERE ÎN SISTEME DE OPERARE

Pe arhitectura x86, firmware-ul de boot poarta numele de BIOS (Basic Input-OutputSystem). În ultima perioada, BIOS-ul a devenit înlocuit de UEFI (Unified ExtensibleFirmware Interface). UEFI este o forma îmbunatat, ita de firmware de boot care oferao interfat,a grafica mai prietenoasa (de obicei se foloses, te mouse-ul). Un avantaj alUEFI este ca este dezvoltat într-o forma standardizata de un consort, iu din care fac parteproducatori de software s, i hardware, ceea ce duce la caracteristici comune indiferent desistemul hardware folosit. Mai jos sunt screenshot-uri cu un ecran de boot BIOS s, i unulde boot UEFI.

* screenshot cu BIOS s, i UEFI

Meniul de configurare pentru BIOS s, i UEFI sunt accesate la pornirea sistemului folosindo combinat, ie de taste a furnizorului placii de baza, uzual F2, F8, F12 sau Esc. Laapasarea combinat, iei adecvate se acceseaza ecranul de configurare specific.

Configurat, iile realizate sunt în mod uzual salvate la parasirea modului de configurare.Aceste configurat, ii sunt salvate într-un chip de memorie dedicat numit CMOS (de laComplementary Metal-Oxide-Semiconductor, tehnologia folosita pentru tranzistoarele cecompun circuitele integrate moderne). Aceasta memorie este nevolatila s, i îs, i pastreazainformat, iile dupa resetare sistemului. Chipul de memorie este alimentat de o bateriededicata numita baterie CMOS, similara cu cea de mai jos:

* imagine cu bateria CMOS

Daca bateria CMOS este scoasa din soclul ei sau este epuizata, configurat, iile se pierds, i BIOS-ul booteaza la nis, te valori implicite. Aceasta este o forma facila de resetarea aparolei de BIOS în cazul în care o astfel de parola este configurata, as, a cum vom precizaîn Sect, iunea 9.7.

Pe lânga interfat,a grafica mai prietenoasa, UEFI foloses, te o noua schema departit, ionare a discurilor numita GPT (GUID Partition Table) spre deosebire de schemaMBR (Master Boot Record) utilizata de BIOS. Aceasta îi permite o flexibilitate sporita înaccesarea dispozitivului de boot s, i alegerea urmatoarei faze din procesul de boot:încarcarea bootloader-ului.

În general UEFI permite s, i un mod de booting compatibil cu BIOS. În acest mod procesulde bootare este similar cu cel de BIOS s, i se foloses, te tot schema de partit, ionare MBR s, imodul de încarcare a bootloader-ului. Altfel, se foloses, te modul nativ de bootare UEFI.UEFI foloses, te o partit, ie dedicata numita EFI System Partition, formatata cu sistem defis, iere FAT, în care stocheaza imagini de firmware, numite imagini EFI care ret, in codulbootloader-ului ce va fi încarcat la urmatorul pas.

În tabelul de mai jos prezentam principalele deosebiri între BIOS s, i UEFI:

* tabel cu urmatorul cap de tabel: caracteristica, BIOS, UEFI

Datorita flexibilitat, ii sistemele PC moderne folosesc din ce în ce mai mult UEFI, cuprobabilitate rmica de a mai întâlni sisteme care folosesc BIOS în urmatorii ani. BIOSramâne însa folosit pe sistemele mai vechi s, i înt,elegerea modului sau de funct, ionare eutila pentru a vedea evolut, ia firmware-ului de boot pe arhitectura x86.

Page 6: Capitolul 9 Pornirea sistemului - ERASMUS Pulseelf.cs.pub.ro/uso/res/carte/uso_cap-09-boot.pdf · Capitolul 9 Pornirea sistemului Atunci când un sistem hardware pornes, te, acesta

CAPITOLUL 9. PORNIREA SISTEMULUI 187

9.2.2 Alte firmware-ul de boot

Fiecare sistem hardware care ruleaza un sistem de operare generalist (general purpose)are un firmware de boot, prima componenta rulata la pornirea sistemului. Pe arhitecturax86, de fapt pe sistemele de tipul PC (Personal Computer), acest firmware de boot esteBIOS-ul, iar în ultimii ani UEFI.

Sistemele care folosesc procesoare ARM sunt mai variate, fara sa aiba un format unitarde conectare a componentelor hardware. Mai mult producatori de sisteme care folosescarhitecturi ARM sunt foarte variat, i. Din acest motiv nu exista un standard universalprecum BIOS sau UEFI pe ARM, lucru care face foarte dificila dezvoltarea de softwarede sistem pentru o plaja de dispozitive ARM.

Pe sistemele PC o alternativa de firmware de boot este coreboot (s, i alternativalibreboot). coreboot este o versiune libera/deschisa de firmware de boot, ca o react, ie lafaptul ca firmware-ul de BIOS s, i UEFI este în general furnizata în forma binara (binaryblob). Dincolo de aspecte de filozofie (software liber vs. proprietar), dezvoltatoriicoreboot invoca posibilitatea ca furnizorii de binare BIOS/UEFI sa aiba accese ascunse(backdoor), iar un firmware de boot deschis ofera posibilitatea verificarii codului.coreboot înca foloses, te unele componente binare în vreme ce libreboot le înlocuies, tepentru o versiune complet deschisa. Dezavantajul coreboot este folosirea sa redusa pesisteme hardware, doar câteva folosind coreboot în loc de UEFI (sau BIOS).

9.2.3 Configurare dispozitive bootabile

Unul dintre rolurile firmware-ului de boot este configurarea dispozitivelor bootabile s, iselectarea ordinii de boot. Mai jos este o imagine cu un ecran BIOS pentru selectareaordinii dispozitivelor bootabile:

+ screenshot cu ecran pentru alegerea dispozitivelor de boot

Atunci când firmware-ul va trece la pasul urmator va trece, în ordine, prin dispozitivelede boot configurate s, i va boota de pe primul disponibil. Dispozitive de boot pot fi discuri,USB flash drive-url, CD ROM-drive sau bootare din ret,ea folosind PXE (PrebooteXecution Environment).

Un dispozitiv bootabil este marcat special. Un dispozitiv bootabil, identificat ca atare defirmware, cont, ine o secvent,a de cod care este rulata de firmware s, i care este urmatoareafaza a procesului de boot. Aceasta secvent,a este, de obicei, bootloader-ul, despre carevom discuta detaliat în Sect, iunea 9.4.

PXE este o metoda prin care putem configura pornirea unui sistem de operare de pe unalt sistem (server) accesibil prin ret,ea. Dupa o configurare dedicata, pe care nu o vomdetalia aici, o stat, ie poate încarca sistemul de operare de pe alt.

Despre dispozitive bootabile vom discuta mai multe în Sect, iunea 9.3.

Page 7: Capitolul 9 Pornirea sistemului - ERASMUS Pulseelf.cs.pub.ro/uso/res/carte/uso_cap-09-boot.pdf · Capitolul 9 Pornirea sistemului Atunci când un sistem hardware pornes, te, acesta

188 INTRODUCERE ÎN SISTEME DE OPERARE

9.2.4 Secure Boot

Procesul de boot al unui sistem poate fi corupt s, i modificate elemente din proces. Dorimsa avem verificare criptografica (semnatura criptografica) pentru imaginile de firmwarepentru a le garanta integritatea.

Secure Boot este o tehnica ce asigura ca firmware-ul de boot s, i alte componente dinprocesul de boot sunt securizate. Secure Boot stocheaza semnatura componentelor s, iverifica la bootare ca este corespunzatoare.

Secure Boot este o tehnologie UEFI, parte din standard. Exista un certificat al entitat, iicare furnizeaza bootloader-ul, imaginea de kernel s, i drivere. Mai multe despre certificateîn Capitolul 12.

Tehnologia de tipul Secure Boot este utila în special pe dispozitive mobile de tipulsmartphone unde bootloader-ul s, i imaginea de kernel sunt furnizate de producatorultelefonului s, i dorim garant, ii ca acestea nu sunt alterate. Dispozitivele mobile ce folosescAndroid sau iOS folosesc Secure Boot, adica mecanisme de verificare criptografica aimaginii de bootloader s, i a imaginii de kernel folosite. Pe Android tehnologia senumes, te Verified Boot, iar pe iOS se numes, te Secure Boot.

9.3 Dispozitiv de boot

https://www.howtogeek.com/193669/whats-the-difference-between-gpt-and-mbr-when-partitioning-a-drive/

Dupa ce firmware-ul de boot încheie verificarea, trebuie sa treaca la urmatorul pas:încarcarea bootloader-ului. Bootloader-ul este o parte software care încarca sistemul deoperare, oferind utilizatorului posibilitatea de selectare a sistemului de operare încarcatsau de configurare a opt, iunilor de pornire a acestuia.

Bootloader-ul se gases, te pe un dispozitiv de boot, un suport de stocare pentru imagineade bootloader. Acest dispozitiv trebuie identificat de firmware-ul de boot, apoi localizataimaginea de bootloader s, i încarcata.

As, a cum am precizat mai sus, firmware-ul de boot ofera utilizatorului de configurare adispozitivelor de boot: activare s, i dezactivare dispozitive de boot s, i selectarea ordinii încare acestea sunt consultate pentru booting. Într-o situat, ie utilizatorul poate configura cadispozitive bootabile în ordinea CD ROM drive, USB flash drive, hard disk drive. Atuncifirmware-ul de boot va investiga daca exista un CD ROM în CD ROM drive s, i daca esteCD ROM bootabil, va investiga daca porturile USB ale sistemului cuprind un USB flashdrive s, i daca este bootabil s, i va verifica daca hard disk drive-ul sistemului este bootabil.

Un dispozitiv este bootabil daca acesta cont, ine o imagine de bootloader care sa fieîncarcata în memorie s, i careia sa îi fie transferat controlul din partea firmware-ului deboot. Pe sisteme precum dispozitivele mobile, firmware-ul de boot are în generalpreconfigurat dispozitivul de boot s, i calea catre imaginea de bootloader pe care sa-lîncarce. Pe sistemele PC, utilizatorul poate configura atât dispozitivul de boot cât s, icalea catre imaginea de bootloader. În cazul sistemelor PC difera modul de încarcare abootloader-ului în funct, ie de firmware-ul de boot (BIOS sau UEFI) s, i schema departit, ionare (MBR sau GPT), despre care vorbim în continuare.

Page 8: Capitolul 9 Pornirea sistemului - ERASMUS Pulseelf.cs.pub.ro/uso/res/carte/uso_cap-09-boot.pdf · Capitolul 9 Pornirea sistemului Atunci când un sistem hardware pornes, te, acesta

CAPITOLUL 9. PORNIREA SISTEMULUI 189

9.3.1 Scheme de partit, ionare: MBR s, i GPT

Detalii despre schemele de partit, ionare sunt prezentate în Sect, iunea 9.3.1. În aceastasect, iune facem o trece prin cele doua scheme de partit, ionare prezente pe PC: MBR s, iGPT.

MBR (Master Boot Record) este schema de partit, ionare clasica pe PC. În cadrul acesteischeme de partit, ionare primul sector de disc (de 512 octet, i) cont, ine tabela de partit, ii s, iprima parte a bootloader-ului (numita 1st stage bootloader). Primul sector de disc se maicheama s, i sectorul zero sau boot sector sau master boot record, de unde s, i denumireaschemei de partit, ionare. Data fiind dimensiunea redusa a acestui sector, doar patrupartit, ii pot fi descrise. Numim aceste patru partit, ii primare. Pentru a compensa aceastalimitare, putem alege o partit, ie sa fie o partit, ie extinsa s, i în cadrul acelei partit, ii extinsesa cream oricâte partit, ii logice.

GPT (GUID Partition Table) este o schema moderna de partit, ionare pe PC. În cadrulacestei scheme de partit, ionare exista 128 de partit, ii, identificate în mod unic, la nivelglobal printr-un s, ir numit GUID (global unique id). Schema de partit, ionare GPT cuprinde128 de partit, ii, eliminând limitarea de 4 partit, ii a schemei de partit, ionare MBR.

Un disc este bootabil daca sectorul de boot al acestuia are ca ultimi doi octet, i valoareaîn hexazecimal 0x55AA. În momentul în care acei ultimi doi octet, i au acea valoare,firmware-ul de boot va putea folosi acest disc pentru a boota.

În general asociem schema de partit, ionare MBR cu boot-area folosind BIOS, iar schemade partit, ionare GPT cu bootarea folosind UEFI.

9.3.2 Încarcarea bootloader-ului pentru BIOS s, i MBR

Atunci când folosim schema de partit, ionare MBR, BIOS-ul extrage din sectorul de boot(marcat cu valoarea 0x55AA pe ultimii doi octet, i) prima parte din bootloader, numita 1ststage bootloader. Aceasta este o secvent,a de cod redusa cu operat, ii minime; esteîncarcata de BIOS în memorie s, i apoi îi este transferat controlul. Daca analizam primulsector dintr-un disc putem observa informat, ii despre bootloader s, i prezent,a octet, ilor0x55AA:

+ exemplu cu dd + hexdump pentru primii 512 octet, i de pe /dev/sda

Fiind o secvent,a redusa acest 1st stage bootloader poate face operat, ii minime. Astfelca rolul sau este sa încarca partea principala din booloader, numita s, i 2nd stagebootloader, care realizeaza apoi încarcarea sistemului de operare, as, a cum vompreciza în Sect, iunea 9.4.

9.3.3 Încarcarea bootloader-ului pentru UEFI

UEFI are un mod compatibil BIOS numit s, i CSM (Compatibility Support Module) careduce la bootarea similar BIOS: încarcare 1st stage bootloader din MBR, apoi încarcare2nd stage bootloader. Altfel, UEFI foloses, te modul nativ.

Page 9: Capitolul 9 Pornirea sistemului - ERASMUS Pulseelf.cs.pub.ro/uso/res/carte/uso_cap-09-boot.pdf · Capitolul 9 Pornirea sistemului Atunci când un sistem hardware pornes, te, acesta

190 INTRODUCERE ÎN SISTEME DE OPERARE

În cazul în care folosim UEFI modul nativ, una dintre partit, ii este marcata specializat cafiind partit, ia EFI. Aceasta partit, ie se numes, te ESP (EFI System Partition). Aceastapartit, ie este formatata cu sistem de fis, iere FAT (File Allocation Table) s, i cont, ine fis, iereexecutabile într-un format specific, numit format EFI. Aceste fis, iere executabile suntnumite OS loaders, sunt codul echivalent de bootloader pentru pornirea sistemului deoperare. De exemplu, putem avea fis, ierul /efi/boot/bootx64.efi pentru booting pe unsistem PC.

În UEFI putem adauga intrari pentru alte loadere. Pentru aceasta adaugam cai catreexecutabile EFI s, i acestea vor putea fi selectate cu ajutorul EFI, de exemplu/efi/fedora/grubx64.efi pentru porni bootloader-ul GRUB care va încarca imaginea desistem de operare pentru o instalare Fedora Linux.

În Linux pentru gestiunea intrarilor din partit, ia EFI se poate folosi utilitarulefibootmanager.

9.3.4 Denumiri discuri s, i partit, ii

În general, discurile s, i partit, iile sunt, în Linux, intrari în directorul /dev. De exemplu/dev/sda este primul disc al sistemului, /dev/sdb al doilea disc, /dev/sdc al treilea disc.Apoi partit, iile sunt numerotari ale acestor discuri: /dev/sda1 este prima partit, ie a primuluidisc, /dev/sdb3 este a treia partit, ie a celui de-al doilea disc.

Atunci când folosim GRUB ca bootloader, atunci numele discurilor au alt format, peechivalentul celor de mai jos:

• (hd0) este primul disc, echivalentul /dev/sda

• (hd1) este al doilea disc, echivalentul /dev/sdb

• (hd0,1) sau hd0,msdos1 este prima partit, ie a primului disc, echivalentul /dev/sda1

• (hd1,3) sau hd1,msdo3 este a treia partit, ie a celui de-al doilea disc, echivalentul/dev/sdb3

Întrucât ordinea discurilor poate diferi prin mutarea discurilor sau prin adaugarea unuidisc nou, cele doua moduri de denumire de mai sus sunt variabile. Pentru a ment, ine odenumire fixa, se foloses, te un identificator unic al partit, iei un s, ir numit UUID (UniversallyUnique Identifier). Pe Linux putem obt, ine acest identificator cu ajutorul comenzii blkidsau listând cont, inutul directorului /dev/disk/by-uuid, ca mai jos:

1 student@uso:~$ sudo blkid /dev/sda12 [sudo] password for student:3 /dev/sda1: UUID="a14d0991-a3d8-48d6-ac8c-327d1a524501" TYPE="ext4"

PARTUUID="df4f561b-01"4 student@uso:~$ ls -l /dev/disk/by-uuid/5 total 06 lrwxrwxrwx 1 root root 10 sep 15 00:43 a14d0991-a3d8-48d6-ac8c-327

d1a524501 -> ../../sda17 student@uso:~$ cat /etc/fstab8 # /etc/fstab: static file system information.9 #

10 # Use ’blkid’ to print the universally unique identifier for a11 # device; this may be used with UUID= as a more robust way to name

devices

Page 10: Capitolul 9 Pornirea sistemului - ERASMUS Pulseelf.cs.pub.ro/uso/res/carte/uso_cap-09-boot.pdf · Capitolul 9 Pornirea sistemului Atunci când un sistem hardware pornes, te, acesta

CAPITOLUL 9. PORNIREA SISTEMULUI 191

12 # that works even if disks are added and removed. See fstab(5).13 #14 # <file system> <mount point> <type> <options> <dump> <pass>15 # / was on /dev/sda1 during installation16 UUID=a14d0991-a3d8-48d6-ac8c-327d1a524501 / ext4 errors=

remount-ro 0 117 /swapfile none swap sw

0 0

În listarea de mai sus vedem ca pentru partit, ia /dev/sda1 folosim identificatorula14d0991-a3d8-48d6-ac8c-327d1a524501. Acest identificator de partit, ie este folosit s, iîn fis, ierul /etc/fstab, fis, ier unde se configureaza sistemele de fis, iere ce vor fi montate,as, a cum vom detalia în Sect, iunea 10.2.1.

9.4 Bootloader

Atunci când firmware-ul de boot trebuie sa treaca la urmatorul pas din procesul de boot,va încarca în memorie bootloader-ul sau boot manager-ul s, i îi va transfera controlulprocesului de boot. Bootloader-ul este un program cu rolul de încarcare a sistemului deoperare.

Înainte de încarcarea sistemului de operare, bootloader-ul poate oferi utilizatoruluiopt, iunea de a alege între diferite sisteme de operare s, i va oferi posibilitatea configurariiopt, iunilor de bootare a kernel-ului.

Când vorbim despre diferite sisteme de operare ne referim la sisteme de operare diferite,precum Linux sau Windows, aflate pe partit, ii distincte, precum s, i la versiuni diferite deimagini de kernel (fis, iere ce cont, in sistemul de operare) ale aceluias, i sistem de operare,fis, iere aflate pe aceeas, i partit, ie.

În cazul folosirii BIOS, încarcarea bootloader-ului se face în doi pas, i:

1. întâi se încarca prima faza din bootloader (numita 1st stage bootloader), osecvent,a scurta care se gases, te în MBR (Master Boot Record)

2. ulterior 1st stage bootloader încarca a doua faza din bootloader (2nd stagebootloader), o secvent,a mai detaliata care se gases, te într-un fis, ier pe disc s, i caredet, ine codul pentru a putea opta între diferite sisteme de operare s, i pentru aconfigura opt, iunile de boot pentru kernel

În cazul UEFI, partit, ia ESP (EFI System Partition) cont, ine fis, iere executabile .efi care vorîncarca sistemul de operare. Aceste fis, iere executabile sunt echivalentul bootloader-uluiîn cazul BIOS. Fiind o tehnologie main noua, UEFI nu foloses, te un bootloader în maimulte faze ci încarca direct din partit, ia ESP fis, ierul necesar.

În general un sistem de operare are un bootloader aferent. În cazul UEFI, la bootare sepoate selecta direct acel bootloader din partit, ia ESP. În cazul BIOS, însa, se încarcamereu acelas, i 1st stage s, i 2nd stage bootloader. De aceea, daca dorim sa folosimdoua sisteme de operare diferite, bootloader-ul încarcat va oferi opt, iune sa bootezesistemul de operare nativ, sau sa încarce un alt bootloader. Opt, iunea de încarcare aunui bootloader din alte bootloader se numes, te chainloading.

Page 11: Capitolul 9 Pornirea sistemului - ERASMUS Pulseelf.cs.pub.ro/uso/res/carte/uso_cap-09-boot.pdf · Capitolul 9 Pornirea sistemului Atunci când un sistem hardware pornes, te, acesta

192 INTRODUCERE ÎN SISTEME DE OPERARE

Concret, daca un sistem are instalat Linux s, i Windows, sistemul va fi configuratbootloader-ul specific Linux (GRUB) ca 1st stage s, i 2nd stage bootloader. Dacautilizatorul va opta sa booteze în Linux atunci bootloader-ul GRUB va încarca Linux,altfel bootloader-ul GRUB va încarca, prin chainloading, bootloader-ul WinLoader careîncarca Windows.

9.4.1 GRUB

În Linux, bootloader-ul folosit cel mai adesea pe PC este GRUB (GRand UnifiedBootloader). Mai exista s, i alte bootloadere, precum Das uBoot, folosit în sistemeîncorporate.

Atunci când instalam Linux, bootloader-ul GRUB este instalat corespunzator: 1st stagebootloader este în MBR sau 2nd stage bootloader este pe disc în fis, ierul/boot/grub/core.img. Daca sistemul avea instalat s, i Windows, instalarea GRUB vadetecta acest lucru s, i va configura chainloading pentru a permite boot-area Windows.Când folosim UEFI, GRUB va plasa un fis, ier imagine .efi în /efi/boot/TODO.efi.

Instalarea corespunzatoare a GRUB va duce la afis, area unui ecran precum cel de maijos:

+ screenshot cu ecran GRUB

În acest ecran observam opt, iunile de boot pentru GRUB. În mod tipic, un utilizatorselecteaza una dintre intrari s, i apoi apasa tasta Enter pentru a boota folosind aceaopt, iune.

Un utilizator poate alege sa editeze o intrare GRUB. În acest caz utilizatorul va apasatasta e s, i va accesa o noua interfat,a precum cea de mai jos:

+ screenshot cu editare comanda GRUB

În imaginea de mai sus vedem configurat, ia pentru o opt, iune de boot GRUB. În acestecran putem modifica imaginea de kernel (de nucleu de sistem de operare) folosita,putem modifica partit, ia radacina folosita sau opt, iuni de boot pentru kernel. O utilizare aeditarii opt, iunilor de boot este recuperarea parolei contului root folosind opt, iuneainit=/bin/bash as, a cum am precizat în Sect, iunea 5.6. Detalii despre opt, iunile de bootaferente nucleului sistemului de operare prezentam în Sect, iunea 9.5.

Opt, iunile afis, ate de GRUB sunt încarcate din fis, ierul /boot/grub/grub.cfg, fis, ierul deconfigurare GRUB. Acest fis, ier nu se recomanda sa fie editat manual; fis, ierul estegenerat din analiza automata a sistemului s, i a configurarilor de comanda update-grub.În momentul rularii comenzii update-grub, aceasta consulta partit, iile sistemului,detecteaza sisteme de operare s, i imagini de kernel, consulta configurarile din sistem s, iapoi genereaza fis, ierul /boot/grub/grub.cfg.

Configurarile GRUB, care devin persistente dupa rularea comenzii update-grub, serealizeaza în fis, ierul /etc/default/grub s, i în fis, ierele din /etc/grub.d/. În fis, ierul/etc/default/grub sunt variabile GRUB care afecteaza comportamentul acestuia. Mai josavem o secvent,a din fis, ierul /etc/default/grub:

1 student@uso:~$ cat /etc/default/grub2 # If you change this file, run ’update-grub’ afterwards to update

Page 12: Capitolul 9 Pornirea sistemului - ERASMUS Pulseelf.cs.pub.ro/uso/res/carte/uso_cap-09-boot.pdf · Capitolul 9 Pornirea sistemului Atunci când un sistem hardware pornes, te, acesta

CAPITOLUL 9. PORNIREA SISTEMULUI 193

3 # /boot/grub/grub.cfg.4 # For full documentation of the options in this file, see:5 # info -f grub -n ’Simple configuration’6

7 GRUB_DEFAULT=08 GRUB_TIMEOUT_STYLE=hidden9 GRUB_TIMEOUT=10

10 GRUB_DISTRIBUTOR=‘lsb_release -i -s 2> /dev/null || echo Debian‘11 GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"12 GRUB_CMDLINE_LINUX=""

Observam la începutul fis, ierului comentariul care spune ca aceste configurari sunt apoimarcate persistente în fis, ierul de configurare /boot/grub/grub.cfg dupa rularea comenziiupdate-grub. Opt, iunile de mai sus reprezinta:

• GRUB_DEFAULT: indexul opt, iunii implicite de boot a GRUB; în ecranul afis, at catreutilizator la bootare, daca utilizatorul nu alege o opt, iune, opt, iunea implicita va fialeasa

• GRUB_TIMEOUT: dupa cât timp de la afis, area ecranului GRUB, timp în careutilizatorul nu a atins nici o tasta, se booteaza în optiunea implicita

• GRUB_TIMEOUT_STYLE: precizeaza cum va fi afis, at ecranul de boot pâna laexpirarea timpului de afis, are; valoarea "hidden" înseamna ca nu se afis, eaza niciun ecran, s, i dupa 10 secunde se booteaza opt, iunea implicita; în acel interval de10 secunde utilizatorul poate apasa tasta Esc pentru a cauza afis, area ecranuluide boot

• GRUB_TIMEOUT_LINUX_DEFAULT: adauga opt, iunile respective nucleului cândbooteaza

În directorul /etc/grub.d/ sunt fis, iere de configurare pentru opt, iuni GRUB. Multe fis, ieresunt predefinite pentru configurari dedicate. Daca dorim sa facem configurari personalevom completa fis, ierele /etc/grub.d/40_custom sau /etc/grub.d/41_custom. Aceste fis, ieresunt citite literal s, i adaugate la sfârs, itul fis, ierului /boot/grub/grub.cfg.

Pentru detalii despre configurarea GRUB consultat, i documentat, ia, fie online (TODO:footnote), fie accesând pagina info: info grub "Configuration".

9.5 Pornirea kernel-ului s, i drivere

Rolul bootloader-ului este de a permite utilizatorului sa selecteze un sistem de operareîn care sa booteze, sa configureze opt, iunile acelui sistem de operare s, i apoi sa bootezeîn sistemul de operare.

Bootloader-ul va încarca un fis, ier numit imagine de kernel, care cont, ine codul sistemuluide operare, s, i apoi va transfera controlul catre acesta. Imaginea de kernel sau imagineade nucleu de sisteme de operare este practic un executabil care cont, ine implementareanucleului (kernel-ului), componenta critica în funct, ionarea sistemului.

Nucleul realizeaza configurarea componentelor hardware ale sistemului, încarcadriverele de dispozitiv (device drivere), monteaza sistemul de fis, iere radacina s, i apoipornes, te procesul init, primul proces al sistemului care la rândul sau va porni alte

Page 13: Capitolul 9 Pornirea sistemului - ERASMUS Pulseelf.cs.pub.ro/uso/res/carte/uso_cap-09-boot.pdf · Capitolul 9 Pornirea sistemului Atunci când un sistem hardware pornes, te, acesta

194 INTRODUCERE ÎN SISTEME DE OPERARE

procese. Un driver este un program executabil ce cont, ine codul pentru utilizarea s, iconfigurarea unui dispozitiv hardware. Dupa investigarea hardware-ului sistemului,nucleul sistemului de operare identifica dispozitivele hardware s, i apoi încarca de pedisc programele ce reprezinta device driverele.

9.5.1 Kernel-ul s, i driverele în Linux

Într-o configurat, ie tipica, fis, ierul reprezentând imaginea de kernel în Linux se gases, te în/boot/vmlinuz-<versiune>, unde <versiune> este versiunea de sistem de operare. Unexemplu este /boot/vmlinuz-4.15.0-29-generic. Acest fis, ier este configurat sa fieîncarcat de bootloader. Este încarcat în memorie s, i apoi executat transferându-secontrolul sistemului de operare. O investigat, ie în linia de comanda ne ofera informat, iidespre aceasta imagine:

1 student@uso:~$ file /boot/vmlinuz-4.15.0-29-generic2 /boot/vmlinuz-4.15.0-29-generic: Linux kernel x86 boot executable bzImage

, version 4.15.0-29-generic (buildd@lgw01-amd64-057) #31-Ubuntu SMP TueJul 17 15:39:52 UTC 2018, RO-rootFS, swap_dev 0x7, Normal VGA

În cazul de fat,a avem o imagine de kernel comprimata folosind algortimul bzip2, de undes, i precizarea "executable bzImage"; tot ca referint,a la faptul ca este comprimata este s, ifolosirea literei z în numele fis, ierului "vmlinuz-4.15.0-29-generic". Imaginea este de tipself-extracting: dupa ce este încarcata în memorie de bootloader, se transfera controlulimaginii care cont, ine o secvent,a init, iala de cod ce decomprima restul fis, ierului s, i apoi îlexecuta.

Driverele sunt localizate, în Linux, în directorul /lib/modules/<version>/kernel unde<version> este versiunea de sistem de operare. De fapt, în acel director se gasescmodulele de kernel, componente externe nucleului care pot fi încarcate în cadrulacestuia pentru a-i extinde funct, ionlitatea. Ne referim la orice funct, ionlitate externa careextinde funct, ionalitatea nucleului ca fiind module de kernel, s, i vom numi drivere modulede kernel al caror rol este de a permite utilizarea s, i configurarea componentelorhardware. Astfel modulele corespunzatoare imaginii /boot/vmlinuz-4.15.0-29-generic segasesc în directorul /lib/modules/4.15.0-29-generic/kernel/. În Linux un driver estesimilar unui fis, ier executabil; un driver are extensia ".ko":

1 student@uso:~$ file /lib/modules/4.15.0-29-generic/kernel/drivers/net/ethernet/intel/e1000/e1000.ko

2 /lib/modules/4.15.0-29-generic/kernel/drivers/net/ethernet/intel/e1000/e1000.ko: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), BuildID[sha1]=c2bcba22a6d98cf9d4c3735248bc48674ead034b, not stripped

Observam ca driverul e1000, pentru placi de ret,ea Intel, se gases, te în fis, ierul e1000.ko,fis, ier de tipul ELF (Executable and Linking Format), formatul clasic de executabil peLinux.

Driverele sunt încarcate fie de kernel la pornirea sistemului, dupa identificareacomponentelor hardware, fie în timp real, de programe dedicate sau de utilizator. Înlucrul cu module sau drivere, utilizatorul poate realiza urmatorele operat, ii:

• listarea modulelor încarcate în nucleu, folosind comanda lsmod

Page 14: Capitolul 9 Pornirea sistemului - ERASMUS Pulseelf.cs.pub.ro/uso/res/carte/uso_cap-09-boot.pdf · Capitolul 9 Pornirea sistemului Atunci când un sistem hardware pornes, te, acesta

CAPITOLUL 9. PORNIREA SISTEMULUI 195

• încarcarea unui modul de kernel nou, folosind comanda insmod sau comandamodprobe

• descarcarea unui modul de kernel existent, folosind comanda rmmod saucomanda modprobe -r

• afis, area de informat, ii despre un modul de kernel folosind comanda modinfo

Mai jos avem exemple de folosire a acestor comenzi:

+ exemplu de folosire comenzi de lucru cu module

Comanda insmod primes, te ca argumente calea completa catre fis, ierul ce cont, inemodulul de kernel în vreme ce comanda modprobe primes, te numele modulului s, i apoi îlcauta în directorul /lib/modules/<version>.

Daca dorim încarcate anumite versiuni de module de kernel la pornirea sistemului, saudaca dorim sa împiedicam încarcarea anumitor module (blacklisting) atunci vom realizaconfigurari în fis, ierul /etc/modules sau în directorul /etc/modprobe.d/.

În directorul /boot/ pe lânga imagini de kernel, apar fis, iere numite initrd.img-<version>.De exemplu fis, ierul /boot/initrd.img-4.15.0-29-generic. Aceasta imagine este numita ramdisk image s, i cont, ine o serie de drivere necesare pentru pornirea nucleului. Atunci cândnucleul pornes, te trebuie sa încarce informat, ii de pe disc. Pentru a le accesa are însanevoie de driverul de disc s, i de driverul de sistem de fis, iere. O solut, ie ar fi sa fie adaugateîn imaginea de kernel; dar, dat fiind numarul mare de discuri s, i de sisteme de fis, iere, arrezulta o imagine de kernel mult prea mare s, i cu multe drivere inutile pe sistemul curent.Solut, ia este adaugarea acestor drivere într-o imagine separata: ram disk image.

Imaginea de ram disk este încarcata de bootloader, as, a cum am vazut în ecranul deconfigurare a opt, iunii GRUB (TODO: referint,a la figura). Când nucleul booteaza arereferint,a la aceasta imagine în memorie s, i poate folosi driverul de disc s, i de sistem defis, iere corespunzator pentru a putea folosi discul.

Imaginea de ram disk este generata la instalarea unei versiuni noi de kernel s, i poate figenerata la nevoie cu ajutorul comenzii mkinitramfs. Nu vom detalia aici aceastacomanda, putet, i urmari pagina sa de manual sau exemple pe Internet.

Dupa cum spuneam mai sus, în ecranul de bootloader sau în cadrul opt, iuniiGRUB_CMDLINE_DEFAULT putem preciza opt, iuni pentru kernel care afecteaza modulîn care acesta booteaza s, i ruleaza. Comanda echivalenta folosita pentru bootareakernel-ului, împreuna cu opt, iunile aferente se gases, te în fis, ierul /proc/cmdline:

1 student@uso:~$ cat /proc/cmdline2 BOOT_IMAGE=/boot/vmlinuz-4.15.0-34-generic root=UUID=a14d0991-a3d8-48d6-

ac8c-327d1a524501 ro quiet splash

Dintre opt, iunile de boot ale nucleului, precizam:

• opt, iunile debug, verbose, quiet care configureaza nivelul de detaliu al mesajelorde boot afis, ate la pornirea kernel-ului

• opt, iunea splash activeaza splashscreen-ul la pornirea sistemului, în loc sa afis, ezemesajele de boot

• opt, iunea noacpi dezactiveaza ACPI (Advanced Configuration and Power Interface)o componenta PC care uneori este cauzatoare de probleme

Page 15: Capitolul 9 Pornirea sistemului - ERASMUS Pulseelf.cs.pub.ro/uso/res/carte/uso_cap-09-boot.pdf · Capitolul 9 Pornirea sistemului Atunci când un sistem hardware pornes, te, acesta

196 INTRODUCERE ÎN SISTEME DE OPERARE

O lista completa a acestor opt, iuni gasit, i în documentat, ia nucleului (TODO: footnote)

Dupa ce nucleul de operare a pornit, putem afla informat, ii despre acesta. Pe lângaaflarea liniei de comanda echivalente din fis, ierul /proc/cmdline, mai putem afla versiuneanucleului care ruleaza folosind comanda:

1 student@uso:~$ uname -a2 Linux uso 4.15.0-34-generic #37-Ubuntu SMP Mon Aug 27 15:21:48 UTC 2018

x86_64 x86_64 x86_64 GNU/Linux

De asemenea, pentru depanare sau informare, nucleul transmite informat, ii care sejurnalizeaza. Pentru accesarea jurnalului folosim comanda dmesg, ca mai jos:

1 student@uso:~$ dmesg2 [ 0.000000] Linux version 4.15.0-34-generic (buildd@lgw01-amd64-047) (

gcc version 7.3.0 (Ubuntu 7.3.0-16ubuntu3)) #37-Ubuntu SMP Mon Aug 2715:21:48 UTC 2018 (Ubuntu 4.15.0-34.37-generic 4.15.18)

3 [ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.15.0-34-genericroot=UUID=a14d0991-a3d8-48d6-ac8c-327d1a524501 ro quiet splash

4 [ 0.000000] KERNEL supported cpus:5 [ 0.000000] Intel GenuineIntel6 [ 0.000000] AMD AuthenticAMD7 [...]

9.6 Pornirea init s, i a serviciilor de startup în Linux

Dupa ce nucleul s, i driverele sunt încarcate s, i sistemul de operare este init, ializat, trebuiepornite primele procese. Pentru aceasta se pornes, te primul proces, numit init, careapoi pornes, te alte procese. As, a cum am precizat în Sect, iunea 4.3.4, procesul init esteîn vârful ierarhiei proceselor având ca roluri crearea primelor procese din sistemul deoperare s, i adoptarea proceselor orfane.

În mod tradit, ional, init era procesul pornit din executabilul /sbin/init s, i se numea SystemV init, dupa numele unei versiuni importante de UNIX (UNIX System V). În mod curentimplementarea cea mai raspândita de init este systemd, cu executabilul aflat în/lib/systemd/systemd:

1 student@uso:~$ ls -l /sbin/init2 lrwxrwxrwx 1 root root 20 aug 6 17:34 /sbin/init -> /lib/systemd/systemd

Observam ca /sbin/init este, pe sistemele Linux moderne, un fis, ier de tipul legaturasimbolica la fis, ierul /lib/systemd/systemd. Astfel ca, pe sistemele moderne,configurarea init echivaleaza configurarii systemd.

Procesul principal systemd ruleaza ca procesul cu PID-ul 1. Exista posibilitatea creariiunui proces per utilizator prin transmiterea opt, iunii --user comenzii systemd. Acest lucrueste util atunci când dorim sa cream s, i sa gestionam servicii la nivelul utilizatorului, la lanivelul sistemului.

Serviciile sunt procese dedicate, de obicei procese daemon, care ofera funct, ionalitat, isuplimentare sistemului sau care gestioneaza buna funct, ionare a acestuia. Serviciilesunt în general pornite s, i gestionate de systemd.

În mod tradit, ional, în implementarea veche (System V) de init, serviciile se configurau s, irulau cu ajutorul scripturilor de init, ializare din /etc/init.d/. Pentru a ment, ine

Page 16: Capitolul 9 Pornirea sistemului - ERASMUS Pulseelf.cs.pub.ro/uso/res/carte/uso_cap-09-boot.pdf · Capitolul 9 Pornirea sistemului Atunci când un sistem hardware pornes, te, acesta

CAPITOLUL 9. PORNIREA SISTEMULUI 197

compatibilitatea, systemd foloses, te în continuare acele scripturi de init, ializare, pe carele le putem localiza pe sistemele moderne:

1 student@uso:~$ ls /etc/init.d/2 acpid apport cron dns-clean hwclock.sh

kmod plymouth rsync speech-dispatcherudev whoopsie

3 alsa-utils avahi-daemon cups gdm3 irqbalancelm-sensors plymouth-log rsyslog spice-vdagent

ufw x11-common4 anacron bluetooth cups-browsed grub-common kerneloops

network-manager pppd-dns saned sshunattended-upgrades

5 apparmor console-setup.sh dbus hddtemp keyboard-setup.shnetworking procps screen-cleanup sysstat uuidd

În systemd, serviciile, împreuna cu alte componente, sunt numite units. Pentru avizualiza toate unitat, ile systemd, folosimd comanda systemd --list-units.

Daca dorim sa afis, am informat, ii, oprim, porni sau reporni servicii, putem folosi fieinterfat,a clasica /etc/init.d/, fie comanda service, fie comanda systemctl. Mai jos suntcomenzile pentru afis, area starii serviciului SSH (pentru conexiune la distant,a) s, i pentrupornirea serviciului:

1 student@uso:~$ /etc/init.d/ssh status2 student@uso:~$ service ssh status3 student@uso:~$ systemctl status ssh.service4 student@uso:~$ sudo /etc/init.d/ssh start5 student@uso:~$ sudo service ssh start6 student@uso:~$ sudo systemctl start ssh.service

Daca dorim sa oprim sau sa repornim serviciul, folosim parametrul stop, respectivrestart, în loc de start.

Daca dorim adaugarea de servicii în sistem putem sa le adaugam în configurareasystemd sau putem folosi supervisor. Vom detalia în Sect, iunea 13.5.1

9.6.1 Pornirea terminalelor de login

Dupa pornirea serviciilor init, iale (startup processes), init/systemd trebuie sa porneascas, i terminalele de login, numite terminal virtuale, unde utilizatorul se va putea autentifica.Pe sistemele cu interfat,a grafica aceste terminale virtuale nu sunt accesibile directpentru ca este pornit mediul grafic. Pentru accesarea lor vom folosi combinat, iile detaste Ctrl+Alt+F1, Ctrl+Alt+F2 ... Ctrl+Alt+F6; sunt 6 astfel de terminale. Pe un sistemfara interfat,a grafica se vede implicit primul terminal putându-se accesa celelalteterminale folosind combinat, iile de tastste Ctrl+Alt+F2 ... Ctrl+Alt+F6.

Mediul grafic, în cazul în care este prezent, poate porni în locul unui terminal virtual.Acesta va fi accesibil de obicei prin Ctrl+Alt+F1 sau Ctrl+Alt+F7, dar orice configurat, ieeste posibila.

Terminalele virtuale sunt pornite s, i gestionate de init/systemd pe urmatorul flux:

• systemd pornes, te procese numite getty care reprezinta interfat,a de comunicare cuterminalul virtual.

Page 17: Capitolul 9 Pornirea sistemului - ERASMUS Pulseelf.cs.pub.ro/uso/res/carte/uso_cap-09-boot.pdf · Capitolul 9 Pornirea sistemului Atunci când un sistem hardware pornes, te, acesta

198 INTRODUCERE ÎN SISTEME DE OPERARE

• Apoi getty afis, eaza un prompt de utilizator unde se introduce numele de utilizators, i parola.

• Apoi getty pornes, te procesul login care cites, te parola utilizatorului s, i o verifica înfis, ierul /etc/shadow.

• Daca parola corecta, procesul login pornes, te shell-ul descris ca ultima intrare din/etc/passwd.

Diagrama de mai jos ilustreaza pas, ii de mai sus:

+ pornirea terminalelor virtuale s, i a shell-urilor

Figura 9.2: pornirea terminalelor virtuale s, i a shell-urilor

Putem vizualiza unitat, ile gestionate de systemd pentru terminalele virtuale folosindcomanda de mai jos:

1 student@uso:~$ systemctl list-units | grep getty2 [email protected]

loaded active running Getty on tty23 [email protected]

loaded active running Getty on tty34 [email protected]

loaded active running Getty on tty45 [email protected]

loaded active running Getty on tty56 [email protected]

loaded active running Getty on tty67 system-getty.slice

loaded active active system-getty.slice8 getty.target

loaded active active Login Prompts

Observam în cadrul comenzii ca sunt 5 terminale virtuale, de la tty2 pâna la tty6. Putemobserva s, i procesele aferente celor 5 terminale virtuale, gestionate de procesul agetty,o implementare de getty.

1 student@uso:~$ ps -f -C agetty

Page 18: Capitolul 9 Pornirea sistemului - ERASMUS Pulseelf.cs.pub.ro/uso/res/carte/uso_cap-09-boot.pdf · Capitolul 9 Pornirea sistemului Atunci când un sistem hardware pornes, te, acesta

CAPITOLUL 9. PORNIREA SISTEMULUI 199

2 UID PID PPID C STIME TTY TIME CMD3 root 4453 1 0 14:27 tty2 00:00:00 /sbin/agetty -o -p -- \u

--noclear tty2 linux4 root 4454 1 0 14:27 tty3 00:00:00 /sbin/agetty -o -p -- \u

--noclear tty3 linux5 root 4455 1 0 14:27 tty4 00:00:00 /sbin/agetty -o -p -- \u

--noclear tty4 linux6 root 4456 1 0 14:27 tty5 00:00:00 /sbin/agetty -o -p -- \u

--noclear tty5 linux7 root 4457 1 0 14:27 tty6 00:00:00 /sbin/agetty -o -p -- \u

--noclear tty6 linux

Dupa o autentificare corecta la un terminal virtual este pornit shell-ul. Shell-ul poate fipornit s, i dintr-un emulator de terminal din interfat,a grafica s, i dintr-un pseudo-terminalcreat printr-o conexiune SSH. În toate situat, iile shell-ul foloses, te nis, te fis, iere deconfigurare specifice care personalizeaza experient,a utilizatorului în linia de comanda.Vom discuta despre acestea în Capitolul 7.

9.7 Anexa: Resetarea parolei administrative

Este posibil ca pentru un sistem sa pierdem parola administrativa, a contului root saua contului Administrator s, i sa fie nevoie de resetarea acesteia. În Sect, iunea 5.6 amprecizat modurile uzuale de resetare a parolei administrative s, i în Linux s, i în Windows. ÎnLinux folosim opt, iunea init=/bin/bash la bootarea sistemului de operare, editând intrareaîn bootloader, sau folosim unui USB stick bootabil sau CD-ROM. În Windows folosimUltimate Boot CD.

În Linux este posibil sa configuram parola de acces la bootloader (GRUB) s, i atunciopt, iunea cu editarea intrarii în bootloader nu funct, ioneaza. Ramâne însa o opt, iunefolosirea unui USB stick bootabil care nu necesita editarea opt, iunilor.

Chiar s, i as, a, este posibil sa fie dezactivat din firmware-ul de boot folosirea USB sauCD-ROM pentru bootare s, i sa fie configurata parola de acces la firmware care nupermite editarea opt, iunilor s, i, deci, adaugarea opt, iunii de boot USB sau CD-ROM.Pentru aceasta avem solut, ia desfacerii unitat, ii s, i extragerea bateriei CMOS care vaduce la resetarea configurarii firmware-ului de boot la o valoare implicita, fara parola.Ulterior vom activa bootarea de pe USB sau CD-ROM s, i vom reseta parolaadministrativa folosind un USB stick sau CD-ROM bootabil. Evident, resetarea paroleifirmware-ului de boot prin extragerea bateriei CMOS necesita acces fizic la sistem.

O forma mai directa de a trece de parola de firmware de boot sau cea de bootloadereste detas, area discului din unitate s, i atas, area acestuia la o alta unitate. Apoi sebooteaza acel sistem cu un stick USB sau CD-ROM bootabil s, i se reseteaza parola.Pentru a preveni acest lucru o solut, ie este criptarea discului, lucru ce face imposibilaorice modificare fara accesul la parola.

Page 19: Capitolul 9 Pornirea sistemului - ERASMUS Pulseelf.cs.pub.ro/uso/res/carte/uso_cap-09-boot.pdf · Capitolul 9 Pornirea sistemului Atunci când un sistem hardware pornes, te, acesta

200 INTRODUCERE ÎN SISTEME DE OPERARE

9.8 Anexa: Crearea unui stick USB bootabil cu Linux

Pentru a instala un sistem de operare Linux un PC avem nevoie de un mediu de boot. Înmod tipic, acest mediu va fi un stick USB bootabil. Pentru început acest stick trebuie safie partit, ionat s, i apoi marcata partit, ia principala ca fiind bootabila. Pas, ii de pregatire aimediului de boot sunt:

1. S, tergerea vechilor componentele de pe stick-ul USB. Presupunând ca stick-ul USBeste accesibil prin intrarea /dev/sdb, rulam comanda

1 dd if=/dev/zero of=/dev/sdb bs=1M count=16

Adica scriem 16MB de zero-uri anulând tabela de partit, ii s, i pregatind discul.

2. Crearea tabelei de partit, ii s, i apoi unei partit, ii FAT32 s, i marcarea acesteia ca fiindbootabila. Pentru aceasta folosim utilitarul gparted (cu interfat,a grafica), accesândopt, iunile de mai jos:

TODO opt, iuni gparted

În acest moment avem un stick USB cu o partit, ie FAT32 bootabila.

Pentru scrierea de informat, ii pe stick-ul USB, descarcam un fis, ier .ISO cu distribut, iaLinux dorita. Apoi folosim utilitarul unetbootin (pe orice platforma)1, cu interfat,a grafica.Înainte de folosirea sa, trebuie sa fie montat stick-ul USB, fie automat fie printr-ocomanda de forma

1 student@uso:~$ sudo mkdir /mnt/sdb12 student@uso:~$ sudo mount /dev/sdb1 /mnt/sdb1

În interfat,a unetbootin selectam fis, ierul .ISO pe care dorim sa îl scriem s, i destinat, ia undeeste montat stick-ul, adica /mnt/sdb1 în cazul nostru.

O alternativa, care permite crearea unui stick USB cu Linux folosind Windows estefolosirea utilitarului Rufus2 urmarind indicat, iile de aici3.

9.9 Anexa: Crearea unui stick USB bootabil cuWindows

Pentru crearea unui stick bootabil cu Windows, pregatim mediul de instalare (stick-ulUSB) în mod similar cu instalarea Linux, cu o diferent,a: partit, ia trebuie sa fie formatataNTFS.

Apoi se urmeaza pas, ii de mai jos, detaliat, i s, i aici4:

1. Se monteaza fis, ierul ISO imagine de Windows.

1 student@uso:~$ mkdir iso-mnt/2 student@uso:~$ sudo mount -o loop windows.iso iso-mnt/

1https://unetbootin.github.io2https://rufus.akeo.ie3https://tutorials.ubuntu.com/tutorial/tutorial-create-a-usb-stick-on-windows4https://askubuntu.com/a/487970

Page 20: Capitolul 9 Pornirea sistemului - ERASMUS Pulseelf.cs.pub.ro/uso/res/carte/uso_cap-09-boot.pdf · Capitolul 9 Pornirea sistemului Atunci când un sistem hardware pornes, te, acesta

CAPITOLUL 9. PORNIREA SISTEMULUI 201

2. Se monteaza stick-ul USB:

1 student@uso:~$ sudo mkdir /mnt/sdb12 student@uso:~$ sudo mount /dev/sdb1 /mnt/sdb1

3. Se copiaza tot cont, inutul din fis, ierul ISO cu Windows pe stick-ul USB:

1 student@uso:~$ sudo cp -r iso-mnt/* /mnt/sdb1/

4. Se instaleaza GRUB pe stick-ul USB:

1 sudo grub-install --target=i386-pc --boot-directory="/mnt/sdb1/boot"/dev/sdb

5. Se genereaza fis, ierul /mnt/sdb1/boot/grub/grub.cfg cu urmatorul cont, inut:

1 echo "If you see this, you have successfully booted from USB :)"2 insmod ntfs3 insmod search_fs_uuid4 search --no-floppy --fs-uuid <UUID> --set root5 ntldr /bootmgr6 boot

iar în loc de <UUID> scriem identificatorul pe care îl obt, inem folosind comanda:

1 student@uso:~$ sudo blkid /dev/sdb1

6. Demontam stick-ul USB s, i fis, ierul ISO:

1 student@uso:~$ sudo umount /mnt/sdb12 student@uso:~$ sudo umount iso-mnt/

Acum putem folosi stick-ul pentru a boota Windows.

9.10 Anexa: Adaugarea unei intrari GRUB pentruUDPCast

Pentru a demonstra o configurare particulara pentru GRUB vom descrie instalareaUDPcast pe disc pentru a putea fi bootat prin GRUB. UDPCast1 este o imaginebootabila de CD care permite transferul prin ret,ea al unui disc de la o sursa catre maimulte destinat, ii, asigurând astfel o clonare a discului.

Pentru a adauga o intrare în GRUB pentru UDPCast s, i pentru a boota astfel în GRUBfara a fi nevoie de un stick USB sau un CD-ROM bootabil, urmam pas, ii:

1. Obt, inem fis, ierul ISO UDPCast:

1 student@uso:~$ wget http://www.udpcast.linux.lu/20120424/udpcd.iso

2. Montam fis, ierul ISO:

1 student@uso:~$ mkdir iso-mnt/2 student@uso:~$ sudo mount -o loop udpcd.iso iso-mnt/3 student@uso:~$ ls iso-mnt/4 ISOLINUX.BIN ISOLINUX.CFG boot.catalog initrd linux pxelinux.0

1http://www.udpcast.linux.lu

Page 21: Capitolul 9 Pornirea sistemului - ERASMUS Pulseelf.cs.pub.ro/uso/res/carte/uso_cap-09-boot.pdf · Capitolul 9 Pornirea sistemului Atunci când un sistem hardware pornes, te, acesta

202 INTRODUCERE ÎN SISTEME DE OPERARE

Din cont, inutul fis, ierului ISO ne intereseaza fis, ierele initrd s, i linux, adica imagineade ram disk s, i imaginea de kernel.

3. Copiem imaginea de ram disk si cea de kernel într-un director din /boot:

1 student@uso:~$ sudo mkdir /boot/udpcast2 student@uso:~$ sudo cp iso-mnt/{initrd,linux} /boot/udpcast3 student@uso:~$ ls /boot/udpcast4 initrd linux

4. Adaugam configurarea corespunzatoare în fis, ierul /etc/grub.d/40_custom

1 student@uso:~$ sudo blkid /dev/sda12 /dev/sda1: UUID="a14d0991-a3d8-48d6-ac8c-327d1a524501" TYPE="ext4"

PARTUUID="df4f561b-01"3 student@uso:~$ sudo vi /etc/grub.d/40_custom4 student@uso:~$ cat /etc/grub.d/40_custom5 #!/bin/sh6 exec tail -n +3 $07 # This file provides an easy way to add custom menu entries. Simply

type the8 # menu entries you want to add after this comment. Be careful not

to change9 # the ’exec tail’ line above.

10

11 menuentry ’UDPCast’ {12 insmod part_msdos13 insmod ext214 set root=’(hd0,msdos1)’15 search --no-floppy --fs-uuid --set=root a14d0991-a3d8-48d6-

ac8c-327d1a52450116 linux /boot/udpcast/linux root=01:0017 initrd /boot/udpcast/initrd18 }

În configurarea GRUB am folosit UUID-ul partit, iei /dev/sda1, partit, ia unde segases, te directorul /boot (a14d0991-a3d8-48d6-ac8c-327d1a524501) pe carel-am descoperit cu ajutorul comenzii blkid. Am folosit construct, ia (hd0,msdos1)pentru a identifica prima partit, ie din primul hard disk, adica /dev/sda1.

5. Actualizam configurat, ia GRUB:

1 student@uso:~$ sudo update-grub2 Generating grub configuration file ...3 [...]4 done5 student@uso:~$ grep UDPCast /boot/grub/grub.cfg6 menuentry ’UDPCast’ {

În ultima comanda am verificat ca intrarea a fost adaugata în fis, ierul de configurareGRUB: /boot/grub/grub.cfg.

6. Demontam fis, ierul ISO:

1 student@uso:~$ sudo umount iso-mnt2 student@uso:~$ sudo rmdir iso-mnt

7. Repornim sistemul s, i apoi vom avea în GRUB intrarea aferenta UDPCast.

Page 22: Capitolul 9 Pornirea sistemului - ERASMUS Pulseelf.cs.pub.ro/uso/res/carte/uso_cap-09-boot.pdf · Capitolul 9 Pornirea sistemului Atunci când un sistem hardware pornes, te, acesta

CAPITOLUL 9. PORNIREA SISTEMULUI 203

9.11 Anexa: Booting în Windows

În Windows 7, 8 s, i 10, bootarea se bazeaza pe trei componente:

• Windows Boot Manager (Bootmgr.exe)

• bootloader-ul sistemului de operare (Windload.exe)

• loader-ul unui sistem suspendat (Winresume.exe)

A treia componenta este folosita doar pentru încarcarea unui sistem de operaresuspendat/hibernat.

Windows Boot Manager este o componenta generica ce permite selectarea între maimulte instant,e de sistem de operare Windows de pe un sistem dat. Windows BootManager prezinta utilizatorului opt, iunile de sistem de operare pe care sa booteze; dupace utilizatorul alege opt, iunea respectiva, Windows Boot Manager încarca bootloader-ulaferent s, i acesta, ulterior, va încarca sistemul de operare.

Opt, iunile de boot, însemnând ce sisteme de operare sunt disponibile s, i ce opt, iuni deboot sunt folosite pentru un sistem de operare, sunt ret, inute într-o zona numita BCD(Boot Configuration Data), zona ce poate fi editata folosind BCDEdit.exe, un utilitar inclusîn Windows.

Detalii despre procesul de boot în Windows gasit, i în documentat, ie1.

9.12 Concluzii

Un sistem de calcul parcurge mai mult, i pas, i din momentul pornirii acestuia (apasarii pebutonul de power on) pâna la pornirea primelor procese interactive, în general shell-ul.

Un utilizator are nevoie sa s, tie procesul de boot pentru a putea depana probleme ce potaparea, pentru a configura componentele pornite s, i opt, iunile acestora.

În general un sistem de calcul dispune de un firmware de boot, încarcat în memorie s, irulat imediat dupa pornirea sistemului. Acesta încarca s, i transfera controlul unuibootloader care încarca s, i transfera controlul sistemului de operare. Sistemul deoperare configureaza hardware-ul s, i pornes, te primele procese din sistem.

Conceptual pas, ii sunt similari, dar la nivel practic apar diferent,e între tipurile de sistemede calcul s, i sisteme de operare.

1https://docs.microsoft.com/en-us/windows-hardware/drivers/devtest/introduction-to-boot-options