GRUB

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page GRUB and the translation is 48% complete.
Outdated translations are marked like this.

GRUB 2 (GRand Unified Bootloader version 2), a volte stilizzato come GRUB2 e comunemente indicato come GRUB, è un bootloader secondario multiboot in grado di caricare kernel da una varietà di filesystem sulla maggior parte delle architetture di sistema. GRUB supporta PC BIOS, PC EFI, IEEE 1275 (Open Firmware), SPARC e MIPS Lemote Yeeloong.

GRUB sostituisce il boot loader originale GRUB Legacy con una base di codice completamente separata con una nuova sintassi simile a una shell per funzionalità di scripting avanzate.

Per un approccio di configurazione rapida, vedere GRUB2 Quick Start.

Se si esegue la migrazione di un sistema da GRUB Legacy a GRUB2, vedere Migrazione a GRUB2.

Installazione

Prerequisiti

La variabile GRUB_PLATFORMS in make.conf controlla che target GRUB utilizzerà con grub-install. L'architettura amd64 include un profilo predefinito che funziona per la maggior parte dei sistemi.

FILE /etc/portage/make.confEsempio di come impostare la variabile GRUB_PLATFORMS per piattaforme EMU, EFI e PC
GRUB_PLATFORMS="emu efi-32 efi-64 pc"

Le seguenti piattaforme sono supportate a seconda della CPU:

Piattaforma Target
i386 ia64 mips mipsel powerpc sparc64 x86_64
ARC No No No Yes No No No
Coreboot Yes No No No No No 32-bit
EFI Yes Yes No No No No Yes
EMU Yes Yes Yes Yes Yes Yes Yes
IEEE 1275 (Open Firmware) Yes No No No Yes Yes 32-bit
Loongson No No No Yes No No No
Multiboot Yes No No No No No 32-bit
QEMU Yes No No No No No 32-bit
QEMU-MIPS No No Yes No No No No
PC Yes No No No No No 32-bit
Nota
Ogni volta che i valori nella variabile GRUB_PLATFORMS vengono modificati, GRUB dovrà essere reinstalato per creare il binario modificato. Assicurati di utilizzare le opzioni --newuse --deep come mostrato nella sezione emerge di seguito.

I profili amd64 abilitano il supporto per la funzionalità (U)EFI per impostazione predefinita. Quando si utilizza un sistema basato su BIOS, impostare la variabile GRUB_PLATFORMS su pc per evitare dipendenze non necessarie.

USE flags

USE flags for sys-boot/grub GNU GRUB boot loader

+device-mapper Enable support for devmapper. Required for LUKS or LVM volume detection.
+fonts Build and install fonts for the gfxterm module
+themes Build and install GRUB themes (starfield)
doc Add extra documentation (API, Javadoc, etc). It is recommended to enable per package instead of globally
efiemu Build and install the efiemu runtimes
libzfs Enable support for sys-fs/zfs
mount Build and install the grub-mount utility
nls Add Native Language Support (using gettext - GNU locale utilities)
sdl Add support for Simple Direct Layer (media library)
secureboot Automatically sign efi executables using user specified key
test Enable dependencies and/or preparations necessary to run tests (usually controlled by FEATURES=test but can be toggled independently)
truetype Build and install grub-mkfont conversion utility
verify-sig Verify upstream signatures on distfiles

Emerge

Per installare GRUB usare seguente sintassi di emerge:

root #emerge --ask --newuse --deep sys-boot/grub

Software aggiuntivi

Facoltativamente, installa l'utilità os-prober (fornita tramite il pacchetto sys-boot/os-prober) per avere il probe GRUB e generare voci di avvio per altri sistemi operativi durante l'esecuzione del comando grub-mkconfig. Nella maggior parte dei casi, ciò consentirà a GRUB di rilevare automaticamente altri sistemi operativi inclusi Windows 7, 8.1, 10, altre distribuzioni di Linux, ecc.

root #emerge --ask --newuse sys-boot/os-prober

Le installazioni di GRUB (e facoltativamente sys-boot/os-prober) non abilitano automaticamente l'operazione del boot loader. Queste installa solamente il software del boot loader nel sistema operativo. Per installare il boot loader sul sistema stesso (in modo che venga utilizzato all'avvio del sistema), è necessario eseguire ulteriori passaggi, descritti nella sezione Configurazione.

Installare il boot loader

L'installazione di GRUB come boot loader del sistema dipende da come il sistema deve avviarsi (attraverso quale tipo di firmware, ad esempio sui PC sia il legacy BIOS o il suo successore UEFI) e come il disco su cui dovrebbe essere il boot loader installato è partizionato (ad es. su un PC, indipendentemente dal fatto che utilizzi il layout di partizione MBR o GPT).

Questo articolo copre le seguenti situazioni:

Selezionare le istruzioni di installazione appropriate per il sistema.

UEFI con GPT

Attenzione
Even though 64-bit x86 processors ("x86-64" or "x64") support running legacy 32-bit software, it is not possible for an EFI implementation to do the same. A 64-bit EFI will not be able to run 32-bit .efi loaders! It should be noted that some early 64-bit-capable systems, i.e. systems with an x64 processor (an x86 processor featuring AMD64 or Intel 64), used a 32-bit implementation of EFI, like some early MacBooks (Intel Core 2) and some pre-2010 Windows computers. In such cases, even though the processor is 64-bit, (U)EFI is implemented as 32-bit software making efi-32 the proper EFI target because, likewise, a 32-bit EFI cannot run 64-bit .efi loaders.
Nota
Se si utilizza UEFI-CSM, fare riferimento a BIOS con MBR o BIOS con GPT. CSM sta per 'Compatibility Support Module' ed è un'emulazione del BIOS, che fa sì che UEFI si comporti come un BIOS. Nella configurazione del firmware viene spesso chiamato 'Modalità legacy' o 'Modalità compatibilità'. UEFI-CSM è sempre stato facoltativo ed è stato gradualmente eliminato sui sistemi tradizionali (come i PC) nel 2020.

