Modificare boot loader del sistema

By | Agosto 29, 2018

Nota: questo è un obiettivo d’esame RHCSA 7.

Presentazione di GRUB2

GRUB2 è il nuovo bootloader Linux. GRUB2 è l’acronimo di GRand Unified Bootloader version 2.

Dato che GRUB non è stato mantenuto per un po ‘di tempo e non aveva alcune funzionalità critiche come la gestione GPT necessaria per gestire dischi di dimensioni superiori a 2,4TB, è stato deciso di iniziare una nuova versione da zero con in mente la modularità.

GRUB2 offre le seguenti nuove funzionalità:

possibilità di avviarsi su vari file system (xfs, ext4, ntfs, hfs +, raid, ecc.),
decomprimere file gzip al volo,
gestire tutte le geometrie del disco,
supporto per GPT (GUID Partition Tables) e MBR (Master Boot Record),
portabilità con diverse architetture (BIOS, EFI, Coreboot, ecc.),
possibilità di caricare moduli al momento dell’esecuzione.

Processo di avvio di Linux

Organizzazione GRUB2

La configurazione di GRUB2 è distribuita su diversi file:

/boot/grub2/grub.cfg: questo file contiene la configurazione finale di GRUB2 (non modificarla direttamente!),
/etc/grub2.cfg: questo è un collegamento simbolico al file /boot/grub2/grub.cfg,
/etc/default/grub: questo file contiene l’elenco delle variabili GRUB2 (i valori delle variabili d’ambiente possono essere modificati),
/etc/sysconfig/grub: questo è un collegamento simbolico al file /etc/default/grub,
/etc/grub.d: questa directory contiene tutti i singoli file utilizzati internamente da GRUB2.

Questo tutorial esplorerà solo le conoscenze richieste per l’esame RHCSA.
Fare riferimento alla sezione Risorse aggiuntive per ulteriori dettagli.

Gestione di base

Per ottenere i dettagli sul kernel attivo corrente, digitare:

# grub2-editenv list
saved_entry=CentOS Linux (3.10.0-229.11.1.el7.x86_64) 7 (Core)

Nota: questa informazione è memorizzata nel file /boot/grub2/grubenv.

Per ottenere l’elenco dei kernel visualizzati all’avvio, digitare:

# grep ^menuentry /boot/grub2/grub.cfg
menuentry 'CentOS Linux (3.10.0-229.20.1.el7.x86_64) 7 (Core)' ...
menuentry 'CentOS Linux (3.10.0-229.14.1.el7.x86_64) 7 (Core)' ...
menuentry 'CentOS Linux 7 (Core), with Linux 0-rescue-f19b719117b44bf3a3fb777bd4127' ...caf

Per definire in modo definitivo il kernel da eseguire al momento dell’avvio (qui 0 per la prima voce), digitare:

# grub2-set-default 0

Per visualizzare le variabili GRUB2, digitare:

# cat /etc/default/grub 
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL="serial console"
GRUB_SERIAL_COMMAND="serial --speed=115200"
GRUB_CMDLINE_LINUX="rd.lvm.lv=rhel/swap crashkernel=auto rd.lvm.lv=rhel/root console=ttyS0,115200"
GRUB_DISABLE_RECOVERY="true"

Dove

GRUB_TIMEOUT definisce il ritardo di attesa all’avvio (qui 5 secondi),
GRUB_DISTRIBUTOR contiene il nome della distribuzione (qui CentOS Linux),
GRUB_DEFAULT specifica la voce di menu predefinita; può essere un numero, un nome di voce o una stringa saved che significa la voce salvata durante l’ultimo riavvio o l’esecuzione del comando grub2-set-default,
GRUB_DISABLE_SUBMENU consente (false) o meno (true) la visualizzazione di un sottomenu (vedi sotto),
GRUB_TERMINAL definisce il terminale di input e output device (qui console e seriale),
GRUB_SERIAL_COMMAND configura la porta seriale,
GRUB_CMDLINE_LINUX specifica gli argomenti della riga di comando aggiunti alle voci di menu per il kernel Linux,
GRUB_DISABLE_RECOVERY definisce se tutte le voci possono essere selezionate in modalità di ripristino tramite una riga separata (false) o solo la voce predefinita (true).

Se si desidera modificare il contenuto di qualsiasi variabile nel file precedente, è necessario digitare:

# grub2-mkconfig -o /boot/grub2/grub.cfg

Nota: questo è il comando principale da memorizzare per l’esame. Puoi anche sostituire /boot/grub2/grub.cfg con /etc/grub2.cfg

Per capire meglio alcune variabili d’ambiente, ecco la visualizzazione standard con GRUB_DISABLE_RECOVERY=”true” e GRUB_DISABLE_SUBMENU=true:

     CentOS Linux 7 (Core), with Linux 3.10.0-229.20.1.el7.x86_64
      CentOS Linux 7 (Core), with Linux 3.10.0-229.14.1.el7.x86_64
      CentOS Linux 7 (Core), with Linux 0-rescue-f19b719117b44bf3a3fb777bd4127>

      Use the ^ and v keys to change the selection.                       
      Press 'e' to edit the selected item, or 'c' for a command prompt.

