With or without Grub

Lun, 03/04/2017 - 01:15
Ritratto di mcortese

With or without Grub

Inviato da mcortese 0 commenti

Penso che siano tutti d'accordo che Grub non sia, nel panorama dei boot loader per Linux, un esempio di leggerezza o di linearità, con le funzionalità suddivise in centinaia di moduli e la configurazione a tre livelli (prima /etc/default/grub, poi i template in /etc/grub.d/ e infine /boot/grub/grub.cfg).

Ma allora qual è il boot loader più leggero? Lilo? Forse rEFInd? Sbagliato: il più leggero in assoluto è... non aver nessun boot loader.

L'idea è questa: con l'avvento di UEFI che ha sostituito il BIOS, il firmware del PC può eseguire alcuni file contenuti nella partizione EFI, purché abbiano estensione .efi e siano riconosciuti come "EFI application". Grub stesso si installa nella partizione EFI in questo modo, con il nome grubx64.efi.

Ora, non tutti sanno che il kernel può essere compilato con un preambolo, chiamato "EFI stub", che lo fa apparire e comportare proprio come un'applicazione EFI: basta copiarlo nella partizione EFI e aggiungere l'estensione .efi al suo nome ed ecco che il firmware lo può eseguire direttamente, senza l'intermediazione di un boot loader.

Il vantaggio? Il caricamento del kernel passa da circa 5 secondi (il mio Grub è configurato per non aspettare alcun input da parte dell'utente, quindi questo tempo è quello che ci mette per caricare tutti i moduli, la configurazione e lanciare il kernel) a 25 ms! Ecco gli output di systemd-analyze prima e dopo la cura:

Startup finished in 1.827s (firmware) + 5.077s (loader) + 1.033s (kernel)
Startup finished in 2.981s (firmware) + 25ms (loader) + 1.121s (kernel)
(ho omesso i tempi impiegati in userspace).

Certo, bisogna compilarsi il kernel da sé e c'è qualche inconveniente. Ad esempio, togliendo Grub, non c'è nessuno che si preoccupi di passare dei parametri al kernel, perciò bisognerà definirli al momento della compilazione e annegarli staticamente nell'immagine creata. Questo significa che non si possono più passare parametri "volanti", o aggiungere single per avviare in modalità recovery. Per ovviare, si può pensare di mantenere comunque Grub installato, ma di dare al boot diretto la priorità. Qualora servisse la modalità recovery o si dovessero fare esperimenti con i parametri, basterà entrare nel firmware e scegliere l'avvio tramite Grub.