Nel mio ultimo computer ho voluto tenere un dual boot con GRUB essendo obbligato in alcune situazioni ad utilizzare una macchina Windows genuina per connettermi ad alcune VPN. Stamattina, eseguendo gli aggiornamenti del sistema operativo Windows 11, qualcosa è andato storto ed è stato danneggiato il GRUB che mi permette all’avvio della macchina di avviare Ubuntu 22.04 oppure Windows11
Cos’è GRUB
GRUB (Grand Unified Bootloader) è un bootloader, ovvero un programma che viene eseguito all’avvio di un computer per caricare il sistema operativo. È particolarmente comune nei sistemi basati su Linux, ma può essere utilizzato anche per avviare altri sistemi operativi come Windows.
Funzioni principali di GRUB:
- Selezione del sistema operativo:
- GRUB permette di scegliere quale sistema operativo avviare se ne hai installato più di uno sullo stesso computer (dual-boot). Ad esempio, se hai sia Ubuntu che Windows installati, GRUB ti presenterà un menu all’avvio dove puoi scegliere quale sistema operativo avviare.
- Caricamento del kernel:
- GRUB carica il kernel del sistema operativo scelto in memoria e lo avvia. Il kernel è il cuore del sistema operativo e gestisce tutte le interazioni tra l’hardware e il software.
- Configurabilità:
- GRUB è altamente configurabile. Puoi modificarne le impostazioni per cambiare l’aspetto del menu, aggiungere o rimuovere opzioni di avvio, impostare quale sistema operativo deve essere avviato di default, e molto altro.
- Compatibilità con diversi file system:
- GRUB supporta una vasta gamma di file system, il che significa che può leggere i file necessari per avviare un sistema operativo indipendentemente dal file system utilizzato.
- Modalità di recupero:
- Se un sistema operativo non riesce ad avviarsi correttamente, GRUB può fornire opzioni per avviare il sistema in modalità di recupero (recovery mode) o per passare parametri speciali al kernel per aiutare a risolvere problemi.
GRUB e UEFI
- UEFI e BIOS: GRUB funziona sia con sistemi UEFI (che è il firmware moderno presente nei computer più recenti) sia con sistemi BIOS (che è il firmware più vecchio).
- Secure Boot: In sistemi UEFI con Secure Boot abilitato, GRUB deve essere firmato digitalmente per poter essere avviato. Questo garantisce che solo software approvato possa essere eseguito all’avvio, migliorando la sicurezza.
Versioni di GRUB
- GRUB Legacy: La versione più vecchia di GRUB, che è meno usata oggi.
- GRUB 2: La versione più recente e quella più comunemente utilizzata oggi. GRUB 2 offre molte più funzionalità rispetto a GRUB Legacy, incluso un sistema di configurazione più potente e un supporto esteso per diversi tipi di file system e dispositivi di avvio.
Tentativo di soluzione manuale
La prima operazione da fare è creare una chiavetta USB di avvio contenente la stessa versione di Ubuntu che ho a bordo del PC, la 22.04 Jammy Jellyfish.
Creazione di un USB disk di avvio
Per fare questo occorre scaricare dal sito di Ubuntu l’immagine ISO di questa versione; una volta scaricata l’ISO utilizzare l’utility di creazione dischi:
Selezionare quindi l’immagine scaricata e avviare la creazione del disco
Alla fine verrà mostrato l’avviso di creazione eseguita
Come è stato partizionato il disco?
Occorre innanzitutto chiarire come è stato partizionato il disco quando è stato installato Ubuntu.
Per fare questo esistono due comandi di ispezione che sono lsblk e fdisk.
Questo è l’output di lsblk per il mio disco
$ sudo lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS loop0 7:0 0 4K 1 loop /snap/bare/5 loop1 7:1 0 10,1M 1 loop /snap/canonical-livepatch/278 ... loop54 7:54 0 447,3M 1 loop /snap/telegram-desktop/6117 nvme0n1 259:0 0 953,9G 0 disk ├─nvme0n1p1 259:1 0 260M 0 part /boot/efi ├─nvme0n1p2 259:2 0 16M 0 part ├─nvme0n1p3 259:3 0 464,3G 0 part ├─nvme0n1p4 259:4 0 1G 0 part └─nvme0n1p5 259:5 0 488,3G 0 part /var/snap/firefox/common/host-hunspell
E questo è l’output per fdisk
$ sudo fdisk -l [sudo] password di marco: Disk /dev/loop0: 4 KiB, 4096 bytes, 8 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes ... Disk /dev/nvme0n1: 953,87 GiB, 1024209543168 bytes, 2000409264 sectors Disk model: WD PC SN740 SDDQNQD-1T00-1014 Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: gpt Disk identifier: 8C2BBF42-DC93-4D6C-A305-9C00B93C5816 Dispositivo Start Fine Settori Size Tipo /dev/nvme0n1p1 2048 534527 532480 260M EFI System /dev/nvme0n1p2 534528 567295 32768 16M Microsoft reserved /dev/nvme0n1p3 567296 974311423 973744128 464,3G Microsoft basic data /dev/nvme0n1p4 1998311424 2000408575 2097152 1G Windows recovery environment /dev/nvme0n1p5 974311424 1998311423 1024000000 488,3G Linux filesystem Partition table entries are not in disk order.
Interpretazione di lsblk e fdisk -l
- Dispositivi
loop:- I dispositivi
loopche vengono mostrati (loop0,loop1, ecc.) sono immagini montate temporaneamente dal sistema live che si sta utilizzando. Non hanno a che fare con il mio disco fisso, quindi li possiamo ignorare.
- I dispositivi
- Disco
sda:- Questo sembra essere il supporto USB o il CD/DVD da cui ho avviato il sistema live. Anche questo possiamo ignorarlo per ora.
- Disco
nvme0n1:- Questo è il mio SSD principale da 953,87 GiB (1 Terabayte), suddiviso in diverse partizioni:
| Partizione | Tipo | Dimensione |
/dev/nvme0n1p1 | EFI System (Partizione EFI) | 260M |
/dev/nvme0n1p2 | Microsoft Reserved | 16M |
/dev/nvme0n1p3 | Microsoft basic data (Windows) | 464,3G |
/dev/nvme0n1p4 | Windows recovery environment | 1G |
/dev/nvme0n1p5 | Linux filesystem (Ubuntu) | 488,3G |
Quindi le partizioni più importanti sono
/dev/nvme0n1p1che è quello dall’UEFI (l’ex BIOS)/dev/nvme0n1p3la partizione Windows/dev/nvme0n1p5la partizione Linux
Procedura per ripristinare GRUB
Ora che abbiamo identificato le partizioni, si può procedere con il ripristino di GRUB montando manualmente dal sistema di avvio USB la partizione di Ubuntu e reinstallando GRUB.
1. Montare la partizione di Ubuntu
- Monto la partizione di Ubuntu, che nel mio caso è
/dev/nvme0n1p5, con il seguente comando:
sudo mount /dev/nvme0n1p5 /mnt
2. Montare le directory necessarie
- Dopo aver montato la partizione di Ubuntu, devo montare anche le altre directory necessarie:
sudo mount –bind /dev /mnt/dev
sudo mount –bind /proc /mnt/proc
sudo mount –bind /sys /mnt/sys
sudo mount /dev/nvme0n1p1 /mnt/boot/efi
Il comando per montare /dev/nvme0n1p1 nella directory /mnt/boot/efi è necessario perché questa partizione contiene i file di avvio EFI.
3. Accedere alla mia installazione con chroot
- Ora, entro nel sistema Ubuntu installato utilizzando
chroot(in questo momento sono nella chiavetta USB!):
sudo chroot /mnt
4. Reinstallare GRUB
- Reinstallo GRUB sul SSD principale (che è
/dev/nvme0n1):
grub-install /dev/nvme0n1
- Aggiorno la configurazione di GRUB:
update-grub
5. Uscire e riavviare
- Uscire dall’ambiente
chroot:
exit
- Smonto tutte le partizioni montate:
sudo umount /mnt/dev
sudo umount /mnt/proc
sudo umount /mnt/sys
sudo umount /mnt/boot/efi
sudo umount /mnt
- Riavvio il sistema:
sudo reboot
Dopo il riavvio, dovrei vedere il menu di GRUB e poter scegliere tra Ubuntu e Windows.
Ma non funziona
Però quanto fatto non funziona: si avvia sempre automaticamente la partizione Windows e non vedo più Linux.
In realtà la partizione c’è: avviando UEFI (premendo F2 all’avvio) vedo correttamente le due partizioni e modificando l’ordine a mano parte sia Windows che Linux ma non parte più il GRUB.
Tra le varie opzioni trovate da ChatGPT 4, preferisco andare direttamente all’opzione che mi consiglia di installare boot-repair.
Ripristino del bootloader con Boot-Repair
Avvio nuovamente il sistema con un live CD/USB di Ubuntu.
Quindi installo Boot-Repair:
sudo add-apt-repository ppa:yannubuntu/boot-repair
sudo apt update
sudo apt install -y boot-repair
Avvio Boot-Repair:
boot-repair
Un estratto della procedura di riparazione dell’UEFI è questa (mi viene generato un pastebin che verrà conservato per un mese. Me lo trascrivo in locale):
============================= Boot Repair Summary ============================== modprobe: FATAL: Module efivars not found in directory /lib/modules/6.5.0-18-generic Recommended repair: ____________________________________________________________ The default repair of the Boot-Repair utility will reinstall the grub-efi-amd64-signed of nvme0n1p5, using the following options: nvme0n1p1/boot/efi Additional repair will be performed: unhide-bootmenu-10s use-standard-efi-file Mount /dev/nvme0n1p1 on /mnt/boot-sav/nvme0n1p5/boot/efi Unhide GRUB boot menu in nvme0n1p5/etc/default/grub ============ Reinstall the grub-efi-amd64-signed of /dev/nvme0n1p5 =============
In sostanza credo che l’aggiornamento di Windows abbia in qualche modo causato una corruzione del file efi nella partizione destinata a EFI.
Tuttavia questa operazione fatta da boot-repair risolve completamente il problema e il dual boot ricomincia a funzionare, lo provo per un po’ di volte per essere sicuro.










Commenti recenti