Il bootloader GRUB2 – Installazione e configurazione

Michael Wu, Il Team di Documentazione di Fedora Version unknown Last review: 2012-05-11

GRUB2 è l’ultima versione di GNU GRUB, il GRand Unified Bootloader. Il bootloader è il primo programma software che viene eseguito all’avvio del computer. È responsabile del caricamento e del trasferimento del controllo al kernel del sistema operativo. In Fedora il kernel è Linux. Il kernel inizializza poi il resto del sistema operativo.

GRUB2 è il successore della versione precedente GRUB (versione 0.9x). La versione originale è disponibile con il nome GRUB Legacy.

Da Fedora 16, GRUB2 è il bootloader predefinito sui sistemi x86 BIOS. Anche per gli aggiornamenti di sistemi BIOS il comportamento predefinito è installare GRUB2, ma è possibile scegliere di saltare del tutto la configurazione del bootloader.

Individuare il tipo di firmware

Per scoprire quale firmware utilizza la tua macchina, esegui il seguente comando:

$ [ -d /sys/firmware/efi ] && echo UEFI || echo BIOS

Il comando restituisce solo UEFI oppure BIOS, in base al firmware in uso sulla macchina.

Installare GRUB2 su un sistema BIOS

Normalmente GRUB2 viene installato e configurato dal programma di installazione, Anaconda, durante il processo di installazione. Probabilmente non dovrai mai occuparti dell’installazione manuale di GRUB2. Tuttavia, in alcune situazioni potresti doverlo installare manualmente, soprattutto se devi riparare un’installazione esistente di GRUB2 o se vuoi modificarne la configurazione.

Questa procedura mostra i passaggi per installare GRUB2 nel Master Boot Record (MBR) del disco rigido primario.

Prima di iniziare
  • Assicurati che i pacchetti GRUB2 e il pacchetto os-prober siano installati nel sistema.

    $ dnf list installed | grep grub
  • Per raccogliere automaticamente informazioni sui dischi e sui sistemi operativi installati, è necessario che il pacchetto os-prober sia installato nel sistema.

Procedura
  1. Elenca i dispositivi a blocchi disponibili sul sistema.

    $ lsblk
  2. Individua il disco rigido primario. Di solito è il dispositivo sda.

  3. Installa GRUB2 nel MBR del disco rigido primario.

    # grub2-install /dev/sda
  4. Crea un file di configurazione per GRUB2.

    # grub2-mkconfig -o /boot/grub2/grub.cfg
  5. Riavvia il computer per avviarlo con il nuovo bootloader.

Ulteriori informazioni
  • Il comando grub2-mkconfig crea una nuova configurazione basata sul sistema attualmente in esecuzione. Raccoglie informazioni dalla partizione (o directory) /boot, dal file /etc/default/grub e dagli script personalizzabili in /etc/grub.d.

  • Il formato della configurazione cambia nel tempo e un nuovo file di configurazione potrebbe risultare leggermente incompatibile con versioni più vecchie del bootloader. Esegui sempre grub2-install prima di creare il file di configurazione con grub2-mkconfig.

  • In Fedora è generalmente sicuro modificare manualmente /boot/grub2/grub.cfg. Grubby in Fedora applica le patch alla configurazione quando viene eseguito un aggiornamento del kernel e cerca di non apportare altre modifiche se non quelle strettamente necessarie. Le modifiche manuali possono essere sovrascritte da grub2-mkconfig quando il sistema viene aggiornato con Anaconda. Le personalizzazioni inserite nei file /etc/grub.d/40_custom o /boot/grub2/custom.cfg sopravvivono all’esecuzione del comando grub2-mkconfig.

Installare GRUB2 su un sistema UEFI

Normalmente GRUB2 viene installato e configurato dal programma di installazione, Anaconda, durante il processo di installazione. Probabilmente non dovrai mai occuparti dell’installazione manuale di GRUB2. Tuttavia, in alcune situazioni potresti doverlo installare manualmente, soprattutto se devi riparare un’installazione esistente di GRUB2 o se vuoi modificarne la configurazione.

