Modificare grub2. Consigli cattivi…

27 June 2010, sezione Linux

Grub è un boot-manager che svolge egregiamente il suo lavoro, purtroppo però fa cose antipatiche tipo far crescere la lista dei kernel fino a creare 10 entry per lo stesso sistema operativo e elencare voci come il memory test che raramente sono utili all’utente medio (neanche io l’ho mai usato).

Prima / Dopo

Invece di perdere tempo a cercare utility o deciso di mettere le mani in pasta ed ecco a voi qualche consiglio (pericoloso) per far ubbidire Grub ai vostri ordini(funziona anche con Burg).

Cambiare l’ordine delle voci nel menu

Il funzionamento di Grub è il seguente: ogni volta che è attuata una modifica al sistema viene richiamato il suo aggiornamento; questo aggiornamento non è altro che una serie di script avviati in successione che cercano i sistemi operativi e i kernel presenti nel sistema e creano una lista di record d’avvio.

Potete trovare questi script nella cartella /etc/grub.d/1

Come potete notare il nome di ogni script è preceduto da un numero che identifica l’ordine di esecuzione. Volete Windows elencato come primo sistema, i Kernel Linux a seguire e nessun memtest? Basta rinominare 10_linux in 20_linux, 30_os-prober in 10-os_prober e cancellare il file 20_memtest86+.

Personalizzazioni avanzate (don’t try this at home)

Se invece vogliamo cambiare il comportamento di Grub allora dovremmo modificare direttamente il codice all’interno dei singoli script. Se l’operazione precedente era sconsigliata questa lo è molto di più, non provateci se non avete una buona conoscenza di script bash. In ogni caso potreste trovare interessante la lettura :)

Impedire la creazione di voci per la modalità recovery

Questa opzione dovrebbe essere selezionabile direttamente dal file di configurazione di grub, ma tanto che ci siamo blocchiamola qui commentando il frammento di codice che la interessa. Aprite il file 10-linux, cercate queste righe e commentatele come vedete sotto, aggiungendo il cancelletto all’inizio di ogni riga:

#  if [ "x${GRUB_DISABLE_LINUX_RECOVERY}" != "xtrue" ]; then
#   linux_entry "${OS}" "${version}" true \
# "single ${GRUB_CMDLINE_LINUX}"
# fi

In questo modo grub ignorerà completamente l’opzione e non creerà le voci.

Mostare solo il Kernel più recente

Lo script 10_linux fa qualcosa del tipo “per ogni kernel trovato crea un elemento della lista“. Noi dobbiamo modificarlo in modo che faccia invece “per il primo kernel trovato crea un elemento della lista“, insomma il gioco è tutto nell’eliminare il “per ogni” iniziale eliminando il ciclo while-do.

codice da non commentare
# while [ “x$list” != “x” ] ; do
codice da non commentare
# done

Se malauguratamente un giorno vi troverete nella situazione di non riuscire ad avviare il vostro unico kernel “basterà” premere E sulla voce, modificare i riferimenti al kernel in modo da scambiare il numero di versione attuale con quello precedente e premere F5 per avviare il vecchio kernel…. arrivati a questo punto dubito che la cosa vi spaventi.

Attuare le modifiche

per attuare le modifiche date da terminale

sudo update-grub

potete installare e usare grub-emu per controllare che tutto sia a posto, dopodiché riavviate incrociate le dita e sperate che il sistema riparta :)

  1. /etc/burg.d se usate burg []

  • OptiumsPrime

    Ma in teoria le vecchie versioni del kernel e difficile che le riutilizzi…. al massimo puoi lasciartene una in piu di quella corrente ma una volta che si accumulano la soulzione migliore e disinstallarle dal gestore di pacchetti perche sono inutili….. XD

  • andrea

    Bel articolo.
    Ma vorrei ribattere una cosa: non è grub che crea 10 voci, è ubuntu che quando aggiorna il kernel aggiunge una nuova riga nella configurazione di grub. ;-)

  • http://www.ginlemonblog.com/chi-sono/ GinLemon

    Si, tecnicamente il processo che aggiunge la nuova riga è update-grub che effettivamente viene invocato da Ubuntu dopo aver scaricato un nuovo kernel.
    Senza dubbio la “colpa” di mantenere 10 versioni del kernel è di Ubuntu, ma gli sviluppatori di Grub avrebbero potuto creare un sistema per rendere più pulita l’interfaccia tipo mostrare solo l’ultimo kernel e rendere opzionale la selezione di uno diverso.

    EDIT: gennaio 2011
    La mia profezia si è avverata :) http://www.ginlemonblog.com/grub2-piccoligrandi-miglioramenti/

  • andrea

    Io uso gentoo e quindi certi aggiornamenti sono a carico dell’utente decide se aggiornare il kernel e quante possibilità inserire in grub.

    Pensavo che se è ubuntu che crea tot voci allora deve essere ubuntu e non grub (intesi tutti come sviluppatori) a dover trovare una soluzione.
    Tutto qui.

    In fondo si tratta solo di modificare o meno un file di testo.