- GRUB2 consente di scegliere in modo flessibile quale versione del kernel avviare di default, utilizzando gli indici del menu o il nome esatto della voce.
- Vivere con le versioni linux-generic, HWE e edge richiede il controllo di GRUB per evitare instabilità durante l'installazione di kernel più recenti.
- La modifica del file /etc/default/grub e la rigenerazione della configurazione tramite il comando update-grub costituiscono la base per correggere o ripristinare il kernel predefinito.
- Disinstallare i kernel in conflitto e mantenere almeno un ramo stabile garantisce che il sistema rimanga avviabile e sicuro.

Scegliere quale versione del kernel avviare di default in Linux Non si tratta solo di una mania degli amministratori meticolosi: in molti casi, fa la differenza tra avere un sistema stabile e subire crash, incompatibilità con i driver grafici o guasti con hardware recente. Questo è particolarmente vero in Ubuntu e in altre distribuzioni basate su Debian, dove coesistono rami generici, HWE e altre distribuzioni. versioni sperimentaliIl controllo di GRUB2 è pressoché obbligatorio.
Quando si installano più core in parallelo, GRUB2 tenta sempre di avviare il kernel più recente disponibile.Nella maggior parte dei casi va bene, ma se sei stato costretto a tornare a una versione precedente a causa di un bug o di un driver difettoso, dovrai indicare a GRUB quale voce utilizzare come predefinita. In questo articolo, esamineremo in dettaglio e senza giri di parole come farlo in modo sicuro e permanente, quali sfumature dovresti tenere presenti con i nuovi rami HWE e come combinarlo con altri utili trucchi relativi a GRUB2.
Quali versioni del kernel supporta Ubuntu e perché ti interessa cambiarle?
Ubuntu mantiene diverse linee di kernel in paralleloProgettato per diversi scenari. Capire cosa è installato è il primo passo prima di modificare qualsiasi cosa in GRUB2, perché determinerà quali voci vedrai nel menu di avvio e quali vorrai utilizzare come predefinite.
Da una parte c'è il ramo classico linux-genericoQuesto è il kernel che di solito viene preinstallato su server e sistemi in cui la stabilità è fondamentale. Si tratta di kernel a lungo termine, accuratamente testati, che nelle versioni LTS come Ubuntu 22.04 corrispondono in genere a serie come la 5.15.x. La loro filosofia è chiara: meno sorprese, meno malfunzionamenti dopo un aggiornamento.
I computer desktop Ubuntu offrono anche Kernel HWE (Hardware Enablement)Questi rami vengono installati, ad esempio, con comandi come sudo apt install linux-generic-hwe-22.04 e si rivolgono a versioni del kernel più recenti, come la serie 6.5.x nel caso di Ubuntu 22.04 LTS, con l'obiettivo di supportare hardware moderno che non esisteva quando è stata rilasciata la versione LTS originale.
Se hai bisogno di fare un ulteriore passo avanti, c'è anche la variante bordo hwe, progettato come ramo "avanguardia" o bordo sanguinanteSi installa con comandi come sudo apt install linux-generic-hwe-22.04-edge Spesso include kernel ancora più recenti (ad esempio, la versione 6.7.x in Ubuntu 22.04). Offre supporto per hardware molto recente, ma a costo di una maggiore probabilità di incontrare bug, instabilità o comportamenti anomali.
Sebbene il sistema esegua un solo kernel alla volta.Le immagini dei nuclei antichi sono conservate in /boot È come una polizza di assicurazione sulla vita. Se un aggiornamento rende il computer inutilizzabile, poter avviare una versione precedente può essere la soluzione. Il problema è che una volta installato un kernel più recente, Ubuntu tenderà ad avviarsi sempre con quello, e disinstallarlo senza poter avviare un altro kernel può essere davvero complicato.
Seleziona temporaneamente un kernel diverso dal menu di GRUB2
Prima di iniziare a modificare i file, è bene ricordare che GRUB2 consente già di scegliere manualmente un kernel diverso all'avvio.Se hai accesso fisico al computer e a una tastiera collegata, spesso non ti serve altro per provare una versione di anteprima.
In Ubuntu, all'accensione della macchina, È possibile visualizzare il menu di GRUB2 tenendo premuto il tasto Maiusc. durante la fase di avvio iniziale. Nei sistemi BIOS tradizionali funziona bene; in UEFI di solito è sufficiente che GRUB visualizzi il menu predefinito, ma l'idea è la stessa: vedere l'elenco dei sistemi e delle opzioni.
In quel menu di solito vedrai una prima voce del tipo Ubuntu, che è quello che avvia l'ultimo kernel installato, seguito da un sottomenu chiamato Opzioni avanzate per Ubuntu (Opzioni avanzate). In questo sottomenu sono elencate tutte le versioni del kernel disponibili, ciascuna con la propria modalità normale e modalità di ripristino.
Se riscontri problemi con l'ultimo kernel, Di solito la procedura da seguire è andare in "Opzioni avanzate per Ubuntu". e scegli una versione precedente (ad esempio, Ubuntu, with Linux 5.15.0-94-generic) invece dell'ultima versione 6.x. Una volta avviato correttamente con quella versione, è possibile disinstallare i kernel in conflitto e rigenerare la configurazione con sudo update-grub.
Naturalmente, questa soluzione manuale presenta un inconveniente: Funziona solo se puoi interagire con GRUBSu server senza tastiera, macchine remote o ambienti in cui non si visualizza la console di avvio, è necessario un metodo persistente che indichi a GRUB quale input utilizzare sempre, senza doverlo chiedere a ogni avvio.
Elenca tutti i kernel che GRUB2 conosce
Per impostare in modo affidabile un kernel predefinito, Per prima cosa devi sapere quali voci di menu GRUB2 ha effettivamente configuratoNon è sufficiente limitarsi a guardare i pacchetti installati, perché le posizioni nel menu possono cambiare quando vengono aggiunti o rimossi dei kernel.
GRUB2 genera il suo menu principale nel file /boot/grub/grub.cfgSebbene non sia consigliabile modificarlo manualmente (viene sovrascritto quando lo esegui) update-grubSì, puoi leggerlo per estrarre informazioni. Un comando molto pratico per elencare le voci è:
grep -Ei 'submenu|menuentry ' /boot/grub/grub.cfg | sed -re «s/(.? )'(+)'.*/\1 \2/»
Questo comando Restituirà un elenco di tutte le voci e i sottomenu. che appaiono all'avvio, qualcosa di simile a:
menuentry Ubuntu
submenu Advanced options for Ubuntu
menuentry Ubuntu, with Linux 6.7.0-15-generic
menuentry Ubuntu, with Linux 6.7.0-15-generic (recovery mode)
menuentry Ubuntu, with Linux 5.15.0-94-generic
menuentry Ubuntu, with Linux 5.15.0-94-generic (recovery mode)
menuentry Ubuntu, with Linux 5.15.0-92-generic
menuentry Ubuntu, with Linux 5.15.0-92-generic (recovery mode)
menuentry Memory test (memtest86+.elf)
menuentry Memory test (memtest86+.bin, serial console)
menuentry MS-DOS 5.x/6.x/Win3.1 (on /dev/sdf1)
La prima voce è solitamente "Ubuntu" con il kernel più modernoE nel sottomenu "Opzioni avanzate" vengono visualizzate tutte le versioni installate, ordinate dalla più recente alla più vecchia. Nel nostro esempio, se si desidera avviare sempre con Ubuntu, with Linux 5.15.0-94-genericQuella voce si troverebbe nel sottomenu avanzato, non nel menu principale.
Imposta un kernel specifico tramite la posizione nel menu (indici GRUB_DEFAULT)
Una forma classica di specificare quale kernel GRUB2 vuole avviare per impostazione predefinita Consiste nell'indicare l'indice (posizione) della voce, oppure anche una combinazione "sottomenu > voce" quando la versione desiderata si trova in "Opzioni avanzate per Ubuntu".
Il file che controlla questo è / Etc / default / grubPrima di apportare qualsiasi modifica, è altamente consigliabile creare un backup rapido nel caso in cui sia necessario ripristinare facilmente uno stato precedente. È possibile farlo con:
sudo cp /etc/default/grub /etc/default/grub.bak
Successivamente, modificalo con il tuo editor preferito, ad esempio con Nano:
sudo nano / etc / default / grub
All'interno vedrai una linea come questa GRUB_DEFAULT=0, il che indica che verrà utilizzata la prima voce del menu principale (indice zero). Se il kernel desiderato si trova nel sottomenu "Opzioni avanzate".È possibile indicare a GRUB di accedere a quel sottomenu e selezionare una posizione specifica utilizzando la notazione submenú>entrada.
Seguendo l'esempio precedente, se "Opzioni avanzate per Ubuntu" fosse l'opzione 1 nel menu principale e all'interno di quel sottomenu "Ubuntu, con Linux 5.15.0-94-generic" fosse la terza opzione (contando da zero e saltando le modalità di ripristino), si potrebbe scrivere qualcosa del genere:
GRUB_DEFAULT="1>3"
La logica è semplice, ma bisogna prestare attenzione agli indici.Il primo livello si riferisce alla posizione del sottomenu nel menu principale, mentre il secondo alla posizione della voce all'interno di tale sottomenu. Ricorda inoltre che le voci della "modalità di ripristino" sono generalmente sfalsate, quindi le opzioni normali utilizzano numeri dispari e le opzioni di ripristino utilizzano numeri pari.
Una volta che hai cambiato GRUB_DEFAULT, salva il file (in Nano, Ctrl + A poi Ctrl + X) e applica le modifiche rigenerando la configurazione di GRUB con:
sudo update-grub
Dietro questo riavviare il sistema con sudo reboot e, una volta avviato, controlla quale kernel è stato caricato:
uname -a
Il risultato dovrebbe mostrarti, ad esempio, Linux ... 5.15.0-94-generic ... indicando che ora stai utilizzando la versione che hai impostato utilizzando gli indici in GRUB_DEFAULT.
Utilizzare il nome della voce di menu anziché gli indici (modalità "salvata").
Il metodo dell'indice presenta un problema importante: Le posizioni cambiano quando si installa o si disinstalla il kernel.Ciò significa che un aggiornamento del kernel può rendere il tuo 1>3 Smetti di utilizzare il kernel corretto come target, cosa che è esattamente ciò che devi evitare se cerchi stabilità a lungo termine.
GRUB2 offre un'alternativa molto più robusta: Utilizzare il nome esatto della voce di menu come elemento predefinitoIn questo modo, finché quella voce esiste in grub.cfgRimarrà selezionata anche se nella lista vengono aggiunte nuove versioni sopra o sotto di essa.
L'idea generale è questa: prima Troverete il nome completo della voce di menu che desiderate, come appare in /boot/grub/grub.cfg (per esempio Ubuntu, with Linux 6.8.0-60-generic), e quindi si configura GRUB per utilizzarlo come voce salvata predefinito.
Per trovare il nome esatto, puoi aprire il file di configurazione con un editor o un visualizzatore, ad esempio:
sudo nano /boot/grub/grub.cfg
Una volta dentro, In Nano, usa Ctrl+W per cercare la stringa corrispondente alla versione del kernel. che ti interessa (ad esempio, "6.8.0-60-generic"). Sulla falsariga di menuentry Vedrai il titolo completo, qualcosa del tipo:
menuentry 'Ubuntu, with Linux 6.8.0-60-generic' ...
Ora, invece di giocare con gli indici, È possibile indicare a GRUB di utilizzare quel nome come selezione salvata.La procedura tipica prevede l'esecuzione di comandi come i seguenti:
sudo grub-set-default «Ubuntu, con Linux 6.8.0-60-generic»
Questo comando definisce la voce specificata come quella da considerare come "predefinita salvata". Per confermare che sia stata applicata correttamente, è possibile controllare il file di configurazione dell'ambiente GRUB:
sudo grub-editenv list
Dovresti vedere una riga simile a questa:
saved_entry=Ubuntu, with Linux 6.8.0-60-generic
È anche possibile che, a seconda della configurazione precedente, viene utilizzata l'opzione GRUB_DEFAULT=saved en /etc/default/grubche dice a GRUB di usare sempre l'ultimo voce salvata stabilito. In ogni caso, mentre il saved_entry Se corrisponde al kernel desiderato, il sistema avvierà automaticamente quella versione.
Dopo aver applicato queste modifiche, rigenerare il file di configurazione con sudo update-grubRiavvia il sistema e conferma di nuovo con uname -a che hai iniziato con la versione definita come predefinita.
Modificare il kernel di Ubuntu a una versione specifica (installazione e downgrade)
In molti casi non si desidera semplicemente scegliere un kernel preinstallato, ma passa dalla tua versione attuale a una specificaQuesto accade perché la tua applicazione lo richiede, perché un driver supporta solo una determinata serie o perché un recente aggiornamento ha compromesso metà del tuo sistema.
Il primo passo dovrebbe essere sempre Conosci il kernel che stai attualmente eseguendoPer fare ciò puoi utilizzare comandi come:
uname-r
Oh bene:
uname -a
che restituirà qualcosa di simile a questo:
Linux web 6.8.0-85-generic #85~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC ... x86_64 GNU/Linux
Una volta che sai dove ti trovi, il passo successivo è vedere quali kernel sono disponibili nei repositoryNegli ambienti Ubuntu/Debian, questo viene solitamente fatto interrogando i pacchetti linux-image dal repository, filtrando in base alla versione che ti interessa. Una volta individuata la versione specifica, puoi installarla direttamente con apt o compilarla tu stesso (vedi Come cercare le configurazioni in `make menuconfig`), come preferisci.
Ad esempio, se vuoi scendere da 6.8.0-85-generic a 6.8.0-60-genericInstalleresti il pacchetto corrispondente con il comando appropriato, confermando con "S" quando adatto Ti verrà chiesto se desideri continuare con l'installazione. Al termine del processo, A quel punto, quella versione del kernel sarà disponibile per l'avvio.Tuttavia, GRUB continuerà a scegliere la versione più recente finché non modificherai le impostazioni come spiegato.
Dopo aver installato il kernel desiderato, riavviare il computer per poterlo assegnare come predefinito utilizzando uno dei metodi sopra descritti (tramite indice o tramite nome), a seconda di quale sia più comodo e affidabile per il tuo caso.
Imposta un kernel specifico dal sottomenu "Opzioni avanzate" come predefinito
Nelle distribuzioni come Ubuntu 22 e 24, quando viene aggiunta una versione del kernel inferiore a quella corrente, Quella versione non è impostata come voce principale.ma viene aggiunto al sottomenu Opzioni avanzate per UbuntuPertanto, anche se si installa una versione 6.8.0-60 al di sotto di una 6.8.0-85, al riavvio il sistema si avvierà comunque con la versione 85.
Per GRUB2 seleziona automaticamente la versione desiderata dal sottomenuDevi conoscere la sua posizione esatta. Di nuovo, il comando che elenca il menuentry y submenu Ti aiuta a visualizzare la struttura e l'ordine numerico che GRUB utilizzerà.
Immagina che dopo aver eseguito il comando di elenco tu scopra che il tuo kernel di destinazione (ad esempio, "Ubuntu, con Linux 6.8.0-60-generic") appare nella quarta posizione del sottomenu "Opzioni avanzate" e che questo sottomenu è il primo dopo la voce principale. In tal caso, la combinazione di indice, a partire da zero, sarebbe la 1> 2 (sottomenu in posizione 1, voce in posizione 2 all'interno di tale sottomenu).
Nel file /etc/default/grubDovresti quindi modificare la riga:
GRUB_DEFAULT=0
da:
GRUB_DEFAULT="1>2"
Dopo aver salvato le modifiche ed eseguito sudo update-grub, Al successivo avvio, quel kernel specifico verrà selezionato automaticamente. all'interno delle "Opzioni avanzate", senza dover accedere manualmente al sottomenu ogni volta.
Dopo il riavvio è possibile verificare che tutto sia andato bene con uname-r o uname -a, verificando che la versione del kernel attiva sia quella che hai impostato tramite GRUB_DEFAULT.
Disinstallare i kernel HWE e edge e ripristinare il ramo stabile.
Una volta raggiunto avviare il sistema con un kernel stabile dal ramo linux-generic (ad esempio, una serie 5.15.x su Ubuntu 22.04 LTS), il passo logico successivo, se i kernel HWE o edge ti hanno dato problemi, è quello di ripulire il sistema da quei rami.
Per disinstallare i metapackage HWE, puoi usare apt purga con un carattere jolly che copre l'intero ramo, qualcosa del tipo:
sudo apt purge linux-generic-hwe-22.04*
Dopo aver rimosso quei metapackage, probabilmente vorrai Elimina anche le immagini dei kernel moderni che non ti servono più.Se, ad esempio, si desidera eliminare tutti i kernel superiori alla versione 6.x a favore della serie 5.x, è possibile utilizzare un comando come questo:
sudo apt purge linux-image-6*
Questo tipo di pulizia rimuove i pacchetti di immagini del kernel il cui nome inizia con "linux-image-6", quindi è consigliabile rivedere attentamente ciò che si sta per disinstallare prima di confermare. Non dimenticare che È necessario mantenere almeno un ramo stabile e funzionantenormalmente linux-genericoperché senza di esso il sistema potrebbe rimanere senza kernel avviabili.
Dopo qualsiasi pulizia del kernel, è essenziale Aggiorna la configurazione di GRUB per interrompere il riferimento a voci che non esistono più.Altrimenti, potresti imbatterti in opzioni di menu che puntano a kernel eliminati. Per rigenerare il file di configurazione, usa:
sudo update-grub
Se vuoi assicurarti che il ramo generico rimanga installato, puoi forzarne l'installazione con:
sudo apt install linux-generic
Nella maggior parte dei casi ti verrà comunicato che è già installato, ma in questo modo verifichi che il metapackage esiste e che continuerai a ricevere aggiornamenti di sicurezza e correzioni per quella serie stabile.
Come ultimo passo, se avessi cambiato GRUB_DEFAULT a un indice o a un nome specifico per sopravvivere ai problemi con HWE/edge, È possibile ripristinarlo al valore predefinito. (di solito 0) modifica di nuovo /etc/default/grub:
sudo nano / etc / default / grub
E lasciando la riga così:
GRUB_DEFAULT="0"
Quindi salva, esegui sudo update-grub e ricominciare con sudo reboot in modo che il sistema si avvii normalmente con il kernel più recente del ramo linux-generico che hai installato.
In definitiva, controllare quale kernel avviare tramite GRUB2 diventa uno strumento fondamentale per qualsiasi utente di Ubuntu, Debian o derivata che non voglia essere alla mercé dell'ultimo aggiornamento. Combinando l'installazione di versioni specifiche, l'utilizzo delle "Opzioni avanzate", la selezione per indice o per nome del menu e la pulizia dei rami problematiciÈ possibile adattare il nucleo del sistema alle proprie esigenze reali: stabilità assoluta sui server, massima compatibilità con le apparecchiature moderne o un mix ponderato di entrambe negli ambienti desktop, dove non si desidera rischiare di compromettere l'utilizzo quotidiano con un kernel sperimentale.
Scrittore appassionato del mondo dei byte e della tecnologia in generale. Adoro condividere le mie conoscenze attraverso la scrittura, ed è quello che farò in questo blog, mostrarti tutte le cose più interessanti su gadget, software, hardware, tendenze tecnologiche e altro ancora. Il mio obiettivo è aiutarti a navigare nel mondo digitale in modo semplice e divertente.




