101.5 Boot the System BIOS, EFI, Boot Loader, runlevel
BIOS
Questa e’ una lezione teorica sulla sequenza di BOOT.
Nel caso di un pc con vecchio sistema BIOS a 16 bit, viene innanzitutto eseguito il POST ovvero Power on Self Test, che controlla lo statp delle memorie e il funzionamento di tutto quanto il sistema in generale.
Successivamente carica lo STAGE1 BOOT LOADER e lo carica dal MBR ( sono i primi 512 Byte del disco designato come disco di BOOT)
Sequenzialmente da questi 512 byte viene caricato un codice molto piccolo, molto semplice per andare a caricare lo STAGE 2 BOOT LOADER, il quale carica effettivamente il SISTEMA OPERATIVO vero e proprio.
Il BOOTLOADER puo’ caricare anche insieme al Kernel, un INITRD ovvero initaial RAM DISK ed e’ un file che contiene i moduli Kernel caricabili compilati al di fuori dell’ambiente di KERNEL. Solitamente e’ un file compresso che viene caricato in RAM dal BOOTLOADER, il Kernel vi accede come se fosse un file system montato senza alcun genere di problema.
Su alcuni sistemi tipo Fedora 12 puo’ essere creato con una applicazione chiamata DRACUT. Questa utili crea l’ initrd
Per entare e osservare come strutturato bastera’ digitare : lsinitrd
Un bootloader puo’ caricare un’altro bootloader.
Un esempio classico e’ quando ad esempio abbiamo installato UBUNTU e GRUB e’il bootloader predefinito.
Al POWER ON dopo il POST, il BIOS cerca di caricare lo STAGE 1 BOOTLOADER leggendo dai primi 512 byte del MBR, trova il codice di GRUB e lo carica GRUB mostra un elenco di Sistemi Operativi ( Windows, Linux etc), e qui bisogna fare una precisazione. Se carichiamo WINDOWS viene caricato il Windows BOOT LOADER e quindi abbiamo un BootLoader che carica un altro Boot Loader. Questa Tecnica e’ chiamata anche CHAIN LOADING o caricamento a catena.
EFI / UEFI
Nuova tecnologia introdotta nei computer in commercio, EFI e’ di INTEL ma e’ un progetto abbandonato nel 2005, per riprendere il concetto ma sotto nome di UEFI successivamente. UEFI sta per UNIFED EXTENSIBLE FIRMWARE INTERFACE. A differenza del BIOS e’ tutt’altra cosa e’ infatti un firmware con interfaccia. UEFI puo’ caricare sistemi UEFI e sistemi LEGACY. E’ un firmware complesso che richiede una partizione su un disco per fare il boot, e’ a supporto ai driver con una shell ( la shell UEFI). UEFI puo’ leggere il contenuto delle partizioni vedi fig associata UEFI1.
In UEFI per fare il Boot abbiamo una serie di stringhe di programmazione a differenza di BIOS dove ragionavamo in chiamate in ASSEMBLY.
In Linux abbiamo due distinti bootloader :
LILO e GRUB
LILO sta per LInux LOader
GRUB sta per GNU Grand Unified BootLoader
LILO e GRUB sono due Bootloader per il Sistema BIOS
Sui Sistemi UEFI abbiamo
ELILO (EFI LILO)
GRUB 2.0
GRUB 2.0 e’ ancora in grado di fare il Boot per Sistemi UEFI che per sistemi BIOS.
Una volta che il BootLoader carica il Kernel, eventualmente l’INITRD, e viene completato il caricamento del Kernel,normalmente quet’ultimo avvia il processo:
/sbin/init
Il PID sara’ sempre 1. Lo scopo di questo init.. ? INIT fa pertire tutti i processi, rimane quindi attivo fino allo spegnimento del pc e ha come figli tutti glio altri
processi.
Sui sistemi che fanno uso del tradizionale SystemVinit, il processo sara’ sempre chiamato init ma con i nuovi sistemi con System D /sbin/init e’ un collegamento SIMBOLICO a lib/systemd/systemd. Con sistemi che utilizzano systemd abbiamo le units, nel senso di unita’
Alcuni esempi di units possono essere:
.service
.device
.mount
.automount
.time
.snapshot
.path
Se il sistema, carica il kernel, ma fallisce nell’avviare l’init possiamo provare a ripristinarlo avviando un programma differente all’avvio.
Ad esempio specificando all’avvio come init —->bin.sh
In tale modo avviamo una shell con privilegi di root dalla quale siamo in grado di riparare il sistema.
RUNLEVEL
Letteralmente LIVELLO DI ESECUZIONE, sussistono 6 livelli di runlevel, ognuno dei quali corrisponde a un livello di avvio.
RUNLEVEL 0 corrisponde allo stato di spegnimento,
RUNLEVEL 1 corrisponde a SINGLE USER, quindi si entra con un solo utente,con una shell per il mantenimento, manutenzione.
Nessun Network
RUNLEVEL 2 Multiuser si possono avere utenti diversi, da quello root, non si possiede supporto network, e quindi non si entra in rete.
RUNLEVEL 3 Multiuser, Network Support ma vincolati a una interfaccia testuale e quindi NO GRAFICA (nessuna interfaccia grafica)
RUNLEVEL 4 Attualmente non in uso
RUNLEVEL 5 E’ completo. Si ha la possibilita’ di : Multiuser, Network Support e INTERFACCIA GRAFICA. E’ il RUN LEVEL di default su tutti i sistemi S.O. Desktop
RUNLEVEL 6 Reboot
Il RL predefinito dei SERVER e il RL 3 mentre il RL dei Desktop e Client e’ il RL 5. Il RL 1 e 2 vengono usati quando si deve diagnosticare un problema e la sua risoluzione ( troubleshooting) o ad esempio sistemare qualcosa che non parte.