Se GRUB_DISABLE_RECOVERY è impostato su “false”, ecco il nuovo display:

     CentOS Linux 7 (Core), with Linux 3.10.0-229.20.1.el7.x86_64              
      CentOS Linux 7 (Core), with Linux 3.10.0-229.20.1.el7.x86_64 (recovery m>
      CentOS Linux 7 (Core), with Linux 3.10.0-229.14.1.el7.x86_64             
      CentOS Linux 7 (Core), with Linux 3.10.0-229.14.1.el7.x86_64 (recovery m>
      CentOS Linux 7 (Core), with Linux 0-rescue-f19b719117b44bf3a3fb777bd4127>
      CentOS Linux 7 (Core), with Linux 0-rescue-f19b719117b44bf3a3fb777bd4127>

      Use the ^ and v keys to change the selection.                       
      Press 'e' to edit the selected item, or 'c' for a command prompt.

Ogni linea del kernel ottiene una linea associata in modalità di ripristino.

Se GRUB_DISABLE_RECOVERY è ora impostato su “true” (come nel display standard iniziale) e GRUB_DISABLE_SUBMENU è impostato su false, ecco il nuovo display:

      CentOS Linux 7 (Core)                                                     
      Advanced options for CentOS Linux 7 (Core)                               
                                                                             
      Use the ^ and v keys to change the selection.                       
      Press 'e' to edit the selected item, or 'c' for a command prompt.

Se viene selezionata la prima voce (“CentOS Linux 7 (Core)”), il sistema si avvia. Se viene selezionata la seconda opzione, il menu standard viene visualizzato con una riga aggiuntiva in basso per tornare al primo menu con il tasto Esc:

      CentOS Linux 7 (Core), with Linux 3.10.0-229.20.1.el7.x86_64              
      CentOS Linux 7 (Core), with Linux 3.10.0-229.14.1.el7.x86_64             
      CentOS Linux 7 (Core), with Linux 0-rescue-f19b719117b44bf3a3fb777bd4127>

      Use the ^ and v keys to change the selection.                       
      Press 'e' to edit the selected item, or 'c' for a command prompt.   
      Press Escape to return to the previous menu.

Risorse addizionali

Per esplorare meglio GRUB2, puoi:

leggi l’articolo di Brendan Swigart,
esplorare il manuale di configurazione di GRUB2,
leggi questo articolo che descrive il processo di avvio di RHEL 7.

2 thoughts on “Modificare boot loader del sistema

  1. tony

    [root@new-host tony]# grub2-editenv list
    saved_entry=Fedora (4.18.19-100.fc27.x86_64) 27 (Twenty Seven)
    [root@new-host tony]# grep ^menuentry /boot/grub2/grub.cfg
    menuentry ‘Fedora (4.18.19-100.fc27.x86_64) 27 (Twenty Seven)’ –class fedora –class gnu-linux –class gnu –class os –unrestricted $menuentry_id_option ‘gnulinux-4.18.19-100.fc27.x86_64-advanced-adb7f96c-ca57-4bdf-a8ba-b8d4b3f3928b’ {
    menuentry ‘Fedora (4.18.18-100.fc27.x86_64) 27 (Twenty Seven)’ –class fedora –class gnu-linux –class gnu –class os –unrestricted $menuentry_id_option ‘gnulinux-4.18.18-100.fc27.x86_64-advanced-adb7f96c-ca57-4bdf-a8ba-b8d4b3f3928b’ {
    menuentry ‘Fedora (4.18.16-100.fc27.x86_64) 27 (Twenty Seven)’ –class fedora –class gnu-linux –class gnu –class os –unrestricted $menuentry_id_option ‘gnulinux-4.18.16-100.fc27.x86_64-advanced-adb7f96c-ca57-4bdf-a8ba-b8d4b3f3928b’ {
    menuentry ‘Fedora (0-rescue-523b3945d9e84f6180fa0e5506fd8a04) 27 (Twenty Seven)’ –class fedora –class gnu-linux –class gnu –class os –unrestricted $menuentry_id_option ‘gnulinux-0-rescue-523b3945d9e84f6180fa0e5506fd8a04-advanced-adb7f96c-ca57-4bdf-a8ba-b8d4b3f3928b’ {
    menuentry ‘Windows Boot Manager (on /dev/sdb2)’ –class windows –class os $menuentry_id_option ‘osprober-efi-A656-CC51’ {
    vorrei lasciare solo due voci linux in uso e window come faccio per togliere le altre voci ?

    Reply
    1. m4x p0w3r Post author

      ciao,

      prova con

      sudo dnf install dnf-plugins-core
      sudo dnf remove $(dnf repoquery –installonly –latest-limit -2 -q)

      Saluti.

      Reply

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.