dal 2015 - visita n. 635
Seminario.08
Seminario.08

 

Le fasi di boot in Linux


Il processo di boot di una macchina Linux (su sistemi x86 Intel compatibili) comporta diverse fasi, la loro conoscenza ed interpretazione diventa fondamentale quando occorre risolvere malfunzionamenti durante l'avvio.

Questo processo, su un sistema Linux con processore x386, prevede i seguenti stadi (con altre CPU ci possono essere alcune differenze nelle fasi iniziali):

  1. Ricerca del device da utilizzare per effettuare il boot da parte del BIOS in base ad una tabella preordinata .
  2. Dal boot sector del device di boot parte il codice (o il salto di riferimento su dove trovarlo) del loader che esegue il bootstrap del sistema operativo. Nel caso di Linux i due più diffusi loader sono LILO ed il più evoluto GRUB.
  3. Il loader lancia il caricamento del kernel di Linux, che copiandosi in memoria esegue i controlli ed il riconoscimento dell'hardware presente.
  4. A fine caricamento il kernel esegue il processo init, padre di tutti i processi, che gestisce il caricamento di tutti gli altri programmi da eseguire per completare il boot.

La figura seguente mostra uno schema un po' più dettagliato della situazione che verrà illustrata subito dopo:



Accensione

All'accensione, il controllo passa al codice presente nella ROM detto BIOS (Basic Input/Output System) che si occupa dell'inizializzazione della macchina. Come è noto ogni sistema Intel ha sulla motherboard questo chip di memoria con cui gestire l'hardware del sistema perchè all'avvio di un computer non c'è nulla di definito in RAM e nessun programma predefinito da caricare. Il BIOS controlla non solo la prima fase del processo di avvio, ma fornisce l'interfaccia di livello inferiore alle periferiche. Per questo motivo è scritto in una memoria permanente in sola lettura e può sempre essere utilizzato.


POST

Durante la fase di POST (Power On Self Test) vengono fatti i controlli di base ed individuato l'hardware di cui dispone il computer. Immediatamente dopo viene scelto, fra le impostazioni definibili dall'utente (secondo una sequenza di priorità modificabile), il dispositivo da usare per il boot. Nei BIOS più recenti è possibile effettuare il boot da: floppy, cdrom, hard disk, Zip, chiavette USB, schede di rete.


MBR

Spesso il primo disco fisso impostato per l'avvio è il disco C o il dispositivo IDE master del bus IDE primario. Gli hard disk, in particolare, hanno un settore di boot per ogni partizione ed inoltre un MBR (Master Boot Record) che è il primo settore di boot dell'intero hard disk. L'MBR ha dimensioni pari a soli 512 byte e contiene le istruzioni in codice macchina per l'avvio del computer oltre alla tabella delle partizioni. Quando si esegue il boot da un hard disk, è il codice contenuto nell'MBR che viene mandato in esecuzione. Contiene le informazioni per avviare il programma di boot secondario (second stage boot loader).
Nei casi più semplici MBR si limita a passare il controllo al codice presente nella cosiddetta partizione attiva (caso di MS-DOS).
Normalmente, però, i boot loader permettono un maggior controllo e la scelta di differenti sistemi operativi.




BootLoader

Esistono diversi loader che eseguono il bootstrap del sistema operativo per Linux, LILO e GRUB sono i più utilizzati con le distribuzioni GNU/Linux x86, ma ne esistono tanti altri: GAG, xosl, LoadLin, SysLinux, BootLin.
Tutti di fatto eseguono la stessa funzione, alcuni (LoadLin e SysLinux) sono programmi DOS che eseguono il kernel caricandolo da una partizione DOS, altri sono adattamenti di LILO che riguardano sistemi non basati su processori Intel.
LILO e GRUB sono caratterizzati dall'avere una piccola porzione del codice macchina binario dell'MBR, il cui unico obiettivo è quello di rilevare il boot loader secondario e caricarlo in memoria.



Quando il boot loader secondario (GRUB o LILO) è in memoria, viene visualizzata la schermata iniziale di Linux che mostra i diversi sistemi operativi o i kernel che sono stati configurati per l'avvio. Su questa schermata l'utente può usare i tasti direzionali per scegliere quale sistema operativo o kernel avviare e premere Invio per confermare. Se non viene premuto nessun tasto il boot loader carica la selezione di default dopo un periodo di tempo configurabile.

Nel caso in cui sia stato selezionato Linux, quando il boot loader di seconda fase ha determinato quale kernel avviare, rileva il kernel binario corrispondente nella directory /boot/. Il kernel binario è individuato da un nome che ha il formato che segue:
/boot/vmlinuz-<versione-kernel> per esempio: vmlinuz-2.6.0-xx

Oltre al kernel, viene caricata in memoria anche l'immagine RAM disk iniziale. Tale immagine si chiama initrd ed e' utilizzata dal kernel per caricare in memoria tutti i driver non compilati all'interno del kernel stesso che sono necessari per avviare il sistema.

initrd è un file system speciale che viene montato allo scopo di avviare un sistema minimo, con cui eseguire alcune operazioni preliminari. Al termine di queste operazioni, normalmente il sistema contenuto nel disco RAM iniziale monta il file system standard e passa il controllo al programma init.
La tecnica del disco RAM iniziale viene usata solitamente per caricare dei moduli prima di montare il file system definitivo, per esempio quando il kernel richiede un modulo speciale per accedere a tale file system.
Si può vedere il disco RAM iniziale, come un file system contenente fondamentalmente un programma init, che convenzionalmente corrisponde a /linuxrc. La difficoltà sta nel ridurre al minimo il sistema di questo disco RAM; eventualmente il file /linuxrc potrebbe essere un programma realizzato appositamente, senza bisogno di altro.
Una volta che il programma o lo script /linuxrc ha compiuto il suo lavoro, questo deve innestare il file system che deve in seguito diventare quello principale, in una directory, quindi deve eseguire la funzione pivot_root() per scambiare i ruoli. Vedi l'immagine seguente.




Una volta caricati in memoria RAM il kernel e l'immagine RAM disk initrd, il controllo della macchina passa al kernel.








Le fasi di boot
Avvio del Kernel
Applicativi (parte 2)
Comandi Base (parte 7)


Il record di boot
Linux/Windows
Guida a Grub
Linux Howto - 1


Cap08.pdf
Lucidi 08 PDF



E' difficile ritenere quello che hai imparato, senza l'esercizio.
Plinio

Valid CSS!
pagina generata in 0.001 secondi