Partizionamento per UEFI con GPT

Per l'avvio UEFI GPT, il sistema deve avere una partizione di sistema EFI dedicata contenente un filesystem FAT.

UEFI systems boot from efi files on their EFI System Partition (ESP). The EFI System Partition can be just about any size, with implementation considerations in mind.

The EFI System Partition can contain just the bootloader, or the bootloader along with support files. Typically, /boot contains the kernel along with additional EFI support files, while /boot/efi contains the actual EFI files, which tend to be small.

Nota
The EFI System Partition can be made at either /boot or /boot/efi but it tends to be simpler to just use /boot. Using /boot/efi allows files like the kernel and bootloader support files to be stored on a separate partition and filesystem or the root filesystem itself; the later requires that GRUB can access the root filesystem and read the required files, which may not always be possible (like with root filesystem encryption).

If generating a standalone EFI System Partition, under /boot/efi, a size of 128MB is reasonable, this allows multiple efi files to be stored.

Nota
There is little harm in keeping backups of working efi files, which could still be booted if a new one is installed.

Crea la partizione usando lo strumento di partizionamento preferito. Gli strumenti gdisk (sys-apps/gptfdisk) e parted (sys-block/parted) si adattano perfettamente a questo scopo. Quando si utilizza l'utilità gdisk, assicurarsi di utilizzare il tipo EF00.

Partitioning with fdisk
Nota
As described in Preparing the disks Handbook section, /boot partition is used for ESP, which is formatted as FAT32. Depending on the preferred system configuration, a separate partition for /boot may be desirable, e.g. in the case of filesystem encryption.

If using fdisk to partition the boot partition, start by opening the disk for modification, in this example /dev/sda is used:

root #fdisk /dev/sda
Welcome to fdisk (util-linux 2.38.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

A new partition table can be created using "g":

Command (m for help):g
Created a new GPT disklabel (GUID: 4AB36B49-BAAD-D544-AC45-E3154565018D).

A new partition can be created using "n":

Command (m for help):n
 
Partition number (1-128, default 1): 1
First sector (2048-121012190, default 2048): 
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-121012190, default 121010175): +128M
 
Created a new partition 1 of type 'Linux filesystem' and of size 128 MiB.

Once the partition is created, the ESP and Boot flags must be set, this can be done by setting the partition type to EFI System Partition. This can be accomplished with the t option, to change the partition type, and then selecting 1, which corresponds to the EFI System Partition type:

Command (m for help):t
 
Selected partition 1
Partition type or alias (type L to list all): 1
Changed type of partition 'Linux filesystem' to 'EFI System'.

Finally, the changes can be saved by running w:

Command (m for help):w
 
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

With the partition created, it must be formatted to use the FAT32 filesystem, this can be done with:

root #mkfs.fat -F 32 -n efi-boot /dev/sda1
root #mkdir /boot/efi

To determine the partition uuid, or PARTUUID of the new partition, the following command can be use:

user $lsblk -o name,partuuid
lsblk -o name,partuuid
NAME         PARTUUID
sdd          
└─sd1       20f3d6cc-9781-3640-9232-0f5a8c662a60

To create a fstab entry for this partition:

FILE /etc/fstabAggiungere l'entrata per il mount di /boot/efi
/dev/sda1       /boot/efi       vfat    noauto,noatime  1 2
root #mount /boot/efi
Nota
È utile impostare la variabile GRUB_PLATFORMS in /etc/portage/make.conf. Ciò aiuterà GRUB a determinare quali opzioni utilizzare quando si rileva il target EFI corretto. Per i sistemi UEFI a 32 bit utilizzare efi-32. Per 64 bit usa efi-64.
Importante
Affinché GRUB si installi correttamente, la directory EFI deve essere montata e il modulo kernel efivars deve essere caricato prima che venga eseguito con successo il comando grub-install.

Installing GRUB for EFI

Assicurati che la posizione /boot sia disponibile - se questa utilizza una partizione separata, assicurati che sia montata:

root #mount /boot

Esegui il comando grub-install per copiare tutti i file rilevanti in /boot/grub. Questo dovrebbe installare GRUB in /boot/grub, copia l'immagine principale in /boot/efi/EFI/gentoo/grubx64.efi e chiama efibootmgr per aggiungere una voce di avvio.

root #grub-install --efi-directory=/boot/efi
Installation finished. No error reported.
Importante
Il comando precedente presuppone che una FAT formattata EFI System Partition (ESP) sia montata su /boot/efi. Se l'ESP è montato direttamente su /boot, usa invece --efi-directory=/boot.
Nota
By default, GRUB installs targeting the type of system which the command is executed on. If another system type is used, the --target option can be used to specify it.
Nota
The --removable option can be used to install GRUB to /boot/EFI/BOOT/BOOTX64.EFI, potentially enhancing compatibility, as this location is often checked by default.

BIOS con MBR

