Il boot di Linux



Quanto segue si riferisce alla piattaforma x86 e alla distribuzione Redhat/fedora.

Lo scopo del processo di boot è caricare il sistema operativo da un supporto di massa come l'hard disk. Il programma che carica il sistema operativo prende il nome di Boot Loader e si trova nell'hard disk. Il boot loader
effettua questa operazione in due parti che corrispondono a due programmi distinti: first stage boot loader e second stage bootloader.
Il processo boot viene avviato dal BIOS che cerca nel Master Boot Sector (MBR), il first stage del Boot Loader. Il compito del first stage del boot loader è caricare il second stage del boot loader che si trova nella partizione di boot

Se è presente un solo sistema operativo, il second stage boot loader ne carica in memoria il kernel altrimenti visualizza un menu che permette all'utente di scegliere quale kernel  caricare in memoria.

Il kernel,che si trova nella directory /boot col nome vmlinuz-<kernel-version>, carica i moduli richiesti, i drivers e fa il mount della partizione root (/)

Il boot loader generalmente usato nelle distribuzioni Linux è GRUB.

 

Inizializzazione del sistema

Il kernel trasferisce il controllo al processo /sbin/init, che carica tutti i servizi e monta le partizioni elencate in /etc/fstab.

Vediamo in che modo /sbin/init carica i servizi richiesti. 

Diversamente da Windows, il sistema Linux può essere avviato in diversi modi operativi a seconda dell'utilizzo che se ne intende fare. Per esempio se dobbiamo utilizzarlo come server è opportuno impostarlo in modalità testo per non sovraccaricare il sistema con un server grafico come X-Window; oppure, quando si devono effettuare operazioni di diagnostica hardware per es. su HD  è conveniente andare ad una modalità di tipo single user. 

Questi modi operativi si chiamano Run Levels (RL)

Linux prevede  i seguenti RL, numerati da 0 a 6  

 

I RL utilizzati di solito sono il 3 (per i server) o il 5 (per le workstations). I RL  2 e 4 non vengono usati, ma possono essere implementati dall'utente in base alle sue esigenze. I RL 0 e 1 corrispondono all'arresto del sistema e al riavvio. 

Il RL di default è dichiarato nello script /etc/inittab alla riga:

id:5:initdefault:

Gli script che avviano/arrestano i servizi si trovano nella directory /etc/rc.d/init.d/ . Per stabilire la corrispondenza fra servizi da arrestare/avviare e RL sono presenti le directory  etc/rc.d/rc<n>d/  dove n è il numero di RL. Ognuna di esse contiene dei link simbolici agli script dei servizi (che vi ricordo si trovano in  /etc/rc.d/init.d/).  La prima lettera del nome del  link indica a /sbin/init se il servizio in quel particolare RL va avviato o arrestato, K va arrestato e S va avviato,  mentre il numero indica  con quale ordine rispetto agli altri. 
Per es. in /etc/rc.d/rc5.d/  i files   

K12mysqld 

K15httpd 

S55sshd 

S56xinetd 

informano /sbin/init che nel RL 5 deve arrestare i server mysql, web e avviare i server ssh, xinet. I numeri dopo la prima lettera gli indicano che  prima deve arrestare mysqld, httpd e poi deve avviare sshd,xinetd

Lo script /etc/inittab esegue il programma /sbin/mingetty  che istalla una o più console virtuali in base al RL. I RL da 2 a 5  hanno 6 console virtuali,  il RL 1 ne ha una sola e i RL 0 e 6 non ne hanno nessuna. 

In RL 5   the /etc/inittab esegue lo script called /etc/X11/prefdm. il display manager scelto per X-server (gdm per GNOME kdm per KDE)