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.
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)