Guida dell'amministratore di sistema di Linux: Versione 0.6.2 | ||
---|---|---|
Indietro | Capitolo 6. Avvio e spengimento del sistema | Avanti |
Si può avviare Linux sia da un floppy che dall'hard disk. La sezione sull'installazione nella guida Installation and Getting Started ([IGS]) vi spiega come installare Linux in modo da poterlo avviare nel modo che volete.
Al boot di un PC, il BIOS fa vari test per controllare che tutto sia a posto[1], e poi inizia il vero boot: sceglie un disco (tipicamente il primo floppy, se ce n'è uno inserito, oppure il primo hard disk, se nel computer ce ne è installato uno, ma l'ordine può essere cambiato) e ne legge il primo settore, che si chiama boot sector (``settore principale di boot''); per un hard disk si chiama anche master boot record, dato che un hard disk può contenere diverse partizioni, ciascuna con il proprio settore di boot.
Il settore di boot contiene un piccolo programma (abbastanza piccolo da entrare in un singolo settore) la cui responsabilità è di leggere il vero sistema operativo dall'hard disk ed avviarlo. Quando si avvia Linux da un floppy disk, il settore di boot contiene del codice che legge semplicemente le prime centinaia di blocchi (a seconda della reale grandezza del kernel, naturalmente) in un punto predeterminato della memoria. Su un floppy di boot di Linux non c'è un filesystem, ma il kernel è semplicemente immagazzinato in settori consecutivi, dato che questo semplifica il processo di caricamento. È possibile, comunque, fare il boot da floppy con un filesystem, usando LILO, il LInux LOader.
Quando si fa il boot dall'hard disk, il codice nel master boot record esamina la tabella delle partizioni (anch'essa nel master boot record), identifica la partizione attiva (quella che è contrassegnata come avviabile), legge il settore di boot di quella partizione e poi inizializza il codice che vi si trova. Il codice nel settore di boot di quella partizione fa la stessa cosa che il settore di boot di un dischetto: legge il kernel dalla partizione e lo inizializza. I dettagli cambiano, comunque, dato che di solito non è utile avere una partizione separata solo per l'immagine del kernel, quindi il codice nel settore di boot della partizione non può semplicemente leggere il disco in maniera sequenziale, ma deve trovare i settori dove li ha messi il filesystem. Ci sono diversi modi per aggirare il problema, ma il più comune è usare LILO (i dettagli sul suo utilizzo sono irrilevanti per questa discussione: vedere la documentazione di LILO per altre informazioni, è molto accurata).
Quando si fa il boot con LILO, normalmente il computer passa direttamente alla lettura e al caricamento del kernel di default. È anche possibile configurare LILO per poter scegliere il kernel da caricare da un elenco, o anche per caricare sistemi diversi da Linux, ed è possibile scegliere quale kernel o sistema operativo avviare al momento del boot. LILO può essere configurato in modo che, se si tiene premuto alt, shift, o ctrl al momento del boot (quando si carica LILO), chieda quale sistema avviare, con un tempo massimo configurabile dopo il quale avvia il kernel di default.
Con LILO, è anche possibile dare un argomento da linea di comando al kernel dopo il suo nome o quello del sistema operativo.
Sia il boot da floppy che quello da hard disk hanno i loro vantaggi, ma in genere fare il boot da hard disk è più comodo, dato che evita la noia di dover maneggiare i floppy; è anche più veloce, ma configurare il sistema in modo che faccia il boot da disco fisso può essere più problematico, quindi molti prima installano il sistema in modo che faccia il boot dal floppy e poi, quando il sistema è installato e funzionante, installano LILO e cominciano a fare il boot dall'hard disk.
Dopo che il kernel di Linux è stato caricato in memoria, in qualsiasi modo questo accada, ed è stato avviato, succede più o meno questo:
Il kernel di Linux è installato compresso, quindi per prima cosa si decomprime. L'inizio dell'immagine del kernel contiene un programmino che fa proprio questo.
Se avete una scheda super-VGA che viene riconosciuta da Linux e che ha delle modalità di testo speciali (ad esempio 100 colonne per 40 linee), Linux vi chiede quale modalità volete usare. In fase di compilazione del kernel è possibile preimpostare una modalità video, in modo che non vi venga posta questa domanda. La stessa cosa si può anche fare con LILO o rdev.
Dopo ciò, il kernel controlla quale altro hardware è presente (hard disk, floppy, schede di rete, ecc.) e configura alcuni dei dispositivi; mentre lo fa, manda in output dei messaggi su quello che trova. Ad esempio, all'avvio del mio computer vedo una cosa del genere:
LILO boot: Loading linux. Console: colour EGA+ 80x25, 8 virtual consoles Serial driver version 3.94 with no serial options enabled tty00 at 0x03f8 (irq = 4) is a 16450 tty01 at 0x02f8 (irq = 3) is a 16450 lp_init: lp1 exists (0), using polling driver Memory: 7332k/8192k available (300k kernel code, 384k reserved, 176k data) Floppy drive(s): fd0 is 1.44M, fd1 is 1.2M Loopback device init Warning WD8013 board not found at i/o = 280. Math coprocessor using irq13 error reporting. Partition check: hda: hda1 hda2 hda3 VFS: Mounted root (ext filesystem). Linux version 0.99.pl9-1 (root@haven) 05/01/93 14:12:20Il testo esatto è diverso su sistemi diversi e cambia a seconda dell'hardware, della versione di Linux che si sta usando e di come è configurata.
A questo punto il kernel prova a montare il filesystem radice. Il punto in cui lo va a cercare è configurabile al momento della compilazione o in qualsiasi momento usando rdev o LILO. Il tipo di filesystem viene individuato automaticamente. Se per qualche motivo non si riesce a montare il filesystem radice, ad esempio perché non vi siete ricordati di inserire il driver corrispondente nel kernel, si ha un kernel panic e il sistema si blocca (non c'è molto che potrebbe fare, comunque).
Il filesystem radice di solito viene montato in modalità a sola lettura (si può configurare nello stesso modo che per la partizione da montare): ciò rende possibile controllare il filesystem mentre lo si monta; non è una buona idea controllare un filesystem montato in modalità lettura-scrittura.
Dopo ciò, il kernel inizializza il programma init (che si trova in /sbin/init) in background (diventerà sempre il processo numero 1). init ha vari compiti all'avvio; cosa fa di preciso dipende da come è configurato, vedere il Capitolo 7 per altre informazioni. Di sicuro inizializzerà alcuni demoni in background.
init poi passa in modalità multi-utente, ed inizializza una getty per le console virtuali e le linee seriali. getty è il programma che permette agli utenti di collegarsi attraverso le console virtuali ed i terminali seriali. init può anche inizializzare altri programmi, a seconda di come è stato configurato.
A questo punto il boot è completo ed il sistema sta funzionando normalmente.
[1] | Questo processo si chiama power on self test, o POST, cioè ``auto--test di avvio''. |