Procesul de bootare Reprezint procesul prin care un
Procesul de bootare Reprezintă procesul prin care un computer ajunge din starea "off" în starea de rulare. Procesul de boot-are patru etape principale: 1. Etapa *Firmware* 2. Etapa *Bootloader* 3. Etapa *Kernel* 4. Etapa *Init*
Etapa Firmware Etapa firmware reprezintă primul stadiu ce are loc după ce computerul este pornit. În acest moment computerul este pornit dar are nevoie să înceapă să execute software necesar pentru încărcarea kernelului. Firmware-ul este de regulă reprezentat de Basic Input Output System (BIOS) și este stocat pe placa de bază într-o memorie non-volatilă precum memoria Read Only Memory (ROM) sau memoria flash. BIOS-ul oferă o imagine simplificată asupra hardware-ului computerului astfel încât sarcina următoarei etape este mai ușoară. În acest moment, computerul folosește programe mici ce trebuie încărcate în câțiva kilobytes de memorie. Chiar și în sistemele ce au înlocuit tradiționalul BIOS cu mai noul Unified Extensible Firmware Interface (UEFI), firmware-ul este denumit tot BIOS.
Etapa Firmware BIOS-ul are câteva sarcini de îndeplinit ca parte a primei etape de boot. Una dintre aceste sarcini este accea de a executa secvența Power-On Self Test (POST) pentru a se asigra de faptul că hardware-ul sistemului funcționează corect. Secvența POST rulează câteva teste de bază (“sanity checks”) pentru procesor, memorie și periferice astfel încât erori de bază, precum absența unui cip de memorie RAM sunt depistate rapid în procesul de bootare. Serverele moderne pot avea periferice ce conțin propriul BIOS-ul plăcii de bază inițializează BIOS-ul perifericelor în momentul pregătirii sistemului pentru bootare.
Etapa Firmware Sarcina finală a BIOS-ului este aceea de a găsi drive-ul de boot din mulțimea de echipamente de atocare și de a încărca Master Boot Record (MBR) de pe acel echipament (hard disk, SSD). Sectorul MBR - Master Boot Record este primul sector de pe disc (512 bytes). Acesta conține o tabelă de partiții și un mic cod executabil denumit first stage bootloader, al cărui scop este acela de a încărca un cod mai bogat denumit second stage bootloader.
Etapa Bootloader Sarcina principală a bootloader-ului este aceea de a încărca în memorie kernelul Linux și a-l executa; în continuare, kernelul preia controlul bootării sistemului. Cele mai cunoscute exemple de bootloadere sunt Linux Loader (LILO) și Grand Unified Bootloader (GRUB). Atât LILO cât și GRUB sunt capabile să booteze Linux de pe un sistem ce folosește BIOS-ROM. Ultimele versiuni de GRUB oferă suport pentru bootarea Linux-ului de pe un sistem cu UEFI, în timp de Efi Linux Loader (ELILO) poate fi folosit în locul lui LILO pe sisteme ce folosesc UEFI în locul tradiționalului BIOS. Sistemele UEFI oferă în etapa firmware mai multă memorie și caracteristici superioare astfel încât pot manipula caracteristici hardware mai complicate.
Etapa Bootloader În afara arhitecturilor tradiționale compatibile IBM-PC există și bootloadere specifice altor arhitecturi. Spre eemplu, pentru hardware-ul Sparc există Sparc Improved boot. LOader (SILO) iar pentru arhitectura Power. PC există Yet Another BOOTloader (YABOOT). Există posibilitatea de a boota din rețea prin intermediul Preboot Execution Environment (PXE). În acest caz se folosește o placă de bază compatibilă PXE și o placă de rețea ce oferă capacitatea de a obține o adresă de rețea și de a folosi protocolul Trivial File Transfer Protocol (TFTP) pentru a descărca un bootloader special de pe un server.
Etapa Bootloader Având în vedere că un bootloader este un software ce face să ruleze kernelul, este posibil să putem boota diverse sisteme de operare printr-un procedeu care se numește dual-boot. Kernelul rulat de către bootloader poate fi unul Linux, poate fi o imagine Microsoft Windows, sau un CD bootabil. Bootloader-ul poate transmite parametri kernelului, precum bootarea în mod administrativ (maintenance mode) sau pentru a activa/dezactiva diverse componente hardware. Spre exemplu, GRUB oferă o interfață la linie de comandă ce permite unui adinistrator să facă modificări ale kernelului înainte de a boota fără a necesita salvarea configurației pe disc. Bootloader-ul încarcă kernel-ul de pe disc în memorie și îi transferă controlul. În acest moment, sistemul rulează Linux și poate termina procesul de bootare.
Etapa Kernel După ce bootloader-ul a încărcat kernelul în memorie, kernelul trebuie să inițializeze driverele hardware și să monteze sistemul de fișiere root în următoarea etapă. Aceste două sarcini sunt destul de complicate deoarece facilitățile oferite de BIOS pentru acces la hardware sunt limitate. Kernelul ttrebuie să pornească sistemul în mai multe etape. Kernelul este conceput în principal ca un executabil obișnuit cu excepția faptului că trebuie să se auto includă – bibliotecile de programe partajate nu sunt disponibile în acest moment din proceul de boot. Kernelul se află în mod normal în partiția /boot care, pe majoritatea sistemelor se află pe o partiție separată ce este localizată la începutul hard-discului. Această locație este importantă pentru unele combinații de BIOS și bootloadere care pot accesa primii 1024 de cilindri ai discului.
Etapa Kernel Având în vedere că dimensiunile kernelului au crescut în timp, dezvoltatorii au început să comprime kernelul pentru a face față limitărilor impuse de BIOS. Astfel, executabilul ce conține kernelul se va decomprima în timpul încărcării, conducând la numele z. Image pentru kernel (litera z fiind asociată cu biblioteca de compresie Unix denumită zlib). Mai mult, kernelul a ajuns la dimensiuni din ce în ce mai mari și a devenit o problemă să fie încărcat într-n singur bloc de memorie. Formatul mare de kernel (denumit bzimage) permite încărcarea kernelului în mai multe blocuri de memorie.
Etapa Kernel În continuare, kernelul Linux trebuie să monteze sistemul de fișiere root / pentru a avansa la noua etapă în procesul de boot. Uneori însă, este posibil ca sistemul de fișiere root să se afle pe un echipament pe care kernelul nu știe să îl interpreteze. Soluția acestei probleme o constituie RAM discul denumit initrd. Driverele kernel necesare pentru continuarea bootării sunt adunate într-un sistem de fișiere stocat în afara kernelului în partiția /boot. Astfel, kernelul bootează, montează initrd, încarcă driverele și remontează sistemul real de fișiere root folosind noile drivere. Acest fapt permite adăugarea cu ușurință de noi drivere kernelului în timp ce acesta poate monta sistemul de fișiere root pe orice suport de stocare, chiar și în rețea.
Etapa Kernel Pe măsură ce kernelul bootează acesta este capabil să inițializeze componentele hardware astfel încât acestea să fie disponibile sistemului de operare. Sarcina finală a kernelului este aceea de a porni primul proces al sistemului. Având în vedere că este vorba despre primul proces, el va avea identificatorul (PID) 1, iar numele său este init. Vezi comanda: ps – ej. H Primul proces este responsabil cu majoritatea operațiilor sistemului de acum înainte. De regulă, acest proces este /sbin/init cu toate că există și alte variante, precum systemd. Pe dispozitive hardware embedded procesul init poate fi un shell sau un daemon. În ambele cazuri, pimul proces va porni daemonii ce vor fi folosiți de către sistem. Acest proces va fi părintele oricărui proces ce nu are un proces părinte și va rula atâta timp cât rulează sistemul de operare.
Etapa init Această etapă finalizează procesull de boot; în acest moment primul proces este pornit și “are grijă” de pornirea tuturor altor procese de sistem. Primul proces are două sarcini principale: - Prima este aceea de a continua procesul de bootare pentru a rula serviciile, afișarea display-urilor de login și “ascultarea” consolelor; - Cea de a doua este legată de administrarea de bază a proceselor. Spre exemplu, orice proces ce își pierde părintele este adoptat de init. Acest proces a fost proiectat din vremea Unix System V, purtând denumirea de Sys. Vinit. În ultimul timp au fost dezvoltate și alte versiuni pentru înlocuirea procesului tradițional init: Upstart și Systemd.
Etapa init Dacă sistemul folosește programul tradițional init, atunci fișierul /etc/inittab este utilizat pentru a determina ce scripturi vor fi executate pentru a porni serviciile disponibile pe sistem. Spre exemplu, fișierul inittab face referire la alte scripturi stocate de regulă în /etc/init. d În general, fiecărui serviciu al sistemului îi corespunde un script ce poate porni, opri sau reporni serviciul, iar init va apela aceste scripturi în funcție de necesități. În cazul în care procesul tradițional init a fost înlocuit de către Upstart, scripturile din /etc/init sunt folosite pentru a face inițializarea sistemului. În cazul în care procesul tradițional init a fost înlocuit de către Systemd, atunci fișierele din /etc/systemd sunt folosite pentru pornirea și rularea sistemului.
Comanda dmesg poate fi executată după bootarea sistemului pentru a vedea mesajele generate de kernel în timpul procesului de boot. Acest lucru poate fi folositor atunci când sistemul pare să nu fi bootat corect; mesajele afișate pot ajuta administratorul în depanarea prosecului de boot. Mesajele generate de către kernel sunt stocate într-un buffer de dimensiune limitată, astfel încât ele pot fi suprascrise dacă bufferul se umple. Unele dintre mesajele kernel generate la momentul de boot sunt stocate în fișierul /var/log/dmesg. De fiecare dată când sistemul bootează, fișierul /var/log/dmesg este suprascris cu mesajele generate în timpul procesului de bootare.
Comanda dmesg O practică comună este aceea de a executa comanda dmesg atunci când se conectează un nou echipament la sistem. În acest mod administratorul poate vedea dacă kernelul a reecunoscut noul echipament; de asemenea, se poate vedea care este calea care i-a fost atribuită. O utilizare mai puțin obișnuită a comenzii dmesg este aceea de a modifica mesajele afișate de către kernel pe consola sistem. Scrierea la terminal a unor comenzi și afișarea mesajelor kernel în același timp poate fi un lucru supărător, astfel încât comanda dmesg -n 1 poate fi solosită pentru a dezactiva afișarea mesajelor pe terminal, cu excepția celor critice
Fișierul var/log/messages Mesajele kernel și alte mesaje legate de sistem sunt în mod normal stocate în fișierul /var/log/messages , iar în unele distribuții Linux este vorba despre /var/log/syslog În mod tradițional, fișierul log primar este actualizat cu noile intrări prin combinația daemonilor syslogd și klogd (în unele cazuri rsyslogd și syslog-ng). Fișierul principal de tip log poate fi util pentru depistarea și analiza unor servicii care nu au pornit corect.
Fișierul var/log/messages De asemenea, poate fi utilă dterminarea motivului pentru care unele echipamente nu funcționează; kernelul va plasa intrările log în acest fișier dacă poate detecta echipamentul respectiv. Deși fișierul /var/log/messages este considerat fișierul principal de tip log, există și alte fișiere log în directorul /var/log, ce pot fi utile atunci când se dorește depanarea problemelor cu privire la funcționarea serviciilor sistemului de operare. Spre exemplu, daemonul serverului de web Apache (httpd), își administrează fișierele de tip log în fișierul /var/log/httpd/error_log În mod normal, toate fișierele log sunt stocate în directorul /var/log
- Slides: 17