- GRUB spesso si interrompe dopo modifiche alle partizioni, installazioni di altri sistemi o aggiornamenti, ma è quasi sempre recuperabile.
- La console GRUB stessa consente di individuare /boot/grub, caricare manualmente il kernel ed eseguire l'avvio senza dover ricorrere a un LiveCD.
- Una volta avviato il sistema, è essenziale reinstallare e aggiornare GRUB da Linux per evitare che l'errore si ripeta.
- Nei casi più gravi, i metodi che utilizzano LiveUSB, chroot e strumenti come Boot-Repair offrono una riparazione più approfondita.
Se vi è mai capitato di accendere il computer e, invece di vedere il logo del sistema operativo, di trovarvi di fronte a una schermata nera con un messaggio come "errore: dispositivo non trovato" o "grub rescue ", saprete esattamente quanto panico si prova. All'improvviso, sembra di aver perso l'intero sistema, di doverlo formattare e che i propri dati siano a rischio... ma la realtà è che, nella maggior parte dei casi, il problema può essere risolto senza ricorrere a misure così drastiche.
La buona notizia è che, sebbene sembri un problema serio, riparare GRUB senza un LiveCD è assolutamente possibile utilizzando la console GRUB stessa, a patto che il danno al disco non sia catastrofico. Con un po' di pazienza, alcuni comandi digitati correttamente e una comprensione di ciò che accade dietro le quinte, è possibile riavviare il sistema Linux, reinstallare il boot manager e prepararlo per i futuri riavvii.