Questa procedura mostra i passaggi per installare GRUB2 su un sistema UEFI in Fedora 18 o successivi. La procedura è suddivisa in quattro parti.

Creare una partizione EFI System (ESP)

Il firmware UEFI richiede di avviarsi da una EFI System Partition su un disco con etichetta GPT. Per creare tale partizione:

  1. Elenca i dispositivi a blocchi disponibili per trovare dove creare la tua ESP.

$ lsblk -f -p
  1. Crea almeno una partizione da 128 MiB con etichetta GPT sul disco rigido primario.

    # gdisk /dev/sda

    Per questa procedura, presupponiamo che la partizione creata sia riconosciuta come /dev/sda1.

  2. Formatta la partizione con il file system FAT32.

    # mkfs.vfat /dev/sda1
  3. Crea la directory /boot/efi come punto di mount per la nuova partizione.

    # mkdir /boot/efi
  4. Monta la partizione nel punto di mount /boot/efi.

    # mount /dev/sda1 /boot/efi
  5. Procedi con la parte successiva.

Installare i file del bootloader

In order to use GRUB2 with on UEFI systems, you need to install necessary packages:

  1. Re-installa i pacchetti necessari.

# dnf reinstall grub2-efi grub2-efi-modules shim-\*
  1. Se il comando precedente termina con un errore, installa i pacchetti.

    # dnf install grub2-efi grub2-efi-modules shim-\*
Ulteriori informazioni
  • Ciò installa lo shim firmato e il binario GRUB2.

Creare la configurazione di GRUB2

Se hai già un file di configurazione GRUB2 EFI funzionante, non devi fare altro.

In caso contrario, crea il file di configurazione utilizzando il comando grub2-mkconfig.

# grub2-mkconfig -o /boot/grub2/grub.cfg
Ulteriori informazioni
  • In modalità EFI, GRUB2 cerca la sua configurazione in /boot/efi/EFI/fedora/grub.cfg; tuttavia lo script post-install di grub2-common installa un piccolo shim che rimanda alla configurazione standard in /boot/grub2/grub.cfg generata sopra. Per ripristinare questo shim ai valori predefiniti, elimina il file /boot/efi/EFI/fedora/grub.cfg esistente e reinstalla grub2-common.

    # rm -f /boot/efi/EFI/fedora/grub.cfg # dnf reinstall grub2-common
  • Per far funzionare i kernel appena installati, grubby si aspetta che /etc/grub2-efi.cfg sia un link simbolico al file grub.cfg effettivo (ad esempio /boot/grub2/grub.cfg).

Risolvere problemi con il bootloader UEFI

Quando accendi il sistema, il firmware cerca le variabili EFI che indicano come avviare. Nei sistemi attivi, avviati in modalità EFI e con i servizi di runtime EFI funzionanti correttamente, puoi configurare il menu di avvio con efibootmgr.

In caso contrario, shim può aiutarti ad avviare. Il programma EFI /boot/efi/EFI/BOOT/fallback.efi cerca file chiamati BOOT.CSV nella tua ESP e aggiunge le voci di avvio corrispondenti. Il comando shim fornisce il proprio file BOOT.CSV che aggiungerà una voce per grub2-efi.

Durante il processo di avvio, puoi usare la EFI Shell per invocare il profilo fallback.efi e avviare il sistema:

  1. Entra nella partizione di avvio.

fs0:
  1. Spostati nella directory EFI\BOOT.

    > cd EFI\BOOT
  2. Invoca il profilo fallback.efi.

    > fallback.efi
Ulteriori informazioni
  • Se non hai alcuna voce di avvio, avviare il disco in modalità UEFI dovrebbe invocare automaticamente /boot/efi/EFI/BOOT/BOOTX64.EFI, che a sua volta invocherà fallback.efi.

  • Se hai già voci di avvio errate, dovrai eliminarle o modificare BOOT.CSV per creare nuove voci con nomi diversi.

Aggiungere altri sistemi operativi al menu GRUB2