Nota
Quando il sistema deve eseguire il dual-boot con un altro sistema operativo (preinstallato), come Microsoft Windows, assicurarsi che il bootloader Linux possa coesistere o eseguire il dual-boot di entrambi i sistemi operativi. Sui PC si consiglia di utilizzare lo stesso metodo di avvio del sistema preinstallato, ad es. quando Windows utilizza il partizionamento MBR legacy, viene avviato anche in modalità "BIOS legacy" (UEFI lo chiama CSM, abbreviazione di Compatibility Support Module, in sostanza un'emulazione del BIOS). Se la modalità viene modificata, ad es. da EFI-CSM (modalità BIOS) a modalità nativa (U)EFI, il sistema preinstallato non sarà sicuramente più avviabile.

Assicurati che la posizione /boot sia disponibile - se questa utilizza una partizione separata, assicurati che sia montata:

root #mount /boot

Esegui il comando grub-install per copiare tutti i file rilevanti in /boot/grub. Nelle piattaforme PC, questo installa inoltre una immagine di avvio nel Master Boot Record (MBR) o nella settore di avvio della partizione. Se tutto va bene, dopo aver eseguito grub-install ci si aspetta un output come quello di seguito:

root #grub-install /dev/sda
Installation finished. No error reported.

grub-install accetta l'opzione --target per impostare l'architettura della CPU e la piattaforma del sistema. Se non specificata, grub-install cercherà di indovinare i valori corretti; su un sistema amd64/x86 userà il codice predefinito i386-pc. grub-install accetta inoltre l'opzione --boot-directory per dire all'installatore GRUB in quale directory dovrebbe cercare i file di avvio. L'impostazione predefinita è l'attuale /boot ma è utile quando si tenta di spostare una partizione di root.

Partizionamento per BIOS con MBR

Assicurati di lasciare abbastanza spazio libero prima della prima partizione. L'avvio della prima partizione nel settore 2048 lascia almeno 1 MiB di spazio su disco per il record di avvio principale. È consigliato (ma non obbligatorio) creare una partizione aggiuntiva per GRUB chiamata partizione di avvio del BIOS. Questa partizione deve solo essere definita, ma non formattata. È necessaria solo se il sistema viene successivamente migrato al layout della partizione GPT. Quando si utilizza MBR, questa non è necessaria.

Se sono state seguite le Istruzioni per l'installazione di Gentoo, questa partizione di boot del BIOS sarà già disponibile.

BIOS con GPT

Attenzione
GPT was not designed for the legacy BIOS, yet with the protective MBR it includes a provision for it. Also, dual-boot with legacy operating systems designed to be booted from MBR, which is the de facto standard on computers with a BIOS, will need to access their partitions through the MBR, which can be accomplished by creating GPT/MBR hybrid partitions. This technique, however, has specific constraints.

On a BIOS system with GPT partitioning, GRUB relies on a partition called "BIOS boot partition". This partition is not formatted with a file system, instead grub-install will copy parts of the boot loader to it. The "BIOS boot partition" is not the same partition as a /boot partition.

Nota
See also What is the BIOS boot partition? in the x86 Handbook.

Se una partizione /boot è necessaria, comincia montando la partizione /boot:

root #mount /boot

Se tutto va bene, dopo aver eseguito il comando grub-install ci si aspetta un output come quello sotto:

root #grub-install /dev/sda
Installation finished. No error reported.

grub-install accetta l'opzione --target per impostare l'architettura della CPU e la piattaforma del sistema. Se non specificata, grub-install cercherà di indovinare i valori corretti; su un sistema amd64/x86 userà il codice predefinito i386-pc. grub-install accetta inoltre l'opzione --boot-directory per dire all'installatore GRUB in quale directory dovrebbe cercare i file di avvio. L'impostazione predefinita è l'attuale /boot ma è utile quando si tenta di spostare una partizione di root.

grub-install also accepts a --boot-directory option to tell the GRUB installer which directory to look in for the boot files. This defaults to the current /boot but is useful when trying to move a root partition.

Dual-boot con Windows

Quando il sistema deve eseguire il dual-boot con Microsoft Windows installato in modalità BIOS, il partizionamento GPT completo e nativo non è possibile. Windows consente l'avvio da una partizione MBR solo in modalità BIOS, che include la modalità di emulazione BIOS di (U)EFI chiamata "CSM". Per Linux invece è ancora possibile utilizzare uno schema di partizionamento GPT anche da modalità BIOS (o EFI-CSM), ma per il dual-boot con Windows questo richiede il partizionamento ibrido: si possono definire fino a quattro partizioni sia nel GPT che nel Tabelle delle partizioni MBR contemporaneamente.

Nota
Tradizionalmente i PC x86 utilizzavano un BIOS come firmware. Dopo il passaggio a (U)EFI sui PC (intorno al 2005) esisteva un'emulazione del BIOS chiamata "Compatibility Support Module" (CSM), i PC erano quindi ancora compatibili con i sistemi operativi esistenti. Sui PC tradizionali, l'EFI-CSM è stato gradualmente eliminato dal 2020. Anche prima del 2020 alcune implementazioni (U)EFI, come i server, mancavano completamente del CSM. La 'modalità legacy BIOS' non è quindi più disponibile sui moderni sistemi UEFI. UEFI nella sua modalità di avvio nativa richiede la GUID Partition Table (GPT), quindi un sistema operativo preinstallato utilizzerà già uno schema di partizionamento GPT.

Un Windows già installato si rifiuterà di avviarsi quando viene modificata la modalità di avvio o lo schema di partizionamento. Inoltre, i vecchi sistemi Windows non supportano affatto GPT (o EFI), richiedendo che sia necessario utilizzare un BIOS o EFI-CSM insieme a un MBR. Se Windows supporta EFI, può essere reinstallato nella modalità UEFI nativa e nello schema di partizionamento GPT, oltre che in Linux; vedere la sezione UEFI con GPT.

Partizionamento ibrido tra GPT e MBR crea sia una tabella delle partizioni GPT valida che una tabella delle partizioni MBR valida contemporaneamente, ma limita il numero totale di partizioni ibride a quattro a causa del limite di quattro partizioni primarie di l'MBR. Poiché l'ESP (la EFI System Partition che contiene i bootloader EFI) occupa una partizione, rimangono solo tre partizioni condivise tra MBR e GPT. Quando viene utilizzata una partizione per Windows e una per Linux, è possibile solo una partizione ibrida aggiuntiva, ad esempio una partizione Linux /boot separata o una partizione dati condivisa tra i due sistemi operativi.

{{Warning|Normalmente, una tabella delle partizioni GPT creerà sempre anche una tabella delle partizioni MBR che contiene solo una partizione che si estende sull'intero disco. Ciò assicurerà che il software precedente non confonda il disco come "vuoto". L'MBR con la sua partizione protettiva è quindi chiamato "MBR protettivo" e fa parte delle specifiche GPT.

Se ci sono due dischi fisici disponibili per il sistema, un'ottima soluzione è fare in modo che un disco utilizzi il GPT e l'altro lo schema di partizionamento MBR. Normalmente, l'installazione di Windows utilizza solo una partizione come 'partizione di sistema' e 'partizione di avvio', denominata 'drive C:'. In modalità BIOS, la partizione iniziale per l'avvio, la 'partizione di sistema', deve essere una partizione MBR. Questo vale per tutte le versioni di Windows da Windows XP e include Windows 10. Da Windows Vista (in realtà Windows XP x64 Edition) il sistema operativo Microsoft supporta l'accesso alle partizioni GPT. La soluzione consiste nel riposizionare la parte 'partizione di sistema' di un'installazione sul disco partizionato MBR e convertire la 'partizione di avvio' (quella che contiene \WINDOWS) in un disco partizionato GPT. Windows può quindi accedere a tutte le partizioni GPT su un disco e continuerà a utilizzare le partizioni MBR (o partizioni ibride) sul disco contenente la 'partizione di sistema'. L'installazione di Windows (contenente \WINDOWS) sarebbe una partizione GPT, anche se avviata in modalità BIOS.

Partizionamento per BIOS con GPT

Quando una tabella delle partizioni GPT è presente nel sistema, una piccola partizione di avvio del BIOS di tipo EF02 (che è diversa dalla EFI System Partition (ESP) che ha tipo EF00) dovrà essere disponibile. 1 MiB sarà sufficiente per funzionare, ma 2-4 MiB è un'opzione più sicura. Questa partizione di avvio del BIOS conterrà la fase 2 del bootloader. Le partizioni di avvio del BIOS non devono essere formattate con un filesystem; il comando grub-install sovrascriverà qualsiasi filesystem esistente con uno dei suoi.

Importante
La partizione di avvio del BIOS non è la stessa partizione che è comunemente montata su /boot. Il /boot e l'avvio del BIOS sono partizioni diverse e dovrebbero essere gestite separatamente. La partizione di avvio del BIOS dovrebbe non essere montata regolarmente sul sistema (cioè, dovrebbe non essere definita in /etc/fstab). La partizione /boot può essere montata regolarmente senza problemi e quindi può essere presente nel file /etc/fstab.

Per impostare una partizione come partizione del BIOS, utilizzare lo strumento da riga di comando parted (sys-block/parted) digitando (cambiare 1 con il numero di la partizione da contrassegnare come partizione di avvio del BIOS!):

(parted)set 1 bios_grub on

Con l'utilità cgdisk di sys-apps/gptfdisk, ciò si ottiene impostando il tipo di partizione su 0xEF02 e assegnandogli un'etichetta di gptbios .

Non è necessaria una partizione di sistema EFI, ma sarebbe opportuno assicurarsi che la partizione di avvio del BIOS sia sufficientemente grande da essere convertita in una, qualora la scheda madre del sistema venga successivamente aggiornata a una scheda UEFI.

Di seguito è riportato l'output della pressione del tasto p utilizzando l'utilità gdisk su un disco partizionato GPT con una partizione di avvio del BIOS [0xEF02] e una partizione EFI [0xEF00]:

root #gdisk /dev/sdc
GPT fdisk (gdisk) version 0.8.1
 
Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present
 
Found valid GPT with protective MBR; using GPT.
 
Command (? for help): p
Disk /dev/sdc: 976773168 sectors, 465.8 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): AA369F4D-37A4-4C0D-A357-DC24B99A6337
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 976773134
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)
 
Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048       828377087   395.0 GiB   8E00  Linux LVM
   2       828377088       891291647   30.0 GiB    0700  Microsoft basic data
   3       891291648       975177727   40.0 GiB    0700  Microsoft basic data
   4       975177728       976754687   770.0 MiB   8300  Linux filesystem
   5       976754688       976756735   1024.0 KiB  EF02  BIOS boot partition
   6       976756736       976773134   8.0 MiB     EF00  EFI System
 
Command (? for help): 
Nota
Non è necessario immettere il prefisso esadecimale 0x per GPT quando si utilizza fdisk.

Utilizzando la stessa configurazione, l'utilità parted fornisce un output con una sintassi leggermente diversa:

root #parted /dev/sdc
GNU Parted 3.0
Using /dev/sdc
(parted) print
...
Sector size (logical/physical): 512B/512B
Partition Table: gpt
  
Number  Start   End    Size    File system  Name                  Flags
 1      1049kB  424GB  424GB                Linux LVM             lvm
 2      424GB   456GB  32.2GB               Microsoft basic data
 3      456GB   499GB  42.9GB               Microsoft basic data
 4      499GB   500GB  807MB   ext2         Linux filesystem
 5      500GB   500GB  1049kB               BIOS boot partition   bios_grub
 6      500GB   500GB  8396kB               EFI System            boot
  
(parted)

La creazione di partizioni in gdisk è semplice per gli utenti che hanno familiarità con l'utilità di partizionamento fdisk. Dopo aver avviato gdisk, digita n (sta per new) nel menu principale, fornisci i settori di inizio e fine (se necessario) e imposta il tipo di partizione su EF00 per una partizione di sistema EFI.

Gli utenti che hanno seguito le Istruzioni per l'installazione di Gentoo avranno già impostato il layout di partizionamento corretto.

Open Firmware (IEEE 1275) su PowerPC

Vedere qua.

Install on encrypted partition

If the whole disk is encrypted, including /boot, extra steps need to be taken, to allow GRUB to decrypt and mount the device.

The device-mapper USE flag needs to be set when emerging thee GRUB package. Then the sys-fs/cryptsetup package needs to be installed. The partition needs to be encrypted as luks1 partition type.

After installing GRUB on the device, depending on the way the kernel is setup, initramfs might need to be modified in order for the system to boot completely. If a distribution kernel is installed, Dracut will be installed on the system as well and can be used to finish the configuration.

Configurazione

Ci sono due importanti aspetti della configurazione di GRUB:

File di configurazione principale

Lo script grub-mkconfig viene utilizzato per generare una configurazione di grub. Utilizza gli script in /etc/grub.d/* insieme al file di configurazione /etc/default/grub per generare il /boot/grub/grub.cfg finale - l'unico file di configurazione utilizzato da GRUB2 stesso.

File Formato Modifiche consigliate? Descrizione
/usr/sbin/grub-mkconfig POSIX shell script No Installato come parte del pacchetto sys-boot/grub:2. Esegui questo script per generare /boot/grub/grub.cfg dopo aver configurato i file descritti di seguito.
/boot/grub/grub.cfg GRUB2 shell script No Il file generato da grub-mkconfig. Questo file viene valutato dall'interprete di script integrato di GRUB2 e non supporta necessariamente tutti i comandi o la sintassi POSIX. Vedere la scripting reference nel manuale di GRUB per le funzionalità supportate. Tieni presente che le modifiche a questo file non verranno mantenute fino alla prossima esecuzione di grub-mkconfig.
/etc/grub.d/* POSIX shell scripts Forse Ogni script in /etc/grub.d/* che ha il suo bit di esecuzione impostato viene valutato in sequenza e lo stdout viene concatenato per formare il /boot/grub/grub.cfg finale (o qualunque file sia dato all'opzione grub-mkconfig -o). Questi script utilizzano la shell di sistema corrente e quindi possono utilizzare qualsiasi sintassi supportata. Idealmente dovrebbero essere script compatibili con POSIX e lo script di output deve essere compatibile con l'interprete GRUB2. Potrebbe essere necessario disabilitare o aggiungere script. Ad esempio, per aggiungere voci di menu che non possono essere generate automaticamente.
/boot/grub/custom.cfg GRUB2 shell script Forse Lo script /etc/grub.d/41_custom farà riferimento a questo file per essere letto all'avvio, se esiste. Questo file fornisce uno spazio per aggiungere voci o comandi aggiuntivi e non richiede la rigenerazione del file grub.cfg principale.
/etc/default/grub POSIX shell script Yes Nella maggior parte dei casi questo è l'unico file che deve essere modificato direttamente. Viene principalmente utilizzato per assegnare le variabili utilizzate dagli script in /etc/grub.d per generare un file di configurazione funzionante. Vedere variabile di configurazione GRUB o il riferimento ufficiale per le variabili supportate.

| /usr/sbin/grub-mkconfig || POSIX shell script || style="background-color: #F2DEDE; color: black; vertical-align: middle; text-align: left; " class="cell-no" | No || Installed as part of the sys-boot/grub:2 package. Run this script to generate /boot/grub/grub.cfg after configuring the files described below. |-

| /boot/grub/grub.cfg || GRUB shell script || style="background-color: #F2DEDE; color: black; vertical-align: middle; text-align: left; " class="cell-no" | No || The file generated by grub-mkconfig. This file is evaluated by GRUB's built-in script interpreter and doesn't necessarily support all POSIX commands or syntax. See the scripting reference in the GRUB manual for supported features. Be aware that modifications to this file won't persist to the next time grub-mkconfig is run. |-

| /etc/grub.d/* || POSIX shell scripts || style="background: #FFB; color: black; vertical-align: middle; text-align: left; " class="cell-partial" | Maybe || Each script under /etc/grub.d/* that has its execute bit set is evaluated in sequence, and the stdout is concatenated to form the final /boot/grub/grub.cfg (or whatever file is given to the grub-mkconfig -o option). These scripts use the current system shell and therefore can use any supported syntax. Ideally they should be POSIX-compatible scripts, and the output script must be compatible with the GRUB interpreter. It may be necessary to disable or add scripts. For instance, to add menu items that couldn't be automatically generated. |-

| /boot/grub/custom.cfg || GRUB shell script || style="background: #FFB; color: black; vertical-align: middle; text-align: left; " class="cell-partial" | Maybe || The /etc/grub.d/41_custom script will reference this file to be read in at boot time if it exists. This file provides a place to add additional entries or commands and does not require regeneration of the main grub.cfg file. |-

| /etc/default/grub || POSIX shell script || style="background-color: #DFF0D8; color: black; vertical-align: middle; text-align: left; " class="cell-yes" | Yes || In most cases this is the only file that should be modified directly. It is mainly used to assign variables used by the scripts in /etc/grub.d to generate a working configuration file. See GRUB configuration variables or the official reference for supported variables. |-

|}

GRUB non richiede che l'amministratore mantenga manualmente una configurazione dell'opzione di avvio (come nel caso dei boot loader come GRUB Legacy e LILO). Invece può generare il suo file di configurazione (/boot/grub/grub.cfg) usando il comando grub-mkconfig. Questa utility utilizzerà gli script in /etc/grub.d/ e le impostazioni in /etc/default/grub.

Attenzione
L'utilità grub-mkconfig non funziona correttamente quando si usano software RAID. La configurazione manuale degli script /etc/grub.d/ è necessaria, altrimenti dopo l'installazione il sistema verrà lasciato in uno stato non avviabile.

Dopo la modifica di una o più impostazioni, esegui l'utilità grub-mkconfig con l'opzione -o che punta al file output /boot/grub/grub.cfg (questa è la destinazione predefinita di output in GRUB2):

root #grub-mkconfig -o /boot/grub/grub.cfg
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-3.3.0-gentoo
done

Ogni volta che viene chiamata l'utility grub-mkconfig, verrà generata una nuova configurazione.

Attenzione
Se grub-mkconfig non riporta alcuna voce trovata allora i non è stata trovata alcuna voce. In questo caso GRUB non offrirà selezioni di avvio al riavvio del sistema, il che potrebbe essere una situazione difficile e che richiede tempo da risolvere. Assicurarsi che l'output sia soddisfacente prima di riavviare il sistema.

Impostazione dei parametri di configurazione

Le seguenti variabili in /etc/default/grub sono le più comuni da impostare per controllare come funzionerà GRUB:

Variabile Spiegazione Valore predefinito
GRUB_DEFAULT Definisce la voce di menu predefinita selezionata all'avvio. Può essere un indice numerico, un titolo di menu o "saved" (salvato). L'impostazione predefinita è la prima voce rilevata.
GRUB_TIMEOUT Ritardo (in secondi) prima dell'avvio della voce di menu predefinita. Imposta su 0 per avviare immediatamente o su -1 per attendere indefinitamente. L'impostazione predefinita è 5 secondi.
GRUB_CMDLINE_LINUX Parametri da passare sulla riga di comando del kernel per tutte le voci del menu Linux. Ad esempio, per supportare l'ibernazione, gli utenti dovranno aggiungere GRUB_CMDLINE_LINUX="resume=/dev/sdXY" con /dev/sdXY come partizione di swap.
GRUB_CMDLINE_LINUX_DEFAULT Parametri da passare sulla riga di comando del kernel per le voci del menu Linux senza ripristino.
GRUB_DEVICE Il dispositivo root iniziale (cioè il parametro root= del kernel). Impostalo per sovrascrivere il rilevamento automatico del dispositivo root del comando grub-mkconfig. Ad esempio, GRUB_DEVICE=/dev/ram0 forzerà l'utilizzo di root=/dev/ram0 nella riga di comando del kernel.

| GRUB_DEFAULT | Defines the default menu entry selected on boot. May be a numeric index, a menu title, or "saved". | Defaults to first detected entry. |-

| GRUB_TIMEOUT | Delay (in seconds) before booting default menu entry. Set to 0 to boot immediately or -1 to wait indefinitely. | The default is 5 seconds. |-

| GRUB_CMDLINE_LINUX | Parameters to be passed on the kernel command line for all Linux menu entries. For instance, to support hibernation, users will need to add GRUB_CMDLINE_LINUX="resume=/dev/sdXY" with /dev/sdXY being the swap partition. | |-

| GRUB_CMDLINE_LINUX_DEFAULT | Parameters to be passed on the kernel command line for non-recovery Linux menu entries. | |-

| GRUB_DEVICE | The initial root device (i.e. the kernel's root= parameter). Set this to override the grub-mkconfig command's root device auto-detection. For example, GRUB_DEVICE=/dev/ram0 will force root=/dev/ram0 to be used in the kernel command line. | |-

|}

Per una più completa lista, riferirsi alla sotto pagina variabili di configurazione e alla pagina info di grub-mkconfig.

Dopo la modifica dei parametri, rigenerare il file di configurazione di GRUB2 con grub-mkconfig.

Abilitare o disabilitare gli script di configurazione

La directory /etc/grub.d/ contiene gli script che grub-mkconfig utilizza per generare un file grub.cfg. Per impostazione predefinita, il contenuto di questa directory dovrebbe essere simile al seguente:

user $ls /etc/grub.d/
00_header  10_linux  20_linux_xen  30_os-prober  40_custom  41_custom README

GRUB utilizzerà tutti gli script installati contrassegnati come eseguibili (che per impostazione predefinita lo sono tutti). Per disabilitare uno degli script è sufficiente rimuovere il bit eseguibile dai permessi del file dello script utilizzando il comando chmod. Nell'esempio seguente tutti gli script tranne 00_header e 10_linux sono disabilitati:

root #chmod -x /etc/grub.d/{20_linux_xen,30_os-prober,40_custom,41_custom}

Dopo aver modificato gli script (o rimosso il bit eseguibile), rigenerare il file di configurazione utilizzando grub-mkconfig.

Manipolare gli script di configurazione

Alcune caratteristiche o funzionalità possono essere sfruttate solo modificando gli script di configurazione. Ad esempio, per supportare il dual-boot con FreeBSD, è necessario eseguire la seguente manipolazione.

Cambiare lo script /etc/grub.d/40_custom in:

FILE /etc/grub.d/40_customAggiungere una voce per il dual booting
menuentry "FreeBSD" --class freebsd --class bsd --class os {
 insmod ufs2
 insmod bsd
 set root=(hd0,1)
 kfreebsd /boot/kernel/kernel
 kfreebsd_loadenv /boot/device.hints
 set kFreeBSD.vfs.root.mountfrom=ufs:/dev/ada0s1a
 set kFreeBSD.vfs.root.mountfrom.options=rw
 set kFreeBSD.hw.psm.synaptics_support=1
}

/dev/sda1 o (hd0,1) è la partizione dove FreeBSD risiede. Se la normale installazione UFS è stata utilizzata per la partizione FreeBSD allora /dev/sda1 è un contenitore (qualcosa come una partizione logica). Esso consiste in una partizione swap e una partizione di root. Verificare che lo script 40_custom sia eseguibile eseguendo ls -la /etc/grub.d/40_custom. Se il bit eseguibile non è impostato, impostalo utilizzando il comando chmod u+x 40_custom.

Nota
Gli utenti che hanno familiarità con il modo in cui le partizioni numerate di GRUB Legacy dovrebbero annotare le partizioni che iniziano da 1, non da 0, con GRUB2.

Quindi installa GRUB e aggiorna il file di configurazione:

root #grub-install /dev/sda
root #grub-mkconfig -o /boot/grub/grub.cfg

Funzionalità estese

GRUB 2 ha molte caratteristiche che lo rendono un boot loader molto potente. Supporta:

  • Avvio da piattaforme UEFI.
  • Avvio da unità partizionate GPT senza bisogno di un MBR ibrido (l'MBR ibrido può essere abilitato secondo necessità per compatibilità o portabilità).
  • Avvio da una partizione /boot formattata btrfs.
  • Avvio da un pool ZFS.
  • Avvio diretto da un set raid btrfs senza bisogno di un initramfs per il montaggio anticipata.
  • Avvio diretto dalla gestione del volume logico (come LVM2).
  • Avvio con supporto per DM-RAID (RAID 0, 1, 4, 5, 6, 9 e 10).
  • Avvio da dispositivi crittografati (LUKS).

Alcune caratteristiche specifiche sono spiegate più dettagliatamente di seguito.

Caricamento a catena

GRUB 2 è stato realizzato con una modalità chainload davvero migliorata rispetto a GRUB Legacy. Per caricare in catena un altro boot loader, usa l'opzione chainloader.

FILE /etc/grub.d/40_customCaricamento a catena di un altro bootloader
menuentry "Custom Super-bootloader example" {
     insmod part_msdos
     insmod chain
     chainloader (hd1,1)+1
}

Per ulteriori informazioni sul caricamento a catena, consultare la sotto-pagina Chainloading

Protezione con password del menu di GRUB

Se vuoi proteggere GRUB in modo che nessuno possa modificare i parametri di avvio o utilizzare la riga di comando, puoi aggiungere una combinazione utente/password ai file di configurazione di GRUB. Il programma grub-mkpasswd-pbkdf2 genera hash password per GRUBː

user $grub-mkpasswd-pbkdf2
Password:
Reenter password:
</div>

PBKDF2 hash of your password is grub.pbkdf2.sha512.10000.9CA4611006FE96BC77A...

Quindi, aggiungi quanto segue aː

FILE /etc/grub.d/35_auth:
# Grub user
echo 'set superusers="username"'
# Grub password
echo 'password_pbkdf2 <username> <password>'

The above may lock all Grub menu entries, even the default entry. In that case, to allow users to boot some menu entries without a password, see Securing the grub boot loader.

The permissions for the file need to be properly set before doing grub-mkconfig:

root #chmod 755 /etc/grub.d/35_auth

Utilizzo della visualizzazione framebuffer

Per fare in modo che GRUB utilizzi un display grafico framebuffer, reinstallare GRUB con il flag USE truetype abilitato. Verrà installato un carattere True Type predefinito e un'utilità di conversione dei caratteri.

root #emerge --ask --newuse sys-boot/grub:2

Procedi con la configurazione del file di configurazione predefinito che si trova in /etc/default/grub. Per esempio:

FILE /etc/default/grubImpostazioni relative al framebuffer
# Imposta risoluzione e profondità del colore
GRUB_GFXMODE=1366x768x32
 
# Mantieni la risoluzione durante il caricamento del kernel
GRUB_GFXPAYLOAD_LINUX=keep
  
# Imposta un'immagine di sfondo
GRUB_BACKGROUND="/boot/grub/bg.png"
 
# Usa un font personalizzato, convertito usando l'utility grub-mkfont
GRUB_FONT="/boot/grub/fonts/roboto.pf2"
 
# Imposta i colori del menu 
GRUB_COLOR_NORMAL="light-blue/black"
GRUB_COLOR_HIGHLIGHT="light-cyan/blue"

HiDPI displays

On modern displays with high DPI ("HiDPI"), e.g. UHD (3840x2160), the standard font will look very small. If you like to have the same font as the kernel, Terminus can be used, which resembles a BIOS built-in textmode font.

To select this font in-kernel, CONFIG_FONT_TER16x32 has to be enabled.

KERNEL Kernel compiled-in fonts
Library routines  --->
      [*] Select compiled-in fonts
      [*] Terminus 16x32 font (not supported by all drivers)

The same font is available as media-fonts/terminus-font, which can then be used for GRUB as well.

root #emerge --ask media-fonts/terminus-font
root #grub-mkfont -s 32 -o /boot/grub/fonts/terminus32b.pf2 /usr/share/fonts/terminus/ter-u32b.otb

In the above example the filename chosen for grub-mkfont output is terminus32b.pf2. The font's path has to be accessible to GRUB during boot, so it should reside in the same mount point as GRUB does; this example uses /boot/grub/fonts. The font then has to be set as GRUB_FONT in /etc/default/grub in order to be used.

FILE /etc/default/grubFramebuffer related settings
# Use a custom font, converted using grub-mkfont utility
GRUB_FONT="/boot/grub/fonts/terminus32b.pf2"

Updating the GRUB configuration file grub.cfg will then activate the configuration with the new font.

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

Risoluzione dei problemi

Nota
Per ulteriori informazioni sulla risoluzione dei problemi, fare riferimento al sottoarticolo Risoluzione dei problemi.

La maggior parte dei problemi può essere risolta assicurandosi che il layout della partizione sia corretto. Assicurati che sia disponibile spazio sufficiente prima della prima partizione del disco o, facoltativamente, assicurati che sia disponibile una partizione di avvio del BIOS. Verifica anche che /boot/grub/grub.cfg sia stato generato correttamente con grub-mkconfig o generane uno con una voce di menu personalizzata.

os-prober non funziona

Quando si esegue il comando grub-mkconfig, os-prober non funziona come previsto, anche se è installato:

root #grub-mkconfig -o /boot/grub/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-5.11.14-gentoo-x86_64
Found initrd image: /boot/amd-uc.img /boot/initramfs-5.11.14-gentoo-x86_64.img
Warning: os-prober will not be executed to detect other bootable partitions.
Systems on them will not be added to the GRUB boot configuration.
Check GRUB_DISABLE_OS_PROBER documentation entry.
Adding boot menu entry for UEFI Firmware Settings ...
done

Questo può essere corretto impostando la variabile GRUB_DISABLE_OS_PROBER su false nel file /etc/default/grub.

FILE /etc/default/grub
GRUB_DISABLE_OS_PROBER=false

Alla prossima esecuzione, grub-mkconfig dovrebbe trovare partizioni avviabili aggiuntive:

root #grub-mkconfig -o /boot/grub/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-5.11.14-gentoo-x86_64
Found initrd image: /boot/amd-uc.img /boot/initramfs-5.11.14-gentoo-x86_64.img
Warning: os-prober will be executed to detect other bootable partitions.
It's output will be used to detect bootable binaries on them and create new boot entries.
Found Windows Boot Manager on /dev/nvme0n1p2@/efi/Microsoft/Boot/bootmgfw.efi
Adding boot menu entry for UEFI Firmware Settings ...
done

Il firmware della scheda madre non trova il file .EFI

Alcuni produttori di schede madri sembrano supportare solo una posizione per il file .EFI nella partizione di sistema EFI (ESP). Se questo sembra essere il caso, sposta semplicemente il file predefinito di GRUB nella posizione /efi/boot/. Innanzitutto, assicurati che l'ESP sia montato. Supponendo che l'ESP sia montato su /boot/efi (come suggerito nel Handbook), eseguire:

root #mkdir -p /boot/efi/efi/boot
root #cp /boot/efi/efi/gentoo/grubx64.efi /boot/efi/efi/boot/bootx64.efi

On a 32-bit EFI implementation use bootia32.efi instead:

root #cp /boot/efi/efi/gentoo/grubia32.efi /boot/efi/efi/boot/bootia32.efi

Puoi anche utilizzare il parametro rimovibile con il comando grub-install per generare automaticamente questo file:

root #grub-install --efi-directory=/boot/efi --removable
Installation finished. No error reported.
root #grub-install --efi-directory=/boot/efi --removable
Installation finished. No error reported.

Questo dovrebbe aiutare il firmware della scheda madre a caricare l'eseguibile di GRUB. Riavvia il sistema per vedere se il firmware ora carica correttamente GRUB.

os-prober e UEFI in chroot

L'utilità sys-boot/os-prober viene utilizzata per rilevare installazioni alternative, come Microsoft Windows. Per funzionare correttamente, deve avere accesso alle informazioni dall'udev dell'ambiente live per testare la partizione di sistema EFI.

Esegui questi comandi nell'ambiente host per fornire i file richiesti (l'esempio mostra Gentoo montato su /mnt/gentoo come nel Manuale):

root #mkdir -p /mnt/gentoo/run/udev
root #mount -o bind /run/udev /mnt/gentoo/run/udev
root #mount --make-rslave /mnt/gentoo/run/udev

Installazione di un nuovo kernel

Ogni volta che viene installato un nuovo kernel, GRUB deve essere riconfigurato per riconoscerlo. Questo può essere fatto usando grub-mkconfig, come mostrato di seguito, o può essere fatto manualmente.

Nota
Assicurati che la partizione /boot sia montata per questo passaggio.
root #grub-mkconfig -o /boot/grub/grub.cfg
Generating grub.cfg ...
Found linux image: /boot/kernel-3.3.8-gentoo
Found initrd image: /boot/initramfs-genkernel-x86_64-3.3.8-gentoo
Found linux image: /boot/kernel-3.2.12-gentoo
Found initrd image: /boot/initramfs-genkernel-x86_64-3.2.12-gentoo
done

Nota che GRUB deve solo essere riconfigurato, non "reinstallato" nel Master Boot Record (MBR) dell'unità di avvio. D'altra parte, quando GRUB stesso è stato aggiornato, deve essere reinstallato sull'unità di avvio, ma di solito non ha bisogno di essere riconfigurato.

Automatic GRUB reconfiguration

If the package sys-kernel/installkernel-gentoo is installed and the USE flag grub is set, then on every installation of a kernel, grub-mkconfig will run automatically.

Vedere anche

  • In Chainloading è descritto l'uso di GRUB2 per avviare altri boot loader. Questo è importante da leggere quando si avviano i sistemi a doppio avvio o quando GRUB2 deve essere configurato per avviare i file ISO.
  • In Archiviazione avanzata sono documentati i passaggi necessari su come installare e utilizzare GRUB su situazioni di archiviazione più avanzate, come software RAID, volumi logici o file system crittografati.
  • In Configuration variable è documentato un elenco completo delle variabili di configurazione di GRUB, come usato da /etc/default/grub.
  • In Risoluzione dei problemi viene presentato un elenco di errori GRUB comuni (con le relative soluzioni).
  • In Hybrid partition table è documentato l'uso di una configurazione mista MBR/GPT, nonché come utilizzare tale layout di partizione ibrida con GRUB.

Risorse esterne

Per ulteriori informazioni, vedere:

References