Boot the System: EFI, Boot Loader

()

I Bootloader

Prima di passare ad uno degli argomenti di maggiore interesse, ossia
l’installazione del sistema, è necessario spendere qualche parola sul bootloader.

Il bootloader è un piccolo programma utilizzato, come suggerisce il nome stesso, per il boot del sistema. Spesso si commette l’errore di identificare il bootloader con il programma che lo fornisce: prendendo come esempio il loader più utilizzato, LiLO (Linux LOader), si dice che questo sia il bootloader anche se in realtà non è propriamente così: LiLO (il programma) fornisce il bootloader.

Il funzionamento di un booloader è assai complicato ma lo si può sintetizzare e semplificare in poche fasi:

  •  in un primo momento, il BIOS della macchina carica il bootloader;
  •  questo, in seguito, carica il kernel del sistema o i “boot sectors” di altri sistemi operativi (come Windows) passando ad altri programmi la successiva operazione di boot (COMMAND.COM in Windows).

A questo punto la funzione del boot loader è terminata ed inizia la vera e propria fase di bootstrap del sistema operativo.

Ma dove risiede il bootloader? Molti l’avranno cercato in lungo e in largo per il proprio hard disk senza trovarne la minima traccia, altri ancora se lo saranno chiesti senza però indagare troppo sulla sua locazione. Ebbene, molto spesso il bootloader viene installato su una particolare zona del disco detta MBR (Master Boot Record), corrispondente ai primi 512 byte di un disco, che può essere divisa in due parti (sarebbero in verità tre ma per semplicità non consideriamo l’ultima): la zona del “Program Code”, di 446 byte, e la “Partition Table”, di 64 byte. La prima non è altro che la locazione dove fisicamente viene installato il bootloader, mentre la seconda, come il nome stesso suggerisce, è utilizzata per definire le partizioni presenti sul disco.

Adesso che per sommi capi abbiamo visto il funzionamento di un bootloader, vediamo quali sono i loader più utilizzati sotto Linux.

Primo fra tutti va citato certamente LILO, probabilmente il più diffuso ed affidabile, con il supporto per moltissimi tipi di filesystem. Nelle ultime versioni è stato corretto un bug che impediva a LILO di installarsi in dischi di determinate dimensioni, rendendolo quindi inutilizzabile con i moderni dischi di grande capacità.

Del tutto differente rispetto a LILO è LOADLIN, che permette di “arricchire” un normale boot di un sistema DOS (e quindi anche Windows!) in modo da riuscire ad avviare anche altri sistemi. Il funzionamento di LOADLIN, visto daun punto di vista non tecnico, è semplicissimo: nel file AUTOEXEC.BAT (o CONFIG.SYS) è inserita una chiamata a LOADLIN stesso e, tramite un file come BOOT.SYS che contiene i dati per i sistemi operativi da avviare, è possibile effettuare la scelta del sistema da avviare. Il vantaggio di LOADLIN si fa sentire quando si installa Linux su un disco che già ospita Windows: non è necessario ridefinire o modificare alcun settore di boot, visto che LOADLIN non va a scriverci ma è richiamato dopo che l’MBR è stato letto.

Una menzione a questo punto merita anche GRUB, un loader recente che, in pochissimi Kb, permette operazioni a dir poco stupefacenti. In primo luogo, la schermata di selezione del sistema da avviare non è più a caratteri, ma possiede una gradevole e semplice interfaccia grafica. Inoltre, è dotato di una minima shell che permette di “vedere” le partizioni (ma anche i singoli file!) addirittura prima che il sistema venga avviato! Questa operazione, sebbene non troppo adatta a chi sia alla prime armi, è utilissima per recovery o boot di un kernel non precdentemente specificato al momento della configurazione. Ultimo ma non meno importante, GRUB è distribuito con licenza GPL, a differenza di LILO.

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.

/ 5
Grazie per aver votato!

How useful was this post?

Click on a star to rate it!

Average rating / 5. Vote count:

No votes so far! Be the first to rate this post.

As you found this post useful...

Follow us on social media!

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?