Normalmente GRUB2 è pre-impostato per avviare più sistemi operativi durante l’installazione di Fedora. Quando possibile, è consigliabile installare prima i sistemi operativi non-Linux. Durante l’installazione, tali sistemi e le loro posizioni verranno rilevati e configurati correttamente.

Per aggiungere altre voci nel menu GRUB2 basta eseguire il comando grub2-mkconfig per rigenerare i file di configurazione. Durante questo processo, tutti i sistemi operativi rilevati verranno aggiunti alla configurazione. Re-installando GRUB2, questa configurazione verrà usata per i successivi avvii.

Prima di iniziare
  • Assicurati che i sistemi operativi si trovino su dischi collegati al sistema.

  • Hai installato il pacchetto os-prober.

Procedura
  1. Ricrea il file di configurazione di GRUB2.

    # grub2-mkconfig -o /boot/grub2/grub.cfg
  2. Installa GRUB2.

    • Su sistemi UEFI.

      # dnf reinstall shim-\* grub2-efi-\* grub2-common
    • Su sistemi BIOS, specifica il disco su cui installare il bootloader.

      # grub2-install /dev/sda
Ulteriori informazioni
  • Il comando grub2-mkconfig aggiungerà voci per tutti i sistemi operativi trovati.

  • Quando si verificano problemi, consulta il manuale GRUB per risolvere le difficoltà nell’avvio di sistemi operativi secondari.

Impostare la voce predefinita per GRUB2

Poiché grub2-mkconfig (e os-prober) non possono stabilire quale dei sistemi trovati debba essere contrassegnato come predefinito, non è possibile prevedere l’ordine delle voci in /boot/grub2/grub.cfg. Per modificare l’impostazione predefinita, è necessario impostarla in base al name o al title.

Prima di iniziare
  1. Apri /etc/default/grub e assicurati che contenga queste righe.

    GRUB_DEFAULT=saved
    GRUB_SAVEDEFAULT=false
  2. Se hai modificato il contenuto di /etc/default/grub, applica le modifiche a grub.cfg.

    # grub2-mkconfig -o /boot/grub2/grub.cfg
Procedura
  1. Elenca tutte le possibili voci di menu.

    # grep -P "^menuentry" /boot/grub2/grub.cfg | cut -d "'" -f2
  2. Seleziona una delle opzioni mostrate e usala come argomento per impostare la voce di menu predefinita.

    # grub2-set-default <menuentry>
  3. Verifica la voce di menu predefinita

    # grub2-editenv - list
  4. Rigenera il file di configurazione di GRUB2 e reinstalla il bootloader nel MBR, come descritto in Aggiungere altri sistemi operativi al menu GRUB2.

Ulteriori informazioni

Se comprendi i rischi coinvolti, puoi modificare manualmente il file /boot/grub2/grub.cfg. In tal caso, imposta il numero del sistema operativo predefinito utilizzando la variabile set default.

Ad esempio:

set default="5"

Se modifichi il file di configurazione manualmente, le impostazioni verranno sovrascritte ogni volta che viene eseguito il comando grub2-mkconfig.

Ripristinare il bootloader usando il disco Live

A volte, specialmente dopo l’installazione di un sistema operativo secondario, il Master Boot Record si danneggia e impedisce l’avvio del sistema Linux originale.

Se ciò accade, è necessario reinstallare GRUB2 per ricreare le impostazioni originali. Il processo non solo rileva tutti i sistemi operativi installati, ma di solito li aggiunge alla configurazione di GRUB2, così che tutti possano essere avviati da GRUB2.

Prima di iniziare
  • Ottieni l’ISO Fedora Live da fedoraproject.org.

  • Prepara un dispositivo avviabile usando l’ISO scaricata, sia esso un CD o una chiavetta USB.

