Articolo originale: https://www.freecodecamp.org/news/the-linux-booting-process-6-steps-described-in-detail/

Un sistema operativo (OS) è un software di basso livello che gestisce le risorse, controlla le periferiche e fornisce servizi di base ad altri software. In Linux il processo di avvio si divide in 6 fasi distinte.

1. BIOS

BIOS è l'acronimo di Basic Input/Output System. In altre parole, il BIOS carica ed esegue il boot loader presente nel Master Boot Record (MBR).

Quando si accende il computer per la prima volta, il BIOS esegue innanzitutto alcuni controlli di integrità dell'unità disco o dell'unità SSD.

Successivamente, il BIOS cerca, carica ed esegue il programma di boot loader, che si trova nel Master Boot Record (MBR). L'MBR si trova talvolta su una chiavetta USB o su un CD-ROM, come nel caso di un'installazione live di Linux.

Una volta individuato il programma di boot loader, questo viene caricato in memoria e il BIOS gli affida il controllo del sistema.  

2. MBR

MBR è l'acronimo di Master Boot Record ed è responsabile del caricamento e dell'esecuzione del boot loader GRUB.

L'MBR si trova nel primo settore del disco di avvio, che di solito è /dev/hda o /dev/sda, variabile a seconda dell'hardware. L'MBR contiene anche informazioni su GRUB, o LILO in sistemi molto vecchi.

3. GRUB

GNU GRUB, abbreviazione di GNU GRand Unified Bootloader, è il boot loader più diffuso nella maggior parte dei sistemi Linux moderni.

La schermata iniziale di GRUB è spesso la prima cosa che si vede quando si avvia il computer. Include un semplice menu in cui è possibile selezionare alcune opzioni. Se sono presenti più immagini del kernel, è possibile utilizzare la tastiera per selezionare quella con cui si desidera avviare il sistema. Per impostazione predefinita, viene selezionata l'immagine del kernel più recente.

Il sistema da all'utente alcuni secondi per effettuare una scelta. Se la scelta non viene effettuata, verrà caricata l'immagine del kernel predefinita.

Generalmente la posizione del file di configurazione di GRUB si trova /boot/grub/grub.conf o /etc/grub.conf. Di seguito un esempio di contenuto di un file grub.conf:

#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.18-194.el5PAE)
      root (hd0,0)
      kernel /boot/vmlinuz-2.6.18-194.el5PAE ro root=LABEL=/
      initrd /boot/initrd-2.6.18-194.el5PAE.img

4. Kernel

Il kernel è letteralmente il nucleo di un sistema operativo e quindi l'interfaccia tra software e hardware. È il componente centrale di un sistema operativo: permanentemente necessario e costantemente in uso.

In questa fase del processo di avvio, il kernel selezionato da GRUB si collega innanzitutto con il file system di root specificato nel file grub.conf. Quindi esegue il programma /sbin/init, che è sempre il primo programma a essere eseguito. Infatti il suo id di processo (PID) è sempre 1. Il kernel stabilisce quindi il file system di root, che è stato specificato nel file grub.conf.

Il kernel crea quindi un file system root temporaneo utilizzando Initial RAM Disk (initrd) fino a quando non viene montato il file system reale.

5. Init

In questa fase, il sistema esegue una sequenza di azioni in base a livello di esecuzione (Runlevel). I livelli di esecuzione di Linux sono definiti in un file di init, che di solito si trova in /etc/inittab.
I sistemi Linux moderni utilizzano invece systemd per scegliere il livello di esecuzione. Fonte TecMint, questi sono i livelli di esecuzione disponibili:

Run level 0 Questo runlevel avvia la sequenza di arresto del sistema o shutdown (poweroff.target).

Run level 1 Questo runlevel rappresenta la modalità singolo utente, nessun altro utente può collegarsi, il servizio di rete è disabilitato (rescue.target).

Run level 3  In genere è quello predefinito quando si opera in modalità testuale, tutti i servizi sono attivi (multi-user.target).

Run level 5  È il runlevel predefinito quando si vuole avviare Linux in modalità grafica (graphical.target).

Run level 6 Il runlevel 6 è quello di reboot (reboot.target).

Emergency È il runlevel di emergenza (emergency.target).

systemd si occuperà di eseguire programmi e/o servizi in base al loro runlevel.    

6. Runlevel

A seconda della distribuzione Linux installata, è possibile che vengano avviati diversi servizi a seconda del livello di esecuzione (Runlevel). Ad esempio, si potrebbe notare starting sendmail …. OK.

Ognuno dei 6 livelli di esecuzione sopra descritti ha una propria directory e ogni directory contiene un insieme di programmi e/o servizi che devono essere eseguiti, le directory sono:

  • Run level 0 – /etc/rc0.d/
  • Run level 1 – /etc/rc1.d/
  • Run level 2  – /etc/rc2.d/
  • Run level 3  – /etc/rc3.d/
  • Run level 4 – /etc/rc4.d/
  • Run level 5 – /etc/rc5.d/
  • Run level 6 – /etc/rc6.d/

Attenzione, la posizione esatta di queste directory varia da distribuzione a distribuzione.

Se si guarda alle diverse directory di livello di esecuzione, si troveranno programmi che iniziano con una "S" o una "K", rispettivamente per startup e kill. I programmi di avvio vengono eseguiti durante l'avvio del sistema, mentre i programmi di disattivazione vengono eseguiti durante lo spegnimento.

Questo è tutto quello che c'è da sapere sul processo di avvio di Linux. Ora provate Linux e rendete Tux orgoglioso.