Prima di iniziare a digitare freneticamente, è importante capire il ruolo che GRUB svolge nell'avvio del computer. GRUB 2 è il boot manager utilizzato dalla maggior parte delle moderne distribuzioni GNU/Linux: di solito è installato nell'MBR o nella parte superiore della partizione ed è responsabile della visualizzazione del menu con i sistemi operativi disponibili e del caricamento del kernel Linux con i parametri appropriati.
Questo gestore di avvio si basa su file che in genere risiedono nella directory /boot/grub della tua installazione: moduli, file di configurazione, immagini del kernel, initrd, ecc. Se questa directory diventa inaccessibile, viene spostata, danneggiata o cambia disco senza che GRUB se ne accorga, inizierai a vedere errori come "dispositivo non trovato", "filesystem sconosciuto" o il temuto prompt grub rescue>.
Le cause tipiche del malfunzionamento del gestore sono piuttosto note: l'installazione di Windows dopo Linux e la sovrascrittura dell'MBR , la manipolazione delle partizioni (ridimensionamento, spostamento, eliminazione, creazione di nuove) con strumenti come GParted o simili, o persino un aggiornamento del kernel o del sistema che, per qualche motivo, lascia riferimenti incoerenti nella configurazione di GRUB.
Oltre a tutto ciò, alcuni utenti preferiscono installare /boot su una partizione separata , una pratica comune nelle configurazioni avanzate o negli ambienti in cui il resto del disco deve essere crittografato. In questi casi, qualsiasi modifica a tale partizione o al suo numero di disco può impedire a GRUB di individuare i propri moduli e la propria configurazione.
Tipi di errore GRUB e modalità console
Quando GRUB si blocca, di solito non scompare: in genere lascia una sorta di console o menu di ripristino che è possibile utilizzare per avviare manualmente il sistema. Il comportamento varia leggermente a seconda della gravità del problema e della versione di GRUB installata.
In molte distribuzioni vedrai che il sistema tenta di caricare GRUB e finisce per bloccarsi. un prompt con il testo grub rescue>Questa modalità è piuttosto limitata, ma consente di lanciare alcuni comandi chiave come ls, set o insmod, sufficiente per individuare la partizione corretta e forzare il caricamento del modulo Linux.
In altri casi, visualizzerai il normale menu GRUB (l'elenco dei sistemi operativi), ma il tentativo di avvio fallirà oppure il menu apparirà danneggiato. Da lì, puoi premere il tasto 'c' per accedere alla riga di comando completa di GRUB, che è molto più potente della modalità di ripristino, con una gamma più ampia di comandi disponibili.
Nelle installazioni più vecchie, alcuni sistemi utilizzano ancora GRUB Legacy (non GRUB 2), come ad esempio alcune versioni di CentOS 5/6 o altre distribuzioni meno recenti. In questi casi, la sintassi del comando cambia leggermente, ma l'idea generale rimane la stessa: individuare la directory /boot, indicare a GRUB dove si trova la sua directory radice e caricare manualmente il kernel e l'initrd.
Come riparare GRUB senza un LiveCD utilizzando la modalità di ripristino
Quando il computer non riesce a trovare il boot manager configurato correttamente, è piuttosto comune visualizzare un messaggio come "Errore: nessun dispositivo di questo tipo" seguito da "grub rescue>" . Ciò significa che GRUB è riuscito ad avviarsi, ma non sa dove si trovano i suoi file di configurazione o i moduli di cui ha bisogno.
In questo scenario, si dispone di un mini interprete di comandi che consente di individuare le partizioni, localizzare /boot/grub e caricare il kernel manualmente . Il processo può sembrare lungo, ma è piuttosto sistematico.
Elenca i dischi e le partizioni disponibili
Il primo passo è scoprire quali dischi e partizioni GRUB sta rilevando sulla tua macchina. Per fare ciò, al prompt grub rescue> , digita:
ls
Il comando visualizzerà qualcosa di simile a (hd0) (hd0,1) (hd0,2) (hd0,3) (hd1) (hd1,1) (hd1,2). ogni hdX rappresenta un disco rigido diverso: hd0 sarebbe il primo disco fisico, hd1 il secondoe così via. Le varianti con una virgola, come (hd0,1), indicano le partizioni numerate di quel disco.
A seconda del computer, potresti vedere un singolo disco come (hd0) con due o tre partizioni, oppure diversi dischi: (hd0,1) (hd1,1) (hd1,5) (hd2,1) (hd3,1) . In ogni caso, l'obiettivo ora è semplice: apri ogni partizione finché non trovi quella che contiene la directory /boot/grub.
Individuare la partizione utilizzando /boot/grub
Per ispezionare il contenuto di una partizione, utilizziamo di nuovo ls ma aggiungendo il nome della partizione e una barra finale. Ad esempio: ispezionare il contenuto Ti aiuterà a capire se è quello giusto.
ls (hd0,1)/
Se quella partizione ha un file system riconosciuto da GRUB, verrà visualizzato un elenco di directory: vedrai nomi come bin, home, boot, root , ecc. In tal caso, quella partizione potrebbe essere la tua directory root (/) o una partizione separata da /boot, a seconda della struttura che avevi quando hai installato il sistema. Se l'elenco indica un file system riconosciuto da GRUB , sei sulla strada giusta.
Se, eseguendo il comando precedente, visualizzi una directory chiamata boot , puoi approfondire e verificare se contiene la cartella grub:
ls (hd0,1)/boot/grub
Quando trovi un elenco di file che include moduli come linux.mod o altri file tipici di GRUB, hai individuato la partizione che stai cercando . Se non compare nulla o ricevi un errore, continua a provare le altre partizioni: ls (hd0,2)/ , ls (hd1,1)/ , ecc., finché non trovi quella giusta.
Indica a GRUB dove si trovano i tuoi file.
Una volta identificata la partizione corretta, è necessario indicare a GRUB dove si trovano i suoi moduli e la sua configurazione . Supponiamo di aver scoperto che /boot si trova su (hd0,1). Il passo successivo è impostare il prefisso:
set prefix=(hd0,1)/boot/grub
Con questa istruzione, il gestore di sistema saprà che i suoi file di supporto si trovano in quel percorso. Dobbiamo anche indicargli quale partizione di root utilizzare per trovare il kernel e il resto dei dati di sistema:
set root=(hd0,1)
È importante scrivere la coppia correttamente. (disco, partizione) e usa sempre la barra finale / quando elenchiamo i contenuti con lsTieni presente che il layout della tastiera della console GRUB è solitamente americano, quindi le parentesi e le barre potrebbero non corrispondere a quanto riportato sulla tastiera. È buona norma assicurarsi imposta il prefisso correttamente prima di tentare di caricare i moduli.
Caricare i moduli GRUB e il kernel Linux
Una volta configurato il prefisso, il passo successivo è forzare il caricamento del modulo Linux di GRUB . In molte guide troverete qualcosa del genere:
insmod (hd0,1)/boot/grub/linux.mod
In molti sistemi moderni, il modulo appropriato può essere normale.mod o altri, ma l'idea è la stessa: se non sei sicuro dei nomi esatti, usa il comando ls (hd0,1)/boot/grub Per elencare i file, scegli il modulo appropriato in base alla tua versione di GRUB. La funzione di insmod Ciò comporta il caricamento del modulo necessario per continuare il processo di avvio. Si prega di notare che insmod È l'istruzione che effettivamente incorpora il modulo nel caricatore.
Successivamente dovrai caricare l'immagine del kernel Linux indicando il suo percorso all'interno del file system. Esempio di avvio: linux /boot/vmlinuz-4.13.3-generic root=/dev/sda1
Il nome esatto del kernel varierà sulla tua macchina (potrebbe essere vmlinuz-2.6.32-23-generico, vmlinuz-6.1.0-10-amd64 o qualsiasi altra versione). Puoi usare, ancora, ls /boot Per vedere quali immagini hai a disposizione e scegliere la più recente. L'importante è non dimenticare il parametro. radice=/dev/sdXn con la partizione root corretta.
Per evitare confusione riguardo all'equivalenza tra le convenzioni di denominazione di GRUB e Linux, tenete presente che hd0 corrisponde a /dev/sda, hd1 a /dev/sdb, hd2 a /dev/sdc e così via. Anche il formato del numero di partizione cambia: (hd0,1) diventa /dev/sda1, (hd1,2) diventa /dev/sdb2, ecc.
In alcuni casi, dopo aver caricato l'immagine del kernel, è consigliabile caricare l'immagine initrd (il disco RAM iniziale) se la distribuzione lo richiede. Il comando tipico sarebbe:
initrd /initrd.img
Come con il kernel, puoi controllare quali file initrd sono disponibili con ls / o ls /boot e usa il tasto tab per completare automaticamente i nomi ed evitare errori di ortografia.
Avviare il sistema e reinstallare GRUB da Linux
Con il kernel e un initrd caricati, basta dire a GRUB di avviare il processo di avvio . Per farlo, è sufficiente digitare:
Arrancar: boot
Se tutto va bene, il kernel prenderà il controllo, il sistema operativo si avvierà normalmente e potrai accedere al tuo sistema Linux. A questo punto, sarai riuscito a risolvere la situazione senza bisogno di un LiveCD, ma c'è ancora un passaggio importante: reinstallare GRUB per evitare che si blocchi di nuovo al prossimo riavvio.
Una volta all'interno del sistema, aprire un terminale con privilegi di superutente (root o utilizzando sudo) ed esegui: grub-install /dev/sdX
dove /dev/sdX è il disco (non la partizione) in cui si desidera posizionare il boot manager, ad esempio /dev/sda o /dev/sdb se ci si trova su un disco diverso. Ricorda che non devi specificare il numero della partizione qui: il comando scrive il boot manager nell'MBR o nell'area di avvio dell'intero disco.
In molte distribuzioni basate su Debian o Ubuntu, è inoltre altamente raccomandato rigenerare il file di configurazione di GRUB per garantire che rilevi correttamente tutti i sistemi installati. È possibile farlo utilizzando:
Correre: update-grub o update-grub2
E, se desideri anche aggiornare l'immagine di avvio iniziale, aggiorna initramfs con:
comando: update-initramfs -u
In altri casi, il problema con GRUB non è così grave e il menu di avvio viene visualizzato , ma alcuni sistemi non si avviano, compare un errore quando si seleziona una voce specifica, oppure si sospetta semplicemente che il menu sia configurato in modo errato.
In questi casi, quando visualizzi il menu GRUB all'avvio del computer, puoi premere le frecce direzionali (su o giù) per interrompere il conto alla rovescia automatico dell'avvio e quindi premere il tasto c per accedere alla riga di comando completa.
Da quella console avanzata, il I comandi sono fondamentalmente gli stessi rispetto alla modalità di ripristino, ma avrai più strumenti per ispezionare il sistema. Ad esempio, puoi usare ls per elencare dischi e partizioni, set per visualizzare e modificare le variabili di ambiente GRUB, insmod per caricare moduli aggiuntivi o anche comandi come cat per leggere il contenuto dei file di testo.
Seguendo lo stesso schema, per prima cosa determinerai quali dischi e partizioni hai con:
ls
e vedrai un output del tipo (hd0) (hd0,msdos1) (hd0,msdos5) o (hd0,1) (hd1,1) (hd1,5) (hd2,1) , a seconda che la tua tabella delle partizioni sia MBR (msdos) o GPT e del numero di dischi presenti nel computer.
Quindi controllerai ogni partizione con comandi come:
ls (hd0,msdos1)/
fino a quando non trovi la directory di avvio e al suo interno la cartella grub . Una volta identificata, ripeterai il processo di impostazione del prefisso e della directory root con:
set prefix=(hd0,msdos1)/boot/grub
set root=(hd0,msdos1)
Da lì, cercherai i kernel disponibili elencando il contenuto di /boot:
/elenco di avvio: ls /boot
e ne sceglierai uno da caricare con:
linux /boot/vmlinuz-6.1.0-10-amd64 root=/dev/sda1
Adatta la versione del kernel e la partizione root al tuo caso specifico. Ricorda le mappature dei dischi: hd0 → /dev/sda, hd1 → /dev/sdb, hd2 → /dev/sdc , ecc. Puoi usare il tasto TAB per il completamento automatico di percorsi e nomi di file.
Infine, se necessario, caricherai l'initrd ed eseguirai il comando stivale Per avviare il sistema. Una volta effettuato l'accesso, l'operazione da eseguire è la stessa dello scenario precedente: Reinstallare GRUB sul disco e aggiornarne la configurazione utilizzando grub-install /dev/sda y update-grub.
Riparazione di GRUB su sistemi con GRUB Legacy
Sebbene la maggior parte delle distribuzioni abbia ormai adottato GRUB 2, è ancora possibile trovare macchine più vecchie o sistemi specifici che utilizzano GRUB Legacy . L'interfaccia in questi casi è leggermente diversa, ma il concetto di base rimane lo stesso: è possibile utilizzare una shell di bootloader interattiva per riavviare il sistema.
All'avvio, questo classico GRUB di solito consente accedi alla tua riga di comando premendo un tasto specifico (spesso il tasto c o la chiave e (per modificare le voci). Una volta al prompt, hai comandi come find che sono particolarmente utili.
Ad esempio, se si desidera individuare la directory /boot che contiene le immagini del kernel e gli initrd, è possibile utilizzare:
comando find: find /boot/grub/stage1 o un percorso simile
A seconda che /boot è una partizione separata o è all'interno della radice, il percorso sarà /boot o semplicemente / con altre sottocartelle. Quando trovi la partizione corretta, GRUB Legacy di solito visualizza qualcosa del tipo (HD0,0) o un'altra coppia disco/partizione che puoi riutilizzare.
Successivamente, dovrai definire la directory root di GRUB con un comando simile a questo:
Esempio di radice: root (hd0,0)
e indicagli dove si trovano il kernel e l'initrd. Anche in questo caso, di solito non è necessario digitare i nomi dei file per intero, poiché il tasto TAB completa automaticamente il percorso e ti aiuta a evitare errori di battitura nei percorsi lunghi.
Per una messa a punto ancora più precisa, puoi usare il comando cat per leggere il file di configurazione di GRUB (ad esempio, /boot/grub/menu.lste controllare quale dispositivo è montato sulla directory radice, quali parametri del kernel vengono passati, ecc. È un modo molto pratico per Copiare la stessa configurazione utilizzata dal sistema quando funzionava correttamente..
Infine, quando hai le linee radice, Kernel e inizia Per gli elenchi, esegui semplicemente il comando boot per avviare il sistema. Una volta dentro, il passaggio finale sarà reinstallare GRUB dall'interno di Linux stesso con grub-install sul disco corrispondente, assicurandoti di non dover ripetere il processo manuale ai successivi riavvii.
Altri metodi comuni (utilizzando LiveCD, chroot e Boot-Repair)
Finora abbiamo visto come risolvere la situazione utilizzando solo la console GRUB , senza ricorrere ad alcun mezzo esterno. Tuttavia, è utile conoscere anche i metodi classici con LiveCD/LiveUSB e strumenti grafici, perché in alcuni casi il danno è talmente esteso che l'avvio da un sistema avviabile è l'unica opzione.
Una tecnica comunemente utilizzata nelle distribuzioni basate su Debian e Ubuntu consiste nell'avviare il sistema da un LiveCD o LiveUSB (ad esempio, un'immagine Live di Ubuntu, Linux Mint, Debian, ecc.), montare la partizione root del sistema danneggiato, montare anche /boot se si tratta di una partizione separata e quindi eseguire un chroot su quel file system per reinstallare GRUB come se si stesse operando dall'installazione stessa.
Il processo, in termini generali, consiste nell'identificare le partizioni con fdisk -l, determinare qual è la radice (ad esempio, / Dev / sda2) e qual è la partizione di avvio se esiste (ad esempio, / Dev / sda7Poi vengono assemblati con:
Partizioni di montaggio (ad esempio):sudo mount /dev/sda2 /mntsudo mount /dev/sda7 /mnt/boot (se hai un file /boot separato)
e il bind mount di /dev, /dev/pts, /proc e /sys viene effettuato all'interno di /mnt:
Montature vincolanti:sudo mount --bind /dev /mnt/dev
sudo mount --bind /dev/pts /mnt/dev/pts
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
Da qui è possibile accedere al sistema installato tramite:
Accedi con: sudo chroot /mnt
E dall'interno, è possibile eseguire grub-install puntando al disco:
Installazione da chroot: grub-install --boot-directory=/boot/ --recheck /dev/sda
per ricaricare il boot manager nell'MBR o nell'area equivalente, seguito da:
Generare la configurazione: grub-mkconfig -o /boot/grub/grub.cfg
per rigenerare il file di configurazione. All'uscita da chroot con exit e riavviare il computer (sudo reboot), normalmente Il menu GRUB riappare normalmente..
Un'altra opzione molto comoda per gli utenti che preferiscono evitare il terminale è lo strumento Boot-Repair , che può essere installato in un ambiente Ubuntu live e offre un'interfaccia grafica in grado di rilevare le installazioni del sistema operativo e riparare GRUB in modo quasi automatico . Basta avviare lo strumento, selezionare la "riparazione consigliata" e lasciare che analizzi e riscriva il bootloader.
Sebbene queste soluzioni basate su LiveCD o utility esterne siano molto pratiche, il vantaggio di padroneggiare le tecniche che abbiamo visto all'inizio è che non si dipende dalla disponibilità di un'unità USB o di un disco . In molte situazioni è sufficiente utilizzare la console GRUB, soprattutto quando il problema consiste "solo" nella perdita del riferimento corretto alla partizione in cui risiede /boot da parte del boot manager.
Detto questo, è chiaro che un GRUB danneggiato non significa necessariamente la perdita del sistema : hai a disposizione strumenti nel bootloader stesso, nella riga di comando e nell'ambiente Live per individuare la partizione corretta, caricare manualmente il kernel, avviare GNU/Linux e reinstallare il boot manager in modo che funzioni di nuovo come nuovo.