Procedura
  1. Avvia il sistema Fedora Live dal dispositivo avviabile creato.

  2. Apri il terminale.

  3. Esamina il layout delle partizioni e identifica la partizione /boot e la partizione /root.

    # lsblk -f -p
  4. Se la tua partizione /root è cifrata con LUKS, devi decifrarla.

    1. Assicurati che il modulo crypt sia caricato.

      # modprobe dm-crypt
    2. Decifra la partizione /root (es. /dev/sda3).

      # cryptsetup luksOpen /dev/sda3 myvolume

      Il dispositivo decifrato (ad es. myvolume) sarà accessibile in /dev/mapper.

  5. Segui i passaggi BTRFS (usati di default da Fedora 33 o più recenti).

    1. Monta la partizione /root.

      • Per LUKS.

        # mount /dev/mapper/myvolume /mnt -o subvol=root
      • Per non-LUKS.

        # mount /dev/sda3 /mnt -o subvol=root
  6. Segui i passaggi LVM (usati di default prima di Fedora 33).

    1. Scansiona i volumi LVM per il gruppo di volumi corrispondente alla partizione /root.

      # vgscan
    2. Attiva il gruppo di volumi (es. fedora).

      # vgchange -ay fedora
    3. Trova il volume logico corrispondente a /root.

      # lvs

      Il volume logico sarà accessibile in /dev/mapper.

    4. Monta il volume logico (es. /dev/mapper/fedora-root) corrispondente alla partizione /root.

      # mount /dev/mapper/fedora-root /mnt
  7. Monta la partizione /boot (es. /dev/sda2).

    # mount /dev/sda2 /mnt/boot
  8. Monta i processi e i dispositivi di sistema nel filesystem /root.

    # mount -o bind /dev /mnt/dev
    # mount -o bind /proc /mnt/proc
    # mount -o bind /sys /mnt/sys
    # mount -o bind /run /mnt/run
  9. Su sistemi UEFI, collega la directory efivars e monta la partizione EFI System (es. /dev/sda1).

    # mount -o bind /sys/firmware/efi/efivars /mnt/sys/firmware/efi/efivars
    # mount /dev/sda1 /mnt/boot/efi
  10. Cambia il tuo filesystem in quello montato sotto /mnt.

    # chroot /mnt
  11. Reinstalla GRUB2.

    • Su sistemi UEFI sono richiesti diversi pacchetti.

      # dnf reinstall shim-\* grub2-efi-\* grub2-common
    • Su sistemi BIOS, specifica il disco (es. /dev/sda) su cui installare GRUB2.

      # grub2-install /dev/sda
  12. Rigenera il file di configurazione di GRUB2.

    # grub2-mkconfig -o /boot/grub2/grub.cfg
  13. Sincronizza ed esci dal chroot.

    # sync && exit
  14. Riavvia il sistema.

Usare la schermata di avvio di GRUB2

Se configurato impropriamente, GRUB2 potrebbe non caricarsi e mostrare una schermata di avvio (boot prompt). Per avviare il sistema, segui i passaggi qui sotto.

Procedura
  1. Carica i moduli necessari per leggere le partizioni del sistema (dovrai anche caricare part_msdos o part_gpt, in base alla tua tabella delle partizioni).

    • Per filesystem BTRFS (Fedora 33 o più recente).

      grub> insmod btrfs
    • Per filesystem LVM (versioni precedenti a Fedora 33).

      grub> insmod xfs
      grub> insmod lvm
  2. Elenca i dischi rilevati da GRUB2.

    grub> ls
  3. Esamina l’output per comprendere la tabella delle partizioni del dispositivo /dev/sda. L’esempio seguente mostra una tabella DOS con tre partizioni.

    (hd0) (hd0,msdos3) (hd0,msdos2) (hd0,msdos1)

    Una tabella GPT del dispositivo /dev/sda con quattro partizioni potrebbe essere così.

    (hd0) (hd0,gpt4) (hd0,gpt3)  (hd0,gpt2) (hd0,gpt1)
  4. Ispeziona ogni partizione del disco e localizza i file vmlinuz e initramfs.

    grub> ls (hd0,1)/

    L’output del comando precedente elencherà i file in /dev/sda1. La partizione che contiene la directory /boot è quella corretta; lì cercherai i nomi completi dei file vmlinuz e initramfs.

  5. Segui Pre-boot setup per BTRFS o Pre-boot setup per LVM per recuperare il sistema.

  6. Dopo il pre-boot setup, avvia il sistema.

    grub> boot
  7. Per ripristinare la funzionalità del bootloader, rigenera il file di configurazione di GRUB2 e reinstalla il bootloader, come descritto in Aggiungere altri sistemi operativi al menu GRUB2.

Pre-boot setup per filesystem BTRFS

  • Su sistemi BIOS.

    1. Imposta la root di GRUB2 sulla tua partizione /boot. Se la tua partizione /boot è (hd0,msdos1), il comando sarà.

      grub> set root=(hd0,msdos1)
    2. Successivamente, seleziona il kernel desiderato. Imposta la partizione /root (es. /dev/sda2).

      grub> linux /vmlinuz-5.14.10-300.fc35.x86_64 root=/dev/sda2 ro rootflags=subvol=root
  • Su sistemi UEFI.

    1. Imposta la root di GRUB2 sulla tua partizione EFI System. Se la tua partizione EFI è (hd0,gpt1), usa questo comando.

      grub> set root=(hd0,gpt1)
    2. Successivamente, seleziona il kernel desiderato. Trova il percorso di vmlinuz e imposta la partizione /root (es. /dev/sda3).

      grub> linux (hd0,gpt2)/vmlinuz-5.14.10-300.fc35.x86_64 root=/dev/sda3 ro rootflags=subvol=root
    3. Seleziona il filesystem RAM che verrà caricato.

      grub> initrd (hd0,gpt2)/initramfs-5.14.10-300.fc35.x86_64.img

Pre-boot setup per filesystem LVM

  • Su sistemi BIOS.

    1. Imposta la root di GRUB2 sulla tua partizione /boot. Se la tua partizione /boot è (hd0,msdos1), usa questo comando.

      grub> set root=(hd0,msdos1)
    2. Successivamente, seleziona il kernel desiderato. Imposta root sul volume logico corrispondente alla directory /root.

      grub> linux /vmlinuz-3.0.0-1.fc16.i686 root=/dev/mapper/fedora-root
    3. Seleziona il filesystem RAM che verrà caricato.

      grub> initrd /initramfs-3.0.0-1.fc16.i686.img
  • Su sistemi UEFI.

    1. Imposta la root di GRUB2 sulla tua partizione EFI System. Se la tua partizione EFI è (hd0,gpt1), usa questo comando.

      set root=(hd0,gpt1)
    2. Successivamente, seleziona il kernel desiderato. Trova il percorso di vmlinuz e imposta root sul volume logico corrispondente alla directory /root.

      linux (hd0,gpt2)/vmlinuz-3.0.0-1.fc16.i686 root=/dev/mapper/fedora-root
    3. Seleziona il filesystem RAM che verrà caricato.

      initrd (hd0,gpt2)/initramfs-3.0.0-1.fc16.i686.img

Avviare il sistema usando un file di configurazione su un’altra partizione

Se ti trovi nella schermata di avvio di GRUB2, è possibile avviare il sistema usando un configfile situato su un’altra partizione, come spesso accade nei sistemi multi-boot con Ubuntu e Fedora. Segui la procedura qui sotto se devi avviare il sistema da un file di configurazione su un’altra partizione.

Procedura
  1. Carica i moduli necessari per leggere le partizioni del sistema (dovrai anche caricare part_msdos o part_gpt, in base alla tua tabella delle partizioni).

    • Per filesystem BTRFS.

      grub> insmod btrfs
    • Per filesystem LVM.

      grub> insmod xfs
      grub> insmod lvm
  2. Imposta la root di GRUB2 sulla tua partizione /boot. Su sistemi UEFI dovresti impostare la root di GRUB2 sulla partizione EFI System.

    grub> set root=(hd0,msdos1)
  3. Imposta il percorso del file di configurazione.

    grub> configfile /grub2/grub.cfg
Ulteriori informazioni
  • La riga hd0,msdos1 mostra la partizione /boot pertinente, che contiene il file grub.cfg. L’impostazione potrebbe essere diversa sul tuo sistema. Vedi anche Usare la schermata di avvio di GRUB2 per ulteriori informazioni.

Impostare una password per la modalità di modifica interattiva

Se desideri proteggere la modalità di modifica interattiva di GRUB2 con una password, ma consentire agli utenti normali di avviare il computer, usa il comando grub2-set-password. Ti verrà chiesta la password e dovrai confermarla. La password cifrata verrà salvata in /boot/grub2/user.cfg.

Per rimuovere la protezione tramite password, elimina semplicemente il file user.cfg.

In alternativa, puoi configurarlo manualmente:

Procedura
  1. Crea il file /etc/grub.d/01_users e inserisci le seguenti righe.

    cat << EOF
    set superusers="root"
    export superusers
    password root <password>
    EOF
  2. Rigenera il file di configurazione di GRUB2, come descritto in Aggiungere altri sistemi operativi al menu GRUB2.

Ulteriori informazioni

Puoi cifrare la password usando pbkdf2. Usa grub2-mkpasswd-pbkdf2 per cifrarla, quindi sostituisci la riga della password con:

password_pbkdf2 root grub.pbkdf2.sha512.10000.1B4BD9B60DE889A4C50AA9458C4044CBE129C9607B6231783F7E4E7191D8254C0732F4255178E2677BBE27D03186E44815EEFBAD82737D81C87F5D24313DDDE7.E9AEB53A46A16F30735E2558100D8340049A719474AEEE7E3F44C9C5201E2CA82221DCF2A12C39112A701292BF4AA071EB13E5EC8C8C84CC4B1A83304EA10F74

Per rimuovere la protezione tramite password, elimina semplicemente le modifiche apportate al file /etc/grub.d/01_users e rigenera il file di configurazione di GRUB2, come fatto in precedenza.

Ulteriori dettagli sono disponibili su Ubuntu Help: GRUB2 Passwords.

A partire da Fedora 15, l’opzione kickstart --password=<password_cifrata> --iscrypted deve essere usata se si imposta una password GRUB2 cifrata nel file kickstart.

Gestire l’errore "Absent Floppy Disk" (Disco floppy assente)

Alcuni utenti hanno segnalato che GRUB2 potrebbe non riuscire a installarsi nel settore di avvio di una partizione se il controller floppy del computer è attivato nel BIOS senza che sia presente un’unità disco floppy. Tali situazioni causano l’errore Absent Floppy Disk.

Per aggirare il problema, entra in modalità di ripristino e segui la procedura in Installare GRUB2 su un sistema BIOS, ma usa l’opzione --no-floppy con il comando grub2-install.

# grub2-install <dispositivo-target> --no-floppy

Usare modalità grafiche legacy nel bootloader

Il dispositivo terminale viene scelto con GRUB_TERMINAL. Per maggiori informazioni, consulta il manuale Grub.

I nomi di output terminale validi dipendono dalla piattaforma, ma possono includere console (console PC BIOS e EFI), serial (terminale seriale), gfxterm (output in modalità grafica), ofconsole (console Open Firmware) o vga_text (output testuale VGA, utile principalmente con Coreboot).

L’impostazione predefinita è usare l’output terminale nativo della piattaforma.

In Fedora, gfxterm è l’opzione predefinita. Per ottenere le modalità grafiche legacy:

Procedura
  1. Modifica il file /etc/default/grub.

  2. Imposta la variabile GRUB_TERMINAL a una delle opzioni sopra citate.

  3. Rigenera il file di configurazione di GRUB2 e reinstalla il bootloader nel MBR, come descritto in Aggiungere altri sistemi operativi al menu GRUB2.

Abilitare la Console Seriale in GRUB2

Per abilitare la console seriale in grub:

Procedura
  1. Modifica il file /etc/default/grub.

  2. Regola baudrate, parity, bits e flow in base al tuo ambiente e ai cavi, vedi l’esempio.

    GRUB_CMDLINE_LINUX='console=tty0 console=ttyS0,115200n8'
    GRUB_TERMINAL=serial
    GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"
  3. Rigenera il file di configurazione di GRUB2 e reinstalla il bootloader nel MBR, come descritto in Aggiungere altri sistemi operativi al menu GRUB2.

Risorse aggiuntive