Difference between revisions of "GRUB (Italiano)"

From ArchWiki
Jump to: navigation, search
m (Sistemi UEFI)
m (Installazione nella regione di 440 byte del MBR)
(38 intermediate revisions by 3 users not shown)
Line 14: Line 14:
 
{{Article summary text|{{Boot process overview (Italiano)}}}}
 
{{Article summary text|{{Boot process overview (Italiano)}}}}
 
{{Article summary heading|Articoli correlati}}
 
{{Article summary heading|Articoli correlati}}
{{Article summary wiki|Burg (Italiano)}} - Burg è un boot loader di nuova concezione basato su GRUB2. Il suo un nuovo formato ad oggetti gli consente di essere compilato per numerosi sistemi operativi, tra i quali Linux, Windows, OSX, Solaris, FreeBSD eccetera. Dispone inoltre di un sistema di menù altamente configurabili che funzionano sia in modalità grafica che testuale
+
{{Article summary wiki|Burg (Italiano)}} - Burg è un boot loader di nuova concezione basato su GRUB2. Può essere compilato su una vasta gamma di sistemi operativi e dispone di un sistema di menù altamente configurabili che funzionano sia in modalità grafica che testuale
 +
{{Article summary wiki|GRUB Legacy (Italiano)|GRUB Legacy}} - La versione precedente, deprecata.
 
{{Article summary heading|Risorse}}
 
{{Article summary heading|Risorse}}
{{Article summary wiki|GRUB_EFI_Examples}}
+
{{Article summary wiki|GRUB EFI Examples}}
 
{{Article summary link|GNU GRUB -- GNU Project|http://www.gnu.org/software/grub/}}
 
{{Article summary link|GNU GRUB -- GNU Project|http://www.gnu.org/software/grub/}}
 
{{Article summary end}}
 
{{Article summary end}}
Line 29: Line 30:
  
 
* Il nome ''GRUB'' si riferisce ufficialmente alla versione 2 del software (si veda [http://www.gnu.org/software/grub/]). Se si sta cercando l'articolo relativo alla versione Legacy, si veda [[GRUB Legacy (Italiano)|GRUB Legacy]].
 
* Il nome ''GRUB'' si riferisce ufficialmente alla versione 2 del software (si veda [http://www.gnu.org/software/grub/]). Se si sta cercando l'articolo relativo alla versione Legacy, si veda [[GRUB Legacy (Italiano)|GRUB Legacy]].
 
* [[GRUB Legacy (Italiano)|GRUB Legacy]] (versioni 0.9x) è considerato deprecato in upstream e sta venendo sostituito da GRUB2 e [[Syslinux|Syslinux]] in molte distribuzioni. Upstream raccomanda l'installazione di GRUB2 >= 1.99 anche per gli utenti del vecchio GRUB Legacy.
 
 
* Gli script di installazione dell'ISO [[Archboot]] supportano l'installazione di {{Pkg|grub-bios}} e {{Pkg|grub-efi-x86_64}}.
 
  
 
* Dalla versione 1.99-6 in poi, è supportato l'uso del filesystem [[Btrfs|Btrfs]] per la root (eliminando quindi la necessità di una partizione /boot separata con un filesystem diverso). Sono inoltre supportati gli algoritmi di compressione zlib o LZO.
 
* Dalla versione 1.99-6 in poi, è supportato l'uso del filesystem [[Btrfs|Btrfs]] per la root (eliminando quindi la necessità di una partizione /boot separata con un filesystem diverso). Sono inoltre supportati gli algoritmi di compressione zlib o LZO.
  
* Per ulteriori informazioni su GRUB2 UEFI, è consigliabile leggere le pagine [[UEFI|UEFI]], [[GPT|GPT]] e [[UEFI_Bootloaders|UEFI_Bootloaders]] prima di leggere questa pagina.
+
* Per ulteriori informazioni su GRUB2 UEFI, è consigliabile leggere le pagine [[Unified Extensible Firmware Interface (Italiano)|UEFI]], [[GUID Partition Table|GPT]] e [[UEFI Bootloaders|UEFI Bootloaders]] prima di leggere questa pagina.
  
 
===Note per gli utenti di GRUB===
 
===Note per gli utenti di GRUB===
 
* Benchè GRUB Legacy non verrà rimosso dal sistema e rimarrà perfettamente funzionante, è consigliabile effettuare l'aggiornamento alla versione 2.x di GRUB, oppure utilizzare un altro bootloader tra quelli supportati.
 
  
 
* Aggiornare [[GRUB Legacy (Italiano)|GRUB Legacy]] a [[GRUB2 (Italiano)|GRUB]](2) è un procedimento molto simile ad un installazione ex-novo di GRUB2, argomento trattato [[GRUB2 (Italiano)#Installazione | qui]].
 
* Aggiornare [[GRUB Legacy (Italiano)|GRUB Legacy]] a [[GRUB2 (Italiano)|GRUB]](2) è un procedimento molto simile ad un installazione ex-novo di GRUB2, argomento trattato [[GRUB2 (Italiano)#Installazione | qui]].
Line 52: Line 47:
 
====Sistemi BIOS====
 
====Sistemi BIOS====
  
=====Istruzioni specifiche per [[GPT]]=====
+
=====Istruzioni specifiche per [[GUID Partition Table]] (GPT)=====
  
 
Nelle accoppiate BIOS-GPT, GRUB2 richiede una [http://www.gnu.org/software/grub/manual/html_node/BIOS-installation.html#BIOS-installation partizione di boot] in cui posizionare il suo {{ic|core.img}}, a causa della mancanza del gap di 31KiB dopo il MBR nei sistemi che usano il metodo di partizionamento GPT (al suo posto si ha il GPT Primary Header e la Primary Partition Table).
 
Nelle accoppiate BIOS-GPT, GRUB2 richiede una [http://www.gnu.org/software/grub/manual/html_node/BIOS-installation.html#BIOS-installation partizione di boot] in cui posizionare il suo {{ic|core.img}}, a causa della mancanza del gap di 31KiB dopo il MBR nei sistemi che usano il metodo di partizionamento GPT (al suo posto si ha il GPT Primary Header e la Primary Partition Table).
Line 59: Line 54:
 
Per le configurazioni BIOS-GPT, si crei una partizione da circa 2MiB usando cgdisk o GNU Parted senza assegnarle un filesystem. La posizione della partizione non è importante, ma è consigliabile inserirla nei pressi dell'inizio del disco, e comunque prima della partizione di {{ic|/boot}}. Si assegni alla partizione il tipo {{ic|EF02}} se si sta usando cgdisk, mentre {{ic|<BOOT_PART_NUM> bios_grub}} se si usa GParted.
 
Per le configurazioni BIOS-GPT, si crei una partizione da circa 2MiB usando cgdisk o GNU Parted senza assegnarle un filesystem. La posizione della partizione non è importante, ma è consigliabile inserirla nei pressi dell'inizio del disco, e comunque prima della partizione di {{ic|/boot}}. Si assegni alla partizione il tipo {{ic|EF02}} se si sta usando cgdisk, mentre {{ic|<BOOT_PART_NUM> bios_grub}} se si usa GParted.
  
{{Nota|È necessario creare la partizione in oggetto prima di eseguire il comando {{ic|grub-install}} o {{ic|grub-setup}}, oppure prima dell'installazione del bootloader durante l'installazione di Arch Linux (se si è scelto GRUB2 come bootloader)}}
+
{{Nota|È necessario creare la partizione in oggetto prima di eseguire il comando {{ic|grub-install}} o {{ic|grub-setup}}.}}
  
=====Istruzioni specifiche per [[Master Boot Record (Italiano)|MBR]] (msdos)=====
+
{{Nota|{{ic|gdisk}} permetterà di creare la partizione in oggetto in modo da ridurre al minimo gli sprechi di spazio (settori 34-2047), dal momento che {{ic|gdisk}} allinea automaticamente le partizioni ai settori multipli di 2048.}}
 +
 
 +
=====Istruzioni specifiche per [[Master Boot Record (Italiano)|Master Boot Record]] (MBR)=====
 
Solitamente, il gap dopo il MBR (dopo i 512 byte ad esso dedicati, e prima dell'inizio della prima partizione), è di  31 KiB, quando eventuali problemi di allineamento dei cilindri sono risolti nella tabella partizioni. Tuttavia, è consigliato mantenere un gap di circa 1 MiB per fornire sufficiente spazio al {{ic|core.img}} di GRUB2. ({{bug|24103}}). È consigliabile usare un tool di partizionamento che supporti l'allineamento partizioni di 1 MiB dopo l'MBR per ottenere lo spazio necessario, e risolvere di conseguenza altri problemi, comunque non relativi all'embedding di {{ic|core.img}}.
 
Solitamente, il gap dopo il MBR (dopo i 512 byte ad esso dedicati, e prima dell'inizio della prima partizione), è di  31 KiB, quando eventuali problemi di allineamento dei cilindri sono risolti nella tabella partizioni. Tuttavia, è consigliato mantenere un gap di circa 1 MiB per fornire sufficiente spazio al {{ic|core.img}} di GRUB2. ({{bug|24103}}). È consigliabile usare un tool di partizionamento che supporti l'allineamento partizioni di 1 MiB dopo l'MBR per ottenere lo spazio necessario, e risolvere di conseguenza altri problemi, comunque non relativi all'embedding di {{ic|core.img}}.
  
Se non si ha nessuna versione di MS Windows installata, e di conseguenza non si è in una configurazione dual-boot, è consigliabile passare allo schema di partizionamento GPT [[GUID_Partition_Table#Convert_from_MBR_to_GPT]].
+
Se effettua il dual-boot con altri sistemi operativi Windows (fino a Windows 7) o con Haiku è consigliabile utilizzare il sistema di partizionamento MBR poichè su questi sistemi dispone di un supporto migliore rispetto a GPT.
  
{{Nota|Si crei la partizione da 2MiB sopra menzionata PRIMA di convertire lo schema di partizionamento a GPT. Se non si effettua questa operazione, gparted non ridimensionerà la partizione di boot per consentirne la creazione, e quando si riavvierà il sistema, GRUB2 non saprà dove cercarla.}}
+
È possibile convertire un disco MBR al sistema di partizionamento GPT se è disponibile un pò di spazio libero. Si veda a tal proposito [[GUID Partition Table#Convert from MBR to GPT]]
  
 
====Sistemi UEFI====
 
====Sistemi UEFI====
Line 72: Line 69:
 
=====Prefazione=====
 
=====Prefazione=====
  
{{Nota|Per ulteriori informazioni su GRUB2 UEFI, è consigliabile leggere le pagine [[UEFI|UEFI]], [[GPT|GPT]] e [[UEFI_Bootloaders|UEFI_Bootloaders]] prima di proseguire con questo articolo.}}
+
{{Nota|Per ulteriori informazioni su GRUB2 UEFI, è consigliabile leggere le pagine [[Unified Extensible Firmware Interface (Italiano)|UEFI]], [[GPT|GPT]] e [[UEFI_Bootloaders|UEFI_Bootloaders]] prima di proseguire con questo articolo.}}
  
 
=====Creazione e montaggio della partizione UEFI di sistema=====
 
=====Creazione e montaggio della partizione UEFI di sistema=====
  
Si seguano le istruzioni di creazione in [[Unified Extensible Firmware Interface#UEFI_System_Partition|Creare una partizione UEFI di sistema]]. Si proceda quindi al montaggio della partizione in {{ic|/boot/efi}}. Se si è montata tale partizione in qualche altro punto di mount, si sostituisca di conseguenza {{ic|/boot/efi}} nei comandi sottostanti.
+
Si seguano le istruzioni di creazione in [[Unified Extensible Firmware Interface (Italiano)#Creare una partizione di_sistema UEFI con Linux|Creare una partizione UEFI di sistema]]. Si proceda quindi al montaggio della partizione in {{ic|/boot/efi}}. Se si è montata tale partizione in qualche altro punto di mount, si sostituisca di conseguenza {{ic|/boot/efi}} nei comandi sottostanti.
  
 
{{bc|
 
{{bc|
Line 113: Line 110:
 
Ci sono tre modi per installare i files di boot di GRUB2 su sistemi BIOS
 
Ci sono tre modi per installare i files di boot di GRUB2 su sistemi BIOS
  
 +
* [[#Installazione nella partizione di boot BIOS con schema di partizionamento GPT]]
 
* [[#Installazione nella regione di 440 byte del MBR]] (consigliata)
 
* [[#Installazione nella regione di 440 byte del MBR]] (consigliata)
 
* [[#Installazione su una partizione o su un disco partitionless]] (sconsigliata)
 
* [[#Installazione su una partizione o su un disco partitionless]] (sconsigliata)
 
* [[#Generazione del solo core.img]] (metodo più sicuro, ma richiede un altro bootloader come [[GRUB Legacy (Italiano)|grub-legacy]] o [[syslinux]], che effettui il chainload di {{ic|/boot/grub/i386-pc/core.img}}.
 
* [[#Generazione del solo core.img]] (metodo più sicuro, ma richiede un altro bootloader come [[GRUB Legacy (Italiano)|grub-legacy]] o [[syslinux]], che effettui il chainload di {{ic|/boot/grub/i386-pc/core.img}}.
 +
 +
{{Nota|Si consulti http://www.gnu.org/software/grub/manual/html_node/BIOS-installation.html per ulteriori informazioni.}}
  
 
=====Installazione nella regione di 440 byte del MBR=====
 
=====Installazione nella regione di 440 byte del MBR=====
  
Per installare {{ic|grub-bios}} nella regione di 440 byte relativa al boot code, chiamata anche Master Boot Record, popolare la directory {{ic|/boot/grub}}, generare il {{ic|/boot/grub/i386-pc/core.img}}, inserirlo nel gap di 31KiB (la dimensione varia a seconda dell'allineamento delle partizioni) post-MBR o nella partizione di boot del BIOS (GPT), si esegua:
+
Per installare {{ic|grub-bios}} nella regione di 440 byte relativa al boot code, chiamata anche Master Boot Record, popolare la directory {{ic|/boot/grub}}, generare il {{ic|/boot/grub/i386-pc/core.img}}, inserirlo nel gap di 31KiB (la dimensione varia a seconda dell'allineamento delle partizioni) post-MBR o nella partizione di boot del BIOS (GPT) e generare il file di configurazione si esegua:
  
 
  # modprobe dm-mod
 
  # modprobe dm-mod
 +
# grub-install --recheck /dev/sda
 +
# grub-mkconfig -o /boot/grub/grub.cfg
  
# grub-install --target=i386-pc --recheck /dev/sda
+
dove {{ic|/dev/sda}} è la partizione di destinazione (Nel caso di partizionamento MBR, si riferisce al primo disco SATA). Se si usa [[LVM (Italiano)|LVM]] per la partizione di {{ic|/boot}}, è possibile installare GRUB2 su tutti i dischi fisici.
  
# mkdir -p /boot/grub/locale
+
{{Nota|L'opzione {{ic|--no-floppy}} è stata rimossa da {{ic|grub-install}} nella versione 2.00-beta2, ed è stata sostituita con {{ic|--allow-floppy}}.}}
# cp /usr/share/locale/it/LC_MESSAGES/grub.mo /boot/grub/locale/it.mo
+
  
dove {{ic|/dev/sda}} è la partizione di destinazione (Nel caso di partizionamento MBR, si riferisce al primo disco SATA). Se si usa [[LVM (Italiano)|LVM]] per la partizione di {{ic|/boot}}, è possibile installare GRUB2 su tutti i dischi fisici.
+
{{Attenzione|Ci si assicuri di controllare il contenuto della directory {{ic|/boot}} se si usa il secondo comando. Il parametro {{ic|--boot-directory}} può talvolta creare una seconda cartella {{ic|/boot}} dentro a quella già esistente. Un'installazione errata di GRUB, avrà questo aspetto: {{ic|/boot/boot/grub}}}}
  
{{Nota|Se non vengono specificate le opzioni {{ic|--target}} o {{ic|--directory}}, {{ic|grub-install}} non riuscirà a determinare il tipo di firmware sul quale GRUB2 verrà installato, mostrando perciò il seguente messaggio d'errore: {{ic|source_dir doesn't exist. Please specify --target or --directory}}.}}
+
=====Installazione nella partizione di boot BIOS con schema di partizionamento GPT=====
  
{{Nota|Dopo l'esecuzione del comando {{ic|grub-install}}, la directory {{ic|/boot/grub/locale}} potrebbe già essere stata creata, perciò eseguire {{ic|# mkdir -p /boot/grub/locale}} è da considerarsi inutile.}}
+
Il sistema di partizionamento [[GUID Partition Table|GPT]] non prevede una "traccia di boot" riservata e sarà quindi necessario creare una Partizione di Boot BIOS (0xEF02) per contenere l'immagine di GRUB.
  
L'opzione {{ic|--no-floppy}}, dice a {{ic|grub-bios}} di non effettuare la ricerca di dispositivi floppy, il che riduce significativamente il tempo d'esecuzione di {{ic|grub-install}} su molti sistemi, e previene il verificarsi del problema sotto riportato
+
Utilizzando GNU Parted, è possibile assegnare tale tipo ad una partizione utilizzando un comando simile al seguente:
  
{{bc|
+
# parted /dev/disk set partition-number bios_grub on
grub-probe: error: Cannot get the real path of '/dev/fd0'
+
Auto-detection of a filesystem module failed.
+
Please specify the module with the option '--modules' explicitly.
+
}}
+
  
{{Nota|L'opzione {{ic|--no-floppy}} è stata rimossa da {{ic|grub-install}} nella versione 2.00-beta2, ed è stata sostituita con {{ic|--allow-floppy}}.}}
+
Se si sta utilizzando {{ic|gdisk}}, assicurarsi di impostare il tipo della partizione ad '''{{ic|OxEF02}}'''. Quando si partiziona con programmi che richiedano l'impostazione diretta del GUID, quest'ultimo dovrà avere valore {{ic|‘21686148-6449-6e6f-744e656564454649’}} (memorizzato su disco come {{ic|"Hah!IdontNeedEFI"}} se interpretato come ASCII).
  
{{Attenzione|Ci si assicuri di controllare il contenuto della directory {{ic|/boot}} se si usa il secondo comando. Il parametro {{ic|--boot-directory}} può talvolta creare una seconda cartella {{ic|/boot}} dentro a quella già esistente. Un'installazione errata di GRUB, avrà questo aspetto: {{ic|/boot/boot/grub}}}}
+
{{Attenzione|Si faccia molta attenzione durante la scelta di una partizione di boot BIOS: quando GRUB ne trova una durante l'installazione, ne sovrascriverà automaticamente parte del contenuto. Assicurarsi che la partizione non contenga dati importanti prima di procedere.}}
 +
 
 +
Per installare {{ic|grub-bios}} in un disco partizionato in modalità GPT, popolare la directory {{ic|/boot/grub}}, generare il file {{ic|/boot/grub/i386-pc/core.img}} ed effettuarne l'embedding nella partizione di boot BIOS, eseguire:
 +
 
 +
# modprobe dm-mod
 +
# grub-install --target=i386-pc --recheck --debug /dev/sda
 +
# mkdir -p /boot/grub/locale
 +
# cp /usr/share/locale/en\@quot/LC_MESSAGES/grub.mo /boot/grub/locale/en.mo
 +
 
 +
Dove {{ic|/dev/sda}} è il disco di destinazione.
  
 
=====Installazione su una partizione o su un disco partitionless=====
 
=====Installazione su una partizione o su un disco partitionless=====
Line 153: Line 159:
  
 
{{bc|1=
 
{{bc|1=
 +
# grub-install --target=i386-pc --recheck --debug --force /dev/sdaX
 
# chattr -i /boot/grub/i386-pc/core.img
 
# chattr -i /boot/grub/i386-pc/core.img
# grub-install --target=i386-pc --no-floppy --recheck --debug --force /dev/sdaX
 
 
# mkdir -p /boot/grub/locale
 
# mkdir -p /boot/grub/locale
 
# cp /usr/share/locale/it/LC_MESSAGES/grub.mo /boot/grub/locale/it.mo
 
# cp /usr/share/locale/it/LC_MESSAGES/grub.mo /boot/grub/locale/it.mo
Line 253: Line 259:
 
{{Nota|GRUB2 supporta l'avvio diretto di {{ic|bootmgr}} e il chainload del settore di boot non è più richiesto per avviare Windows su configurazioni BIOS-MBR.}}
 
{{Nota|GRUB2 supporta l'avvio diretto di {{ic|bootmgr}} e il chainload del settore di boot non è più richiesto per avviare Windows su configurazioni BIOS-MBR.}}
  
{{Attenzione|Si noti che {{ic|bootmgr}} è contenuto nella partizione con etichetta {{ic|SYSTEM PARTITION}}, non in quella principale che ospita i file di sistema di Windows. È possibile individuarla utilizzando {{ic|blkid}}, inoltre non è più grande di 100MB, similmente alla partizione di boot di Arch. Si consulti http://en.wikipedia.org/wiki/System_partition_and_boot_partition per ulteriori informazioni.}}
+
{{Attenzione|Si noti che {{ic|bootmgr}} è contenuto nella partizione con etichetta {{ic|SYSTEM PARTITION}}, non in quella principale che ospita i file di sistema di Windows (C:). È possibile individuarla utilizzando {{ic|blkid}}, inoltre non è più grande di 100MB, similmente alla partizione di boot di Arch. Si consulti [[wikipedia:System_partition_and_boot_partition]] per ulteriori informazioni.}}
  
Si individui l'UUID della partizione di sistema di windows, dove bootmgr e i suoi files risiedono. Per esempio, se {{ic|bootmgr}} si trova in {{ic|/media/Windows/bootmgr}}:
+
Si individui l'UUID della partizione di sistema di windows, dove bootmgr e i suoi files risiedono. Per esempio, se {{ic|bootmgr}} si trova in {{ic|/media/SYSTEM_RESERVED/bootmgr}}:
  
  # grub-probe --target=fs_uuid /media/Windows/bootmgr
+
Per Windows Vista/7/8:
 +
 
 +
  # grub-probe --target=fs_uuid /media/SYSTEM_RESERVED/bootmgr
 
  69B235F6749E84CE
 
  69B235F6749E84CE
  
Si aggiunga quindi il codice sotto riportato al file {{ic|/etc/grub.d/40-custom}} o {{ic|/boot/grub/custom.cfg}} e si rigeneri il {{ic|grub.cfg}} con {{ic|grub-mkconfig}} come spiegato sopra per effettuare il chainload di Windows installato in modalità BIOS-MBR:
+
# grub-probe --target=hints_string /media/SYSTEM_RESERVED/bootmgr
 +
--hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1
 +
 
 +
{{Nota|{{ic|grub-probe}} deve essere eseguito come utente root.}}
 +
{{Nota|Se si utilizza Windows XP, si sostituisca {{ic|bootmgr}} con {{ic|ntldr}} nei comandi di cui sopra.}}
 +
 
 +
Si aggiunga quindi il codice sotto riportato al file {{ic|/etc/grub.d/40-custom}} o {{ic|/boot/grub/custom.cfg}} e si rigeneri il {{ic|grub.cfg}} con {{ic|grub-mkconfig}} come spiegato sopra per effettuare il chainload di Windows (XP, Vista, 7 o 8) installato in modalità BIOS-MBR:
 +
 
 +
Per Windows Vista/7/8:
  
 
{{bc|1=
 
{{bc|1=
 
#!/bin/sh
 
#!/bin/sh
menuentry "Microsoft Windows 7 BIOS-MBR" {
+
menuentry "Microsoft Windows Vista/7/8 BIOS-MBR" {
 
     insmod part_msdos
 
     insmod part_msdos
 
     insmod ntfs
 
     insmod ntfs
 
     insmod search_fs_uuid
 
     insmod search_fs_uuid
 
     insmod ntldr     
 
     insmod ntldr     
     search --fs-uuid --no-floppy --set=root 69B235F6749E84CE
+
     search --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 69B235F6749E84CE
 
     ntldr /bootmgr
 
     ntldr /bootmgr
 
}
 
}
Line 282: Line 298:
 
     insmod search_fs_uuid
 
     insmod search_fs_uuid
 
     insmod ntldr     
 
     insmod ntldr     
     search --fs-uuid --no-floppy --set=root 69B235F6749E84CE
+
     search --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 69B235F6749E84CE
 
     ntldr /ntldr
 
     ntldr /ntldr
 
}
 
}
 
}}
 
}}
  
===Sistemi [[UEFI|UEFI]]===
+
Il file {{ic|/etc/grub.d/40_custom}} può essere utilizzato come template per creare {{ic|/etc/grub.d/nn_custom}}, dove il numero {{ic|nn}} definisce l'ordine in cui gli script sono eseguiti, determinando di conseguenza il posizionamento delle voci nel menu di GRUB.
 +
 
 +
{{Nota|{{ic|nn}} dovrebbe avere un valore superiore a {{ic|06}} affinchè gli script di sistema siano eseguiti per primi.}}
 +
 
 +
===Sistemi UEFI===
  
{{Nota|Per ulteriori informazioni su GRUB2 UEFI, è consigliabile leggere le pagine [[UEFI|UEFI]], [[GPT|GPT]] e [[UEFI_Bootloaders|UEFI_Bootloaders]] prima di leggere questa parte.}}
+
{{Nota|Per ulteriori informazioni su GRUB2 UEFI, è consigliabile leggere le pagine [[Unified Extensible Firmware Interface (Italiano)|UEFI]], [[GPT|GPT]] e [[UEFI Bootloaders|UEFI Bootloaders]] prima di leggere questa parte.}}
  
 
====Esempi UEFI per hardware specifico====
 
====Esempi UEFI per hardware specifico====
Line 301: Line 321:
 
{{Nota|A meno che non sia specificato come EFI 1.x, EFI ed UEFI sono termini equivalenti per denotare firmware UEFI 2.x. Inoltre, a meno che non sia specificato esplicitamente, le istruzioni sono generali e non relative solamente a sistemi Mac. Alcune potrebbero non funzionare od essere differenti su questi sistemi. L'implementazione EFI di Apple non è né una versione EFI 1.1 né UEFI 2.x, ma include funzionalità relative ad entrambe. Questo tipo di firmware non rientra in nessuna versione di UEFI, perciò non è da considerarsi come standard.}}
 
{{Nota|A meno che non sia specificato come EFI 1.x, EFI ed UEFI sono termini equivalenti per denotare firmware UEFI 2.x. Inoltre, a meno che non sia specificato esplicitamente, le istruzioni sono generali e non relative solamente a sistemi Mac. Alcune potrebbero non funzionare od essere differenti su questi sistemi. L'implementazione EFI di Apple non è né una versione EFI 1.1 né UEFI 2.x, ma include funzionalità relative ad entrambe. Questo tipo di firmware non rientra in nessuna versione di UEFI, perciò non è da considerarsi come standard.}}
  
Il bootloader EFI per GRUB2 è disponibile in Arch solo dalla versione 1.99~rc1 in poi. Per installarlo, rilevare innanzitutto [[Unified_Extensible_Firmware_Interface#Detecting_UEFI_Firmware_Arch|l'architettura del proprio firmware UEFI]] (i386 o x86_64).
+
Il bootloader EFI per GRUB2 è disponibile in Arch solo dalla versione 1.99~rc1 in poi. Per installarlo, rilevare innanzitutto [[Unified Extensible Firmware Interface (Italiano)#Identificare l.27architettura del firmware UEFI|l'architettura del proprio firmware UEFI]] (i386 o x86_64).
  
 
Tenendo conto di questa informazione, si installi il pacchetto adeguato.
 
Tenendo conto di questa informazione, si installi il pacchetto adeguato.
Line 319: Line 339:
 
{{Nota|I comandi seguenti assumono che si stia usando {{Pkg|grub-efi-x86_64}} (per {{Pkg|grub-efi-i386}} si sostituisca ogni occorrenza di "x86_64" con "i386").}}
 
{{Nota|I comandi seguenti assumono che si stia usando {{Pkg|grub-efi-x86_64}} (per {{Pkg|grub-efi-i386}} si sostituisca ogni occorrenza di "x86_64" con "i386").}}
  
{{Nota|Affinchè tutto funzioni è necessario effettuare il boot in modalità UEFI e non tramite BIOS. Se si è effettuato il boot semplicemente copiando l'ISO di installazione su una chiavetta USB, sarà necessario seguire [[UEFI#Create_UEFI_bootable_USB_from_ISO|questa guida]] o {{ic|grub-install}} visualizzerà degli errori.}}
+
{{Nota|Affinchè tutto funzioni è necessario effettuare il boot in modalità UEFI e non tramite BIOS. Se si è effettuato il boot semplicemente copiando l'ISO di installazione su una chiavetta USB, sarà necessario seguire [[Unified Extensible Firmware Interface (Italiano)#Creare un dispositivo USB avviabile con UEFI dalla ISO|questa guida]] o {{ic|grub-install}} visualizzerà degli errori.}}
  
 
La partizione UEFI di sistema dovrà essere montata in {{ic|/boot/efi}} affinchè lo script di installazione di GRUB la riconosca:
 
La partizione UEFI di sistema dovrà essere montata in {{ic|/boot/efi}} affinchè lo script di installazione di GRUB la riconosca:
Line 371: Line 391:
 
Il file {{ic|<efi-directory>/<efi or EFI>/<bootloader-id>/grubx64.efi}} è una copia esatta di {{ic|<boot-directory>/grub/x86_64-efi/core.efi}}.
 
Il file {{ic|<efi-directory>/<efi or EFI>/<bootloader-id>/grubx64.efi}} è una copia esatta di {{ic|<boot-directory>/grub/x86_64-efi/core.efi}}.
  
{{Nota|A partire da GRUB2 2.00~beta4, l'opzione {{ic|--efi-directory}} di {{ic|grub-install}} sostituisce la vecchia {{ic|--root-directory}}, che è deprecata.}}
+
{{Nota|A partire da GRUB2 2.00, l'opzione {{ic|--efi-directory}} di {{ic|grub-install}} sostituisce la vecchia {{ic|--root-directory}}, che è deprecata.}}
  
 
{{Nota|Le opzioni {{ic|--efi-directory}} e {{ic|--bootloader-id}} sono specifiche di GRUB2 UEFI.}}
 
{{Nota|Le opzioni {{ic|--efi-directory}} e {{ic|--bootloader-id}} sono specifiche di GRUB2 UEFI.}}
Line 434: Line 454:
 
  # grub-probe --target=hints_string /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi --hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 --hint-baremetal=ahci0,gpt1
 
  # grub-probe --target=hints_string /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi --hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 --hint-baremetal=ahci0,gpt1
  
Si aggiunga quindi il codice seguente a {{ic|/boot/efi/EFI/grub/grub.cfg}} o {{ic|/boot/efi/EFI/arch/grub.cfg}} per effettuare il chainload di Windows su sistemi UEFI-GPT:
+
{{Nota|{{ic|grub-probe}} deve essere eseguito come utente root.}}
 +
 
 +
Si aggiunga quindi il codice seguente a {{ic|/etc/grub.d/40_custom}} per effettuare il chainload di Windows su sistemi UEFI-GPT:
  
 
{{bc|1=
 
{{bc|1=
Line 442: Line 464:
 
     insmod search_fs_uuid
 
     insmod search_fs_uuid
 
     insmod chain
 
     insmod chain
     search --fs-uuid --no-floppy --set=root --hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 --hint-baremetal=ahci0,gpt1 1ce5-7f28
+
     search --fs-uuid --set=root --hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 --hint-baremetal=ahci0,gpt1 1ce5-7f28
 
     chainloader (${root})/efi/Microsoft/Boot/bootmgfw.efi
 
     chainloader (${root})/efi/Microsoft/Boot/bootmgfw.efi
 
}
 
}
 
}}
 
}}
 +
 +
Una volta fatto, si rigeneri il {{ic|/boot/grub/grub.cfg}}:
 +
 +
# grub-mkconfig -o /boot/grub/grub.cfg
  
 
==Configurazione==
 
==Configurazione==
Line 464: Line 490:
 
==== Argomenti aggiuntivi ====
 
==== Argomenti aggiuntivi ====
  
Se si ha la necessità di passare dei parametri particolari all'immagine del kernel, è necessario inserirli nella variabile {{ic|GRUB_CMDLINE_LINUX}} contenuta nel file {{ic|/etc/default/grub}}. Ciò è analogo ad inserire i parametri direttamente sulla linea relativa al kernel, come avveniva con il vecchio GRUB Legacy.
+
Se si ha la necessità di passare dei parametri particolari all'immagine del kernel, è necessario inserirli nella variabile {{ic|GRUB_CMDLINE_LINUX}} contenuta nel file {{ic|/etc/default/grub}}.
  
 
Ad esempio, per abilitare  il resume dopo l'ibernazione, si utilizzi {{ic|1=GRUB_CMDLINE_LINUX="resume=/dev/sdaX"}} dove {{ic|sdaX}} indica la propria partizione di swap.
 
Ad esempio, per abilitare  il resume dopo l'ibernazione, si utilizzi {{ic|1=GRUB_CMDLINE_LINUX="resume=/dev/sdaX"}} dove {{ic|sdaX}} indica la propria partizione di swap.
  
 
E' anche possibile utilizzare {{ic|<nowiki>GRUB_CMDLINE_LINUX="resume=/dev/disk/by-uuid/${swap_uuid}"</nowiki>}}, dove {{ic|${swap_uuid}}} si riferisce all'[[Persistent_block_device_naming (Italiano)|uuid]] della propria partizione di swap.
 
E' anche possibile utilizzare {{ic|<nowiki>GRUB_CMDLINE_LINUX="resume=/dev/disk/by-uuid/${swap_uuid}"</nowiki>}}, dove {{ic|${swap_uuid}}} si riferisce all'[[Persistent_block_device_naming (Italiano)|uuid]] della propria partizione di swap.
 
Gli utenti che hanno sostituito il sistema di init di default basato su SysV con [[systemd (Italiano)|systemd]] potrebbero voler aggiungere {{ic|<nowiki>init=/bin/systemd</nowiki>}} alla riga {{ic|<nowiki>GRUB_CMDLINE_LINUX</nowiki>}}.
 
  
 
Se si ha la necessità di passare più di un parametro, lo si separi con uno spazio dal successivo: ad esempio, se si desidera utilizare la funzione di resume e systemd, si avrà:
 
Se si ha la necessità di passare più di un parametro, lo si separi con uno spazio dal successivo: ad esempio, se si desidera utilizare la funzione di resume e systemd, si avrà:
  
 
  {{ic|<nowiki>GRUB_CMDLINE_LINUX="resume=/dev/sdaX init=/bin/systemd"</nowiki>}}
 
  {{ic|<nowiki>GRUB_CMDLINE_LINUX="resume=/dev/sdaX init=/bin/systemd"</nowiki>}}
 +
 +
Si veda [[Kernel parameters|Kernel parameters]] per ulteriori informazioni.
  
 
===Creazione manuale del grub.cfg===
 
===Creazione manuale del grub.cfg===
Line 566: Line 592:
 
}}
 
}}
  
Se il bootloader di Windows è su un disco rigido differente da quello di GRUB, potrebbe essere necessario ingannare Windows per fargli credere di risiedere nel primo drive. Ciò era possibile nel vecchio GRUB Legacy con {{ic|drivemap}}. Assumendo che GRUB si trovi su {{ic|hd0}} e Windows su  {{ic|hd2}}, sarà necessario aggiungere la seguente riga dopo {{ic|set root}}:
+
Se il bootloader di Windows è su un disco rigido differente da quello di GRUB, potrebbe essere necessario ingannare Windows per fargli credere di risiedere nel primo drive. Ciò era possibile utilizzando {{ic|drivemap}}. Assumendo che GRUB si trovi su {{ic|hd0}} e Windows su  {{ic|hd2}}, sarà necessario aggiungere la seguente riga dopo {{ic|set root}}:
  
 
  drivemap -s hd0 hd2
 
  drivemap -s hd0 hd2
Line 682: Line 708:
  
 
====Colori del Menù====
 
====Colori del Menù====
Come succedeva per GRUB Legacy, è possibile cambiare i colori del menù anche in GRUB2. L'elenco dei colori disponibili è reperibile [http://www.gnu.org/software/grub/manual/html_node/Theme-file-format.html#Theme-file-format qui]. Di seguito, un esempio:
+
In GRUB2 è possibile cambiare i colori del menù. L'elenco dei colori disponibili è reperibile [http://www.gnu.org/software/grub/manual/html_node/Theme-file-format.html#Theme-file-format qui]. Di seguito, un esempio:
  
 
Si modifichi {{ic|/etc/default/grub}} come segue:
 
Si modifichi {{ic|/etc/default/grub}} come segue:
Line 704: Line 730:
  
 
Si esegua:
 
Si esegua:
  grub-mkconfig -o /boot/grub/grub.cfg
+
  # grub-mkconfig -o /boot/grub/grub.cfg
  
 
====Disabilitare il framebuffer====
 
====Disabilitare il framebuffer====
Line 724: Line 750:
 
  insmod lvm
 
  insmod lvm
 
e si specifichi la propria root nella menuentry in questo modo:
 
e si specifichi la propria root nella menuentry in questo modo:
  set root=(nome_gruppo_lvm-nome_partizione_logica_di_boot_lvm)
+
  set root=lvm/"nome_gruppo_lvm"-"nome_partizione_logica_di_boot_lvm"
  
 
Esempio:
 
Esempio:
Line 731: Line 757:
 
menuentry "Arch Linux" {
 
menuentry "Arch Linux" {
 
insmod lvm
 
insmod lvm
set root=(VolumeGroup-lv_boot)
+
set root=lvm/VolumeGroup-lv_boot
 
# you can only set following two lines
 
# you can only set following two lines
 
linux /vmlinuz-linux root=/dev/mapper/VolumeGroup-root ro
 
linux /vmlinuz-linux root=/dev/mapper/VolumeGroup-root ro
Line 740: Line 766:
 
====RAID====
 
====RAID====
  
GRUB2 permette di trattare i volumi in configurazione RAID in modo semplice. Si aggiunga {{ic|insmod raid}} al {{ic|grub.cfg}} che consentirà di riferirsi al volume in modo nativo. Ad esempio, {{ic|/dev/md0}} diventa:
+
GRUB2 permette di trattare i volumi in configurazione RAID in modo semplice. Si aggiunga {{ic|insmod mdraid}} al {{ic|grub.cfg}} che consentirà di riferirsi al volume in modo nativo. Ad esempio, {{ic|/dev/md0}} diventa:
 
  set root=(md0)
 
  set root=(md0)
 
mentre un volume RAID partizionato (es. {{ic|/dev/md0p1}} diventa:
 
mentre un volume RAID partizionato (es. {{ic|/dev/md0p1}} diventa:
Line 746: Line 772:
  
 
====Nomenclatura permanente dei dispositivi a blocchi====
 
====Nomenclatura permanente dei dispositivi a blocchi====
È possibile usare gli UUID per identificare le partizioni, al posto dei vecchi {{ic|/dev/sd*}}. Il vantaggio è che permette di identificare le partizioni in modo univoco, cosa che potrebbe essere utile ad alcuni utenti che hanno un sistema di partizioni molto complicato.
 
  
Gli UUID sono usati in modo predefinito nelle ultime versioni di GRUB2 - non ci sono svantaggi, se non il dover rigenerare il {{ic|grub.cfg}} ogni volta che si ridimensiona o si formatta una partizione. Lo si tenga a mente quando si modificano le partizioni usando un LiveCD.
+
Un modo per identificare con una [[Persistent block device naming (Italiano)|nomenclatura persistente i dispositivi a blocchi]] è quello di utilizzare degli UUID univoci per le partizioni, invece dei vecchi valori {{ic|/dev/sd*}}. I vantaggi sono spiegati nel link fornito sopra.  
  
Le recenti versioni di GRUB2 utilizzano gli UUID di default. È possibile abilitare l'uso degli UUID commentando la seguente riga (è l'impostazione di default):
+
GRUB2 utilizza di default gli UUID dei filesystems per identificare in modo permanente i dispositivi a blocchi.
  
#GRUB_DISABLE_LINUX_UUID=true
+
{{Nota|È necessario rigenerare il file {{ic|/boot/grub/grub.cfg}} affinchè vengano aggiornati gli UUID ogni volta che una partizione viene ridimensionata o formattata. Si tenga a mente questo particolare ogni volta che si modificano le partizioni con un LiveCD.}}
  
oppure, è possibile impostare il valore a {{ic|false}}:
+
L'uso degli UUID è controllato da un'opzione in {{ic|/etc/default/grub}}:
  
  GRUB_DISABLE_LINUX_UUID=false
+
  {{bc|1=# GRUB_DISABLE_LINUX_UUID=true}}
  
 
In ogni caso, ci si ricordi di applicare i cambiamenti:
 
In ogni caso, ci si ricordi di applicare i cambiamenti:
Line 770: Line 795:
 
{{bc|1=
 
{{bc|1=
 
menuentry "Arch Linux, session texte" {
 
menuentry "Arch Linux, session texte" {
     search --label --no-floppy --set=root archroot
+
     search --label --set=root archroot
 
     linux /boot/vmlinuz-linux root=/dev/disk/by-label/archroot ro
 
     linux /boot/vmlinuz-linux root=/dev/disk/by-label/archroot ro
 
     initrd /boot/initramfs-linux.img
 
     initrd /boot/initramfs-linux.img
Line 821: Line 846:
  
 
Si rigeneri quindi il file di configurazione di grub.
 
Si rigeneri quindi il file di configurazione di grub.
 +
 +
====Effettuare il boot di una voce non default per una sola volta====
 +
 +
Il comando {{ic|grub-reboot}} è molto utile per avviare una voce diversa da quella di default. GRUB2 caricherà la voce specificata come primo argomento del comando e il sistema operativo corrispondente verrà avviato al prossimo avvio.
 +
Si noti che GRUB2 effettuerà il boot della scelta di default per tutti i riavvii successivi a quello effettuato subito dopo l'esecuzione del comando.
 +
Non è necessario modificare il file di configurazione di GRUB o scegliere una voce nel menù di avvio.
  
 
===Avviare un'immagine ISO direttamente da GRUB2===
 
===Avviare un'immagine ISO direttamente da GRUB2===
Line 828: Line 859:
 
====ISO di Arch Linux====
 
====ISO di Arch Linux====
  
{{Nota|Assicurarsi di aver modificato la voce "hdX,Y" alla terza linea, in modo che indichi la corretta coppia di disco/partizione sulla quale risiede l'immagine iso. Si faccia lo stesso con la riga contenente "img_dev".}}
+
{{Nota|L'esempio assume che la ISO si trovi nella cartella {{ic|/archives}} su {{ic|hd0,6}}. Sarà quindi necessario modificare tutti i riferimenti ad HDD e partizioni per adattarli al proprio sistema.}}
  
  menuentry "Archlinux-2011.08.19-netinstall-x86_64.iso" {
+
'''Esempio con ISO x86_64'''
    set isofile="/archives/archlinux-2011.08.19-netinstall-x86_64.iso"
+
 
    loopback loop (hd0,7)$isofile
+
  menuentry "Archlinux-2013.01.04-dual.iso" --class iso {
    linux (loop)/arch/boot/x86_64/vmlinuz archisolabel=ARCH_201108 img_dev=/dev/sda7 img_loop=$isofile earlymodules=loop
+
  set isofile="/archives/archlinux-2013.01.04-dual.iso"
    initrd (loop)/arch/boot/x86_64/archiso.img
+
  loopback loop (hd0,6)$isofile
 +
  linux (loop)/arch/boot/x86_64/vmlinuz archisolabel=ARCH_201301 img_dev=/dev/sda6 img_loop=$isofile earlymodules=loop
 +
  initrd (loop)/arch/boot/x86_64/archiso.img
 
  }
 
  }
  
  menuentry "Archlinux-2012.07.15-netinstall-dual.iso" {
+
'''Esempio con ISO i686'''
    set isofile="/archives/archlinux-2012.07.15-netinstall-dual.iso"
+
 
    loopback loop (hd0,7)$isofile
+
  menuentry "Archlinux-2013.01.04-dual.iso" --class iso {
    linux (loop)/arch/boot/x86_64/vmlinuz archisolabel=ARCH_201207 img_dev=/dev/sda7 img_loop=$isofile
+
  set isofile="/archives/archlinux-2013.01.04-dual.iso"
    initrd (loop)/arch/boot/x86_64/archiso.img
+
  loopback loop (hd0,6)$isofile
 +
  linux (loop)/arch/boot/i686/vmlinuz archisolabel=ARCH_201301 img_dev=/dev/sda6 img_loop=$isofile earlymodules=loop
 +
  initrd (loop)/arch/boot/i686/archiso.img
 
  }
 
  }
 +
  
 
{{Suggerimento|Se si sta usando una penna USB si utilizzi [[Persistent block device naming (Italiano)|la nomenclatura persistente dei dispositivi a blocchi]] per definire il valore del parametro {{ic|img_dev}}. (esempio: {{ic|1=img_dev=/dev/disk/by-label/CORSAIR}})}}
 
{{Suggerimento|Se si sta usando una penna USB si utilizzi [[Persistent block device naming (Italiano)|la nomenclatura persistente dei dispositivi a blocchi]] per definire il valore del parametro {{ic|img_dev}}. (esempio: {{ic|1=img_dev=/dev/disk/by-label/CORSAIR}})}}
Line 848: Line 884:
 
====ISO di Ubuntu====
 
====ISO di Ubuntu====
  
{{Nota|Assicurarsi di aver modificato la voce {{ic|hdX,Y}} alla terza linea, in modo che indichi la corretta coppia di disco/partizione sulla quale risiede l'immagine ISO.}}
+
{{Nota|L'esempio assume che la ISO si trovi nella cartella {{ic|/archives}} su {{ic|hd0,6}}. Sarà quindi necessario modificare tutti i riferimenti ad HDD e partizioni per adattarli al proprio sistema.}}
  
 
  menuentry "ubuntu-12.04-desktop-amd64.iso" {
 
  menuentry "ubuntu-12.04-desktop-amd64.iso" {
Line 857: Line 893:
 
  initrd (loop)/casper/initrd.lz
 
  initrd (loop)/casper/initrd.lz
 
  }
 
  }
 +
 +
==== Altre ISO ====
 +
 +
Altre configurazioni funzionanti sono reperibili a [http://askubuntu.com/questions/141940/how-to-boot-live-iso-images questo indirizzo].
 +
  
 
==Usare la shell==
 
==Usare la shell==
Line 894: Line 935:
 
*:Una GUI per cambiare le impostazioni di GRUB, GRUB2, Usplash e Splashy.
 
*:Una GUI per cambiare le impostazioni di GRUB, GRUB2, Usplash e Splashy.
  
==parttool o hide/unhide per partizioni legacy==
+
==parttool per hide/unhide==
Se si hanno sistemi Windows 9x installati con dischi C:\ nascosti, GRUB Legacy disponeva delle opzioni {{ic|hide/unhide}}. In GRUB2, esse sono state sostituite da {{ic|parttool}}. Ad esempio, per effettuare ilboot del terzo disco C di tre sistemi Windows 9x installati, si avvii la shell e:
+
Se si hanno sistemi Windows 9x installati con dischi C:\ nascosti, GRUB dispone delle opzioni {{ic|hide/unhide}} attraverso {{ic|parttool}}. Ad esempio, per effettuare ilboot del terzo disco C di tre sistemi Windows 9x installati, si avvii la shell e:
  
 
{{bc|1=
 
{{bc|1=
Line 956: Line 997:
 
    
 
    
 
     # Otteniamo gli identificativi dei dispositivi contenenti le partizioni di boot/root e li impostiamo nelle variabili "grub_boot" e "root"
 
     # Otteniamo gli identificativi dei dispositivi contenenti le partizioni di boot/root e li impostiamo nelle variabili "grub_boot" e "root"
     search --fs-uuid --no-floppy --set=root $the_root_uuid       
+
     search --fs-uuid --set=root $the_root_uuid       
     search --fs-uuid --no-floppy --set=grub_boot $the_boot_uuid
+
     search --fs-uuid --set=grub_boot $the_boot_uuid
 
    
 
    
 
     # Controllo per verificare che boot e root siano uguali
 
     # Controllo per verificare che boot e root siano uguali
Line 1,033: Line 1,074:
 
}}
 
}}
  
Questo problema si verifica quando si tenta di installare GRUB2 in VMWare. Ulteriori informazioni [http://bbs.archlinux.org/viewtopic.php?pid=581760#p581760 qui]. Si spera in un fix in tempi brevi.
+
Questo problema si verifica quando si tenta di installare GRUB2 in VMWare. Ulteriori informazioni [https://bbs.archlinux.org/viewtopic.php?pid=581760#p581760 qui]. Si spera in un fix in tempi brevi.
  
Può anche verificarsi quando la partizione inizia subito dopo l'MBR (blocco 63), senza lasciare uno spazio di circa 1MB (2048 blocchi) prima dell'inizio della prima partizione.
+
Può anche verificarsi quando la partizione inizia subito dopo l'MBR (blocco 63), senza lasciare uno spazio di circa 1MB (2048 blocchi) prima dell'inizio della prima partizione. Si veda [[GRUB2 (Italiano)#Istruzioni specifiche per Master Boot Record (MBR)]]
  
 
===GRUB2 UEFI torna alla shell===
 
===GRUB2 UEFI torna alla shell===

Revision as of 19:28, 19 March 2013

Template:Article summary start Template:Article summary text Template:Article summary heading Template:Article summary text Template:Article summary heading Template:Article summary wiki - Burg è un boot loader di nuova concezione basato su GRUB2. Può essere compilato su una vasta gamma di sistemi operativi e dispone di un sistema di menù altamente configurabili che funzionano sia in modalità grafica che testuale Template:Article summary wiki - La versione precedente, deprecata. Template:Article summary heading Template:Article summary wiki Template:Article summary link Template:Article summary end

GRUB2 è la nuova versione del GRand Unified Bootloader. GRUB2 deriva da PUPA, un progetto di ricerca mirato al miglioramento di GRUB: esso è stato infatti totalmente riscritto, ripulendo il codice assicurando al tempo stesso una maggior modularità e portabilità. [1]

In sintesi, il bootloader è il primo programma ad essere eseguito quando il computer si avvia. Ha il compito di caricare e trasferire il controllo al Kernel Linux, il quale, di contro, inizializza il resto del sistema operativo.

Contents

Prefazione

Prima di iniziare, ecco alcuni utili chiarimenti:

  • Il nome GRUB si riferisce ufficialmente alla versione 2 del software (si veda [2]). Se si sta cercando l'articolo relativo alla versione Legacy, si veda GRUB Legacy.
  • Dalla versione 1.99-6 in poi, è supportato l'uso del filesystem Btrfs per la root (eliminando quindi la necessità di una partizione /boot separata con un filesystem diverso). Sono inoltre supportati gli algoritmi di compressione zlib o LZO.
  • Per ulteriori informazioni su GRUB2 UEFI, è consigliabile leggere le pagine UEFI, GPT e UEFI Bootloaders prima di leggere questa pagina.

Note per gli utenti di GRUB

  • Aggiornare GRUB Legacy a GRUB(2) è un procedimento molto simile ad un installazione ex-novo di GRUB2, argomento trattato qui.
  • Vi sono differenze nei comandi di GRUB e GRUB2. Si consiglia di familiarizzare con i comandi di GRUB2 prima di procedere. (ad esempio, "find" è stato rimpiazzato da "search").
  • GRUB2 è ora modulare e non richiede più lo "stage 1.5". Di conseguenza, il bootloader dispone di capacità limitate e i moduli sono caricati dal disco rigido in caso di necessità (ad esempio, se si necessita del supporto LVM o RAID).
  • La modalità di nomenclatura dei dispositivi è cambiata da GRUB a GRUB2: gli hard disk sono ancora numerati a partire da 0, mentre le partizioni partono da 1 e sono seguite dal nome del sistema di partizionamento usato. Ad esempio, a /dev/sda1 corrisponde (hd0,msdos1) (per sistemi che usano MBR) o (hd0,gpt1) (per sistemi GPT).

Prerequisiti per GRUB2

Sistemi BIOS

Istruzioni specifiche per GUID Partition Table (GPT)

Nelle accoppiate BIOS-GPT, GRUB2 richiede una partizione di boot in cui posizionare il suo core.img, a causa della mancanza del gap di 31KiB dopo il MBR nei sistemi che usano il metodo di partizionamento GPT (al suo posto si ha il GPT Primary Header e la Primary Partition Table). Questa partizione è usata da GRUB2 solo nelle configurazioni BIOS-GPT, e non è necessaria se si usa il metodo di partizionamento classico (MBR) oppure si è su un sistema UEFI. Nemmeno grub-legacy o SYSLINUX la richiedono.

Per le configurazioni BIOS-GPT, si crei una partizione da circa 2MiB usando cgdisk o GNU Parted senza assegnarle un filesystem. La posizione della partizione non è importante, ma è consigliabile inserirla nei pressi dell'inizio del disco, e comunque prima della partizione di /boot. Si assegni alla partizione il tipo EF02 se si sta usando cgdisk, mentre <BOOT_PART_NUM> bios_grub se si usa GParted.

Nota: È necessario creare la partizione in oggetto prima di eseguire il comando grub-install o grub-setup.
Nota: gdisk permetterà di creare la partizione in oggetto in modo da ridurre al minimo gli sprechi di spazio (settori 34-2047), dal momento che gdisk allinea automaticamente le partizioni ai settori multipli di 2048.
Istruzioni specifiche per Master Boot Record (MBR)

Solitamente, il gap dopo il MBR (dopo i 512 byte ad esso dedicati, e prima dell'inizio della prima partizione), è di 31 KiB, quando eventuali problemi di allineamento dei cilindri sono risolti nella tabella partizioni. Tuttavia, è consigliato mantenere un gap di circa 1 MiB per fornire sufficiente spazio al core.img di GRUB2. (FS#24103). È consigliabile usare un tool di partizionamento che supporti l'allineamento partizioni di 1 MiB dopo l'MBR per ottenere lo spazio necessario, e risolvere di conseguenza altri problemi, comunque non relativi all'embedding di core.img.

Se effettua il dual-boot con altri sistemi operativi Windows (fino a Windows 7) o con Haiku è consigliabile utilizzare il sistema di partizionamento MBR poichè su questi sistemi dispone di un supporto migliore rispetto a GPT.

È possibile convertire un disco MBR al sistema di partizionamento GPT se è disponibile un pò di spazio libero. Si veda a tal proposito GUID Partition Table#Convert from MBR to GPT

Sistemi UEFI

Prefazione
Nota: Per ulteriori informazioni su GRUB2 UEFI, è consigliabile leggere le pagine UEFI, GPT e UEFI_Bootloaders prima di proseguire con questo articolo.
Creazione e montaggio della partizione UEFI di sistema

Si seguano le istruzioni di creazione in Creare una partizione UEFI di sistema. Si proceda quindi al montaggio della partizione in /boot/efi. Se si è montata tale partizione in qualche altro punto di mount, si sostituisca di conseguenza /boot/efi nei comandi sottostanti.

# mkdir -p /boot/efi
# mount -t vfat <UEFISYS_PART_DEVICE> /boot/efi

Se non esiste, si crei inoltre <PARTIZIONE_EFI_DI_SISTEMA>/EFI

# mkdir -p /boot/efi/EFI

Installazione

Sistemi BIOS

Effetuare un backup dei dati importanti

In genere, l'installazione di grub dovrebbe andare a buon fine, ma è consigliabile conservare i files di GRUB-legacy prima di installare grub-bios.

mv /boot/grub /boot/grub-legay

Effettuare il backup del MBR che contiene il boot code e la tabella partizioni (Si sostituisca /dev/sdX con l'identificativo del proprio disco):

# dd if=/dev/sdX of=/path/to/backup/mbr_backup bs=512 count=1

Solamente i primi 446 bytes del MBR contengono il boot code, mentre i restanti 64 sono dedicati alla tabella delle partizioni. Se non si desidera sovrascriverla durante un eventuale ripristino, è fortemente consigliato effettuare il backup del solo boot code:

# dd if=/dev/sdX of=/path/to/backup/bootcode_backup bs=446 count=1

Se non si è stati in grado di installare GRUB2 correttamente, si veda GRUB2 (Italiano)#Ripristinare GRUB Legacy

Installare il pacchetto grub-bios

GRUB2 può essere installato con pacman, e sostituirà grub, se installato. La sola installazione del pacchetto non aggiornerà il file /boot/grub/i386-pc/core.img o i moduli di GRUB2 in /boot/grub. È necessario aggiornare il core.img e i moduli manualmente usando grub-install, come spiegato sotto.

# pacman -S grub-bios

Installare i file di boot di grub2

Ci sono tre modi per installare i files di boot di GRUB2 su sistemi BIOS

Installazione nella regione di 440 byte del MBR

Per installare grub-bios nella regione di 440 byte relativa al boot code, chiamata anche Master Boot Record, popolare la directory /boot/grub, generare il /boot/grub/i386-pc/core.img, inserirlo nel gap di 31KiB (la dimensione varia a seconda dell'allineamento delle partizioni) post-MBR o nella partizione di boot del BIOS (GPT) e generare il file di configurazione si esegua:

# modprobe dm-mod
# grub-install --recheck /dev/sda
# grub-mkconfig -o /boot/grub/grub.cfg

dove /dev/sda è la partizione di destinazione (Nel caso di partizionamento MBR, si riferisce al primo disco SATA). Se si usa LVM per la partizione di /boot, è possibile installare GRUB2 su tutti i dischi fisici.

Nota: L'opzione --no-floppy è stata rimossa da grub-install nella versione 2.00-beta2, ed è stata sostituita con --allow-floppy.
Attenzione: Ci si assicuri di controllare il contenuto della directory /boot se si usa il secondo comando. Il parametro --boot-directory può talvolta creare una seconda cartella /boot dentro a quella già esistente. Un'installazione errata di GRUB, avrà questo aspetto: /boot/boot/grub
Installazione nella partizione di boot BIOS con schema di partizionamento GPT

Il sistema di partizionamento GPT non prevede una "traccia di boot" riservata e sarà quindi necessario creare una Partizione di Boot BIOS (0xEF02) per contenere l'immagine di GRUB.

Utilizzando GNU Parted, è possibile assegnare tale tipo ad una partizione utilizzando un comando simile al seguente:

# parted /dev/disk set partition-number bios_grub on

Se si sta utilizzando gdisk, assicurarsi di impostare il tipo della partizione ad OxEF02. Quando si partiziona con programmi che richiedano l'impostazione diretta del GUID, quest'ultimo dovrà avere valore ‘21686148-6449-6e6f-744e656564454649’ (memorizzato su disco come "Hah!IdontNeedEFI" se interpretato come ASCII).

Attenzione: Si faccia molta attenzione durante la scelta di una partizione di boot BIOS: quando GRUB ne trova una durante l'installazione, ne sovrascriverà automaticamente parte del contenuto. Assicurarsi che la partizione non contenga dati importanti prima di procedere.

Per installare grub-bios in un disco partizionato in modalità GPT, popolare la directory /boot/grub, generare il file /boot/grub/i386-pc/core.img ed effettuarne l'embedding nella partizione di boot BIOS, eseguire:

  1. modprobe dm-mod
  2. grub-install --target=i386-pc --recheck --debug /dev/sda
  3. mkdir -p /boot/grub/locale
  4. cp /usr/share/locale/en\@quot/LC_MESSAGES/grub.mo /boot/grub/locale/en.mo

Dove /dev/sda è il disco di destinazione.

Installazione su una partizione o su un disco partitionless
Nota: grub-bios (qualsiasi versione, inclusa quella in sviluppo nel repository Bazaar) non incoraggia gli utenti ad effettuare l'installazione nel boot sector di una partizione o su un disco partitionless, al contrario di quanto fanno GRUB Legacy o syslinux. Questa opzione non è consigliata nemmeno dagli sviluppatori di Arch Linux.

Per installare grub2 nel boot sector di una partizione o su un disco senza partizioni (es. superfloppy), si esegua (si assume che il dispositivo sia /dev/sdaX e che corrisponda alla partizione di /boot):

# grub-install --target=i386-pc --recheck --debug --force /dev/sdaX
# chattr -i /boot/grub/i386-pc/core.img
# mkdir -p /boot/grub/locale
# cp /usr/share/locale/it/LC_MESSAGES/grub.mo /boot/grub/locale/it.mo
# chattr +i /boot/grub/i386-pc/core.img

Sarà necessaria l'opzione --force per consentire l'uso delle blocklists, mentre non si dovrà usare --grub-setup=/bin/true, che equivale a generare il solo core.img.

Si riceveranno dei messaggi d'avvertimento che servono a spiegare i rischi di questo approccio:

/sbin/grub-setup: warn: Attempting to install GRUB to a partitionless disk or to a partition.  This is a BAD idea.
/sbin/grub-setup: warn: Embedding is not possible.  GRUB can only be installed in this setup by using blocklists. 
However, blocklists are UNRELIABLE and their use is discouraged.

Senza l'opzione --force, si riceverà il esguente errore e grub-setup non installerà il proprio codice nel MBR.

/sbin/grub-setup: error: will not proceed with blocklists

Specificando --force, invece, si dovrebbe ottenere:

Installation finished. No error reported.

grub-setup non effettua automaticamente questa operazione in caso di installazione del boot loader su una partizione, oppure su un disco partitionless, poichè lo stesso fa affidamento sulle embedded blocklists nel settore di boot della partizione per individuare il /boot/grub/i386-pc/core.img e il percorso della directory /boot/grub. I settori contenenti i files sopra menzionati potrebbero cambiare in caso di alterazione della partizione (in caso di copia o eliminazione di files, eccetera). Per ulteriori informazioni si veda https://bugzilla.redhat.com/show_bug.cgi?id=728742.

La soluzione proposta è quella di impostare il flag immutable al /boot/grub/i386-pc/core.img, in modo che la posizione del core.img sul disco non venga alterata. Tale flag deve essere impostata solo se grub-bios viene installato su una partizione o su un disco partitionless, e NON in caso di semplice installazione nel MBR o di generazione del core.img.

Generazione del solo core.img

Per popolare la directory /boot/grub e generare un /boot/grub/i386-pc/core.img SENZA installare GRUB2 nel MBR, si aggiunga --grub-setup=/bin/true a grub-install:

# modprobe dm-mod
# grub-install --target=i386-pc --grub-setup=/bin/true --recheck --debug /dev/sda
# mkdir -p /boot/grub/locale
# cp /usr/share/locale/it/LC_MESSAGES/grub.mo /boot/grub/locale/it.mo

Sarà quindi possibile effettuare il chainload del core.img di GRUB2 da GRUB Legacy o da syslinux.

Generare un file di configurazione per GRUB2 BIOS

Si generi quindi un file di configurazione per GRUB2 (è possibile trovare ulteriori informazioni nella sezione "Configurazione"):

# GRUB_PREFIX="/boot/grub" grub-mkconfig -o /boot/grub/grub.cfg
Nota: Il percorso esatto è /boot/grub/grub.cfg, NON /boot/grub/i386-pc/grub.cfg.

Se GRUB2 visualizza l'errore "no suitable mode found" durante il boot, si veda #Correggere l'errore di GRUB2 "no suitable mode found".

Se grub-mkconfig non va a buon fine, si converta il proprio /boot/grub/menu.lst in /boot/grub/grub.cfg usando:

# grub-menulst2cfg /boot/grub/menu.lst /boot/grub/grub.cfg

Ad esempio:

/boot/grub/menu.lst
default=0
timeout=5

title  Arch Linux Stock Kernel
root   (hd0,0)
kernel /vmlinuz-linux root=/dev/sda2 ro
initrd /initramfs-linux.img

title  Arch Linux Stock Kernel Fallback
root   (hd0,0)
kernel /vmlinuz-linux root=/dev/sda2 ro
initrd /initramfs-linux-fallback.img
/boot/grub/grub.cfg
set default='0'; if [ x"$default" = xsaved ]; then load_env; set default="$saved_entry"; fi
set timeout=5

menuentry 'Arch Linux Stock Kernel' {
  set root='(hd0,1)'; set legacy_hdbias='0'
  legacy_kernel   '/vmlinuz-linux' '/vmlinuz-linux' 'root=/dev/sda2' 'ro'
  legacy_initrd '/initramfs-linux.img' '/initramfs-linux.img'
  
}

menuentry 'Arch Linux Stock Kernel Fallback' {
  set root='(hd0,1)'; set legacy_hdbias='0'
  legacy_kernel   '/vmlinuz-linux' '/vmlinuz-linux' 'root=/dev/sda2' 'ro'
  legacy_initrd '/initramfs-linux-fallback.img' '/initramfs-linux-fallback.img'
}

Se si è riavviato il sistema, dimenticandosi di creare il /boot/grub/grub.cfg si esegua il boot nella shell dei comandi di GRUB2 Command Shell e si scriva:

sh:grub> insmod legacycfg
sh:grub> legacy_configfile ${prefix}/menu.lst

Si effettui il boot in Arch Linux e si ricrei il /boot/grub/grub.cfg in maniera adeguata.

Note: L'opzione di cui sopra funziona solo su sistemi BIOS.

Multiboot per sistemi BIOS

Avviare Microsoft Windows su sistemi BIOS-MBR
Nota: GRUB2 supporta l'avvio diretto di bootmgr e il chainload del settore di boot non è più richiesto per avviare Windows su configurazioni BIOS-MBR.
Attenzione: Si noti che bootmgr è contenuto nella partizione con etichetta SYSTEM PARTITION, non in quella principale che ospita i file di sistema di Windows (C:). È possibile individuarla utilizzando blkid, inoltre non è più grande di 100MB, similmente alla partizione di boot di Arch. Si consulti wikipedia:System_partition_and_boot_partition per ulteriori informazioni.

Si individui l'UUID della partizione di sistema di windows, dove bootmgr e i suoi files risiedono. Per esempio, se bootmgr si trova in /media/SYSTEM_RESERVED/bootmgr:

Per Windows Vista/7/8:

# grub-probe --target=fs_uuid /media/SYSTEM_RESERVED/bootmgr
69B235F6749E84CE
# grub-probe --target=hints_string /media/SYSTEM_RESERVED/bootmgr
--hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1
Nota: grub-probe deve essere eseguito come utente root.
Nota: Se si utilizza Windows XP, si sostituisca bootmgr con ntldr nei comandi di cui sopra.

Si aggiunga quindi il codice sotto riportato al file /etc/grub.d/40-custom o /boot/grub/custom.cfg e si rigeneri il grub.cfg con grub-mkconfig come spiegato sopra per effettuare il chainload di Windows (XP, Vista, 7 o 8) installato in modalità BIOS-MBR:

Per Windows Vista/7/8:

#!/bin/sh
menuentry "Microsoft Windows Vista/7/8 BIOS-MBR" {
    insmod part_msdos
    insmod ntfs
    insmod search_fs_uuid
    insmod ntldr     
    search --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 69B235F6749E84CE
    ntldr /bootmgr
}

Per Windows XP:

menuentry "Microsoft Windows XP" {
    insmod part_msdos
    insmod ntfs
    insmod search_fs_uuid
    insmod ntldr     
    search --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 69B235F6749E84CE
    ntldr /ntldr
}

Il file /etc/grub.d/40_custom può essere utilizzato come template per creare /etc/grub.d/nn_custom, dove il numero nn definisce l'ordine in cui gli script sono eseguiti, determinando di conseguenza il posizionamento delle voci nel menu di GRUB.

Nota: nn dovrebbe avere un valore superiore a 06 affinchè gli script di sistema siano eseguiti per primi.

Sistemi UEFI

Nota: Per ulteriori informazioni su GRUB2 UEFI, è consigliabile leggere le pagine UEFI, GPT e UEFI Bootloaders prima di leggere questa parte.

Esempi UEFI per hardware specifico

È ben noto come i produttori di schede madri implementino UEFI in modo differente. Gli utenti che dovessero avere problemi a far funzionare GRUB/EFI sono incoraggiati a descrivere i passaggi compiuti durante l'installazione, qualora questi differiscano da quanto riportato sotto.

Poichè si sta cercando di manterere questo articolo il più chiaro possibile, consultare la pagina relativa agli esempi per GRUB EFI per ulteriori informazioni.

Installare il pacchetto grub-uefi

Nota: A meno che non sia specificato come EFI 1.x, EFI ed UEFI sono termini equivalenti per denotare firmware UEFI 2.x. Inoltre, a meno che non sia specificato esplicitamente, le istruzioni sono generali e non relative solamente a sistemi Mac. Alcune potrebbero non funzionare od essere differenti su questi sistemi. L'implementazione EFI di Apple non è né una versione EFI 1.1 né UEFI 2.x, ma include funzionalità relative ad entrambe. Questo tipo di firmware non rientra in nessuna versione di UEFI, perciò non è da considerarsi come standard.

Il bootloader EFI per GRUB2 è disponibile in Arch solo dalla versione 1.99~rc1 in poi. Per installarlo, rilevare innanzitutto l'architettura del proprio firmware UEFI (i386 o x86_64).

Tenendo conto di questa informazione, si installi il pacchetto adeguato.

Per firmware UEFI a 64 bit:

# pacman -S grub-efi-x86_64

Per firmware UEFI a 32bit:

# pacman -S grub-efi-i386
Nota: La semplice installazione del pacchetto non aggiornerà il file core.efi e il moduli di GRUB2 nella partizione di sistema UEFI. Sarà necessario aggiornarli manualmente usando grub-install, come spiegato sotto.

Installare i files di boot di grub-uefi

Installazione nella partizione UEFI di sistema
Nota: I comandi seguenti assumono che si stia usando grub-efi-x86_64 (per grub-efi-i386 si sostituisca ogni occorrenza di "x86_64" con "i386").
Nota: Affinchè tutto funzioni è necessario effettuare il boot in modalità UEFI e non tramite BIOS. Se si è effettuato il boot semplicemente copiando l'ISO di installazione su una chiavetta USB, sarà necessario seguire questa guida o grub-install visualizzerà degli errori.

La partizione UEFI di sistema dovrà essere montata in /boot/efi affinchè lo script di installazione di GRUB la riconosca:

# mkdir -p /boot/efi
# mount -t vfat /dev/sdXY /boot/efi

Si installino quindi l'applicazione UEFI di GRUB e i relativi moduli in /boot/grub/x86_64-efi (raccomandato) usando:

# grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=arch_grub --recheck --debug
# mkdir -p /boot/grub/locale
# cp /usr/share/locale/it/LC_MESSAGES/grub.mo /boot/grub/locale/it.mo
Nota: Se non vengono specificate le opzioni --target o --directory, grub-install non riuscirà a determinare il tipo di firmware sul quale GRUB2 verrà installato, mostrando perciò il seguente messaggio d'errore: source_dir doesn't exist. Please specify --target or --directory.

Se si desidera installare i moduli di GRUB2 e il grub.cfg nella directory /boot/efi/EFI/grub e l'applicazione grubx64.efi in /boot/efi/EFI/arch_grub, si utilizzi:

# modprobe dm-mod 
# grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=arch_grub --boot-directory=/boot/efi/EFI --recheck --debug
# mkdir -p /boot/efi/EFI/grub/locale
# cp /usr/share/locale/en\@quot/LC_MESSAGES/grub.mo /boot/efi/EFI/grub/locale/en.mo

L'opzione --efi-directory indica il punto di mount della partizione UEFI di sistema, --bootloader-id indica il nome della directory dove verrà installata l'applicazione grubx64.efi, e --boot-directory contiente il percorso alla directory di installazione dei moduli (e sarà quindi la sede del file di configurazione grub.cfg).

I path effettivi sono:

<efi-directory>/<efi o EFI>/<bootloader-id>/grubx64.efi
<boot-directory>/grub/x86_64-efi/<tutti i moduli, grub.efi, core.efi, grub.cfg>
Nota: --bootloader-id non cambia il percorso <boot-directory>/grub. Ad esempio, non si potranno installare i moduli in <boot-directory>/<bootloader-id>, in quanto il path è hardcoded a <boot-directory>/grub.

Se --efi-directory=/boot/efi --boot-directory=/boot/efi/EFI --bootloader-id=grub

<efi-directory>/<efi o EFI>/<bootloader-id> == <boot-directory>/grub == /boot/efi/EFI/grub

Se --efi-directory=/boot/efi --boot-directory=/boot/efi/EFI --bootloader-id=arch

<efi-directory>/<efi o EFI>/<bootloader-id> == /boot/efi/EFI/arch_grub
<boot-directory>/grub == /boot/efi/EFI/grub

Se --efi-directory=/boot/efi --boot-directory=/boot --bootloader-id=arch

<efi-directory>/<efi o EFI>/<bootloader-id> == /boot/efi/EFI/arch_grub
<boot-directory>/grub == /boot/grub

Se --efi-directory=/boot/efi --boot-directory=/boot --bootloader-id=grub

<efi-directory>/<efi o EFI>/<bootloader-id> == /boot/efi/EFI/grub
<boot-directory>/grub == /boot/grub

Il file <efi-directory>/<efi or EFI>/<bootloader-id>/grubx64.efi è una copia esatta di <boot-directory>/grub/x86_64-efi/core.efi.

Nota: A partire da GRUB2 2.00, l'opzione --efi-directory di grub-install sostituisce la vecchia --root-directory, che è deprecata.
Nota: Le opzioni --efi-directory e --bootloader-id sono specifiche di GRUB2 UEFI.

In tutti i casi, la partizione UEFI di sistema dovrà essere montata affinchè grub-install possa installarvi il grubx64.efi, che sarà poi lanciato dal firmware (usando la voce creata con efibootmgr, su sistemi non Mac).

Se si controlla attentamente, si noterà l'assenza di un'opzione che specifichi il device su cui installare il bootloader (ad esempio /dev/sda). Tali opzioni verranno ignorate dallo script di installazione, poichè i bootloaders UEFI non usano l'MBR delle partizioni.

Si sarà ora in grado di effettuare il boot tramite UEFI creando un grub.cfg seguendo #Generare un file di configurazione per GRUB2 UEFI e copiando /boot/efi/EFI/grub/grubx64.efi in /boot/efi/EFI/boot/bootx64.efi.

Generare un file di configurazione per GRUB2 UEFI

Si generi un file di configurazione per GRUB2 usando il seguente comando:

# grub-mkconfig -o <boot-directory>/grub/grub.cfg
Nota: Il percorso esatto è <boot-directory>/grub/grub.cfg, NON <boot-directory>/grub/x86_64-efi/grub.cfg.

Se si è usato --boot-directory=/boot :

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

Se invece si è usato {ic|--boot-directory=/boot/efi/EFI}}:

# grub-mkconfig -o /boot/efi/EFI/grub/grub.cfg

I percorsi di cui sopra sono indipendenti dal valore dell'opzione --bootloader-id.

Se grub-uefi mostra l'errore "no suitable mode found", si legga #Correggere l'errore di GRUB2 "no suitable mode found".

Generare un'applicazione UEFI standalone per GRUB2

È possibile creare una applicazione UEFI standalone (grubx64_standalone.efi) che comprende tutti i moduli necessari in un memdisk al suo interno, eliminando di fatto, la necessità di avere una directory separata contenente tutti i moduli UEFI di GRUB2 ed altri files ad essi relativi. Per raggiungere l'obiettivo, verrà utilizzato il comando grub-mkstandalone, incluso in grub-common>=1:1.99-6.

Il modo più semplice per farlo, è attraverso il comando install menzionato sopra, avendo cura però di specificare i moduli da includere. Ad esempio:

# grub-mkstandalone --directory="/usr/lib/grub-x86_64-efi" --format="x86_64-efi" --compression="xz" --output="/boot/efi/EFI/arch_grub/grubx64_standalone.efi" <files aggiuntivi che si desiderano includere>

Il file grubx64_standalone.efi assume che il grub.cfg si trovi nel suo $prefix, ovvero (memdisk)/boot/grub. Il memdisk verrà poi incluso nell'applicazione efi.

Lo script grub-mkstandalone permette di specificare i files da includere nel memdisk come argomenti dello script.

Se, ad esempio, il vostro grub.cfg risiede in /home/utente/Desktop/grub.cfg, si crei una directory temporanea /home/utente/Desktop/boot/grub e si copi il file /home/utente/Desktop/grub.cfg in /home/utente/Desktop/boot/grub/grub.cfg; infine, ci si posizioni in /home/utente/Desktop/boot/grub con il comando cd e si esegua:

# grub-mkstandalone --directory="/usr/lib/grub-x86_64-efi" --format="x86_64-efi" --compression="xz" \

--output="/boot/efi/EFI/arch_grub/grubx64_standalone.efi" "boot/grub/grub.cfg"

Una piccola precisazione: ci si è posizionati in /home/utente/Desktop/boot/grub e si è passato il path del grub.cfg come boot/grub/grub.cfg (si noti l'assenza dello slash iniziale - boot/ vs. /boot/) poichè, ad esempio, un ipotetico file dir1/dir2/file viene incluso come (memdisk)/dir1/dir2/file dallo script grub-mkstandalone. Se si passa come argomento /home/utente/Desktop/boot/grub/grub.cfg, il file verrà incluso come (memdisk)/home/utente/Desktop/boot/grub/grub.cfg, con tutte le conseguenze del caso.

Sarà ora necessario creare un voce con efibootmgr per {{ic|/boot/efi/EFI/arch_grub/grubx64_standalone.efi. È possibile usare grub.efi invece di sostituire l'immagine originale, oppure usare la shell UEFI per provare l'immagine prima di effettuare le modifiche. Si veda #Creare una voce per GRUB2 nel Firmware Boot Manager.

Multiboot su sistemi UEFI

Effettuare il chainload di Microsoft Windows su sistemi UEFI GPTx86_64

Si trovi l'UUID del filesystem FAT32 nella partizione UEFI di sistema, dove i files del Bootloader UEFI di Windows risiedono. Ad esempio, se il file bootmgfw.efi si trova in /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi (Si ignorino le differenze tra lettere maiuscole e minuscole, poichè sono irrilevanti su un filesystem FAT), si esegua:

# grub-probe --target=fs_uuid /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi
1ce5-7f28
# grub-probe --target=hints_string /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi --hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 --hint-baremetal=ahci0,gpt1
Nota: grub-probe deve essere eseguito come utente root.

Si aggiunga quindi il codice seguente a /etc/grub.d/40_custom per effettuare il chainload di Windows su sistemi UEFI-GPT:

menuentry "Microsoft Windows x86_64 UEFI-GPT" {
    insmod part_gpt
    insmod fat
    insmod search_fs_uuid
    insmod chain
    search --fs-uuid --set=root --hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 --hint-baremetal=ahci0,gpt1 1ce5-7f28
    chainloader (${root})/efi/Microsoft/Boot/bootmgfw.efi
}

Una volta fatto, si rigeneri il /boot/grub/grub.cfg:

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

Configurazione

E' possibile generare il grub.cfg in maniera automatica o modificarlo manualmente.

Nota: Se GRUB2 è stato installato con l'opzione --boot-directory attiva, il grub.cfg dovrà essere posizionato nella stessa directory di grubx64.efi. In caso contrario, il grub.cfg andrà posizionato in /boot/grub, come accade per la versione BIOS di GRUB2.
Nota: Di seguito viene proposta una guida completa alla configurazione di GRUB2.

Generazione automatica usando grub-mkconfig (Raccomandata)

L'equivalente del vecchio menu.lst è rappresentato dai files /etc/default/grub e /etc/grub.d/*. Questi files sono generalmente usati da grub-mkconfig per generare il /boot/grub/grub.cfg. Per generare un grub.cfg si usi il seguente comando:

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

/etc/grub.d/10_linux è impostato per l'aggiunta automatica di voci di menu per Arch linux che funzionano out-of-the-box, su qualsiasi configurazione. Altri sistemi operativi potrebbero dover essere aggiunti a /etc/grub.d/40_custom o /boot/grub/custom.cfg.

Argomenti aggiuntivi

Se si ha la necessità di passare dei parametri particolari all'immagine del kernel, è necessario inserirli nella variabile GRUB_CMDLINE_LINUX contenuta nel file /etc/default/grub.

Ad esempio, per abilitare il resume dopo l'ibernazione, si utilizzi GRUB_CMDLINE_LINUX="resume=/dev/sdaX" dove sdaX indica la propria partizione di swap.

E' anche possibile utilizzare GRUB_CMDLINE_LINUX="resume=/dev/disk/by-uuid/${swap_uuid}", dove ${swap_uuid} si riferisce all'uuid della propria partizione di swap.

Se si ha la necessità di passare più di un parametro, lo si separi con uno spazio dal successivo: ad esempio, se si desidera utilizare la funzione di resume e systemd, si avrà:

GRUB_CMDLINE_LINUX="resume=/dev/sdaX init=/bin/systemd"

Si veda Kernel parameters per ulteriori informazioni.

Creazione manuale del grub.cfg

Attenzione: La modifica manuale di questo file è fortemente sconsigliata. Il grub.cfg è generato dal comando grub-mkconfig, ed è preferibile modificare il file /etc/default/grub o uno degli script contenuti nella cartella /etc/grub.d.

Un grub.cfg di base contiene le seguenti opzioni:

  • (hdX,Y) indica la partizione Y sul disco X. La numerazione delle partizioni parte da 1, mentre quella dei dischi da 0
  • set default=N permette di scegliere quale entry avviare in modo predefinito
  • set timeout=N indica il limite di tempo in secondi prima che la scelta predefinita venga avviata
  • menuentry "title" {opzioni} è un'entry di nome title
  • set root=(hdX,Y) imposta la partizione di boot, ossia quella contenente il kernel e i moduli di GRUB (non è necessario disporre di una partizione separata: /boot può essere contenuta all'interno della partizione di root).

Una configurazione d'esempio:

/boot/grub/grub.cfg
# Config file for GRUB2 - The GNU GRand Unified Bootloader
# /boot/grub/grub.cfg

# DEVICE NAME CONVERSIONS
#
#  Linux           Grub
# -------------------------
#  /dev/fd0        (fd0)
#  /dev/sda        (hd0)
#  /dev/sdb2       (hd1,2)
#  /dev/sda3       (hd0,3)
#

# Timeout for menu
set timeout=5

# Set default boot entry as Entry 0
set default=0

# (0) Arch Linux
menuentry "Arch Linux" {
set root=(hd0,1)
linux /vmlinuz-linux root=/dev/sda3 ro
initrd /initramfs-linux.img
}

## (1) Windows
#menuentry "Windows" {
#set root=(hd0,3)
#chainloader +1
#}

Dual Booting

Nota: Se si desidera che GRUB2 ricerchi automaticamente i sistemi operativi installati, è necessario scaricare os-prober.

Usando grub-mkconfig

Il modo migliore per aggiungere altre voci è modificare il file /etc/grub.d/40_custom oppure /boot/grub/custom.cfg, in modo che esse vengano automaticamente aggiunte al grub.cfg quando si lancia grub-mkconfig. Dopo aver effettuato le modifiche, si esegua:

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

Per generare un grub.cfg aggiornato.

Con GNU/Linux

Se l'altra distro è in /dev/sda2:

menuentry "Other Linux" {
set root=(hd0,2)
linux /boot/vmlinuz (si aggiungano altre opzioni da passare al kernel, se richieste)
initrd /boot/initrd.img (se il kernel lo richiede)
}
Con FreeBSD

Richiede che FreeBSD sia installato su una singola partizione formattata come UFS. Se FreeBSD risiede su sda4:

menuentry "FreeBSD" {
set root=(hd0,4)
chainloader +1
}
Con Windows

Se windows è installato in /dev/sda3:

Nota: Si ricordi che è necessario puntare i comandi set root e chainloader alla partizione riservata di sistema, ossia quella che crea Windows durante l'installazione, e non alla partizione sulla quale risiede effettivamente Windows. L'esempio trattato sotto funziona se la vostra partizione riservata è sda3.
# (2) Windows XP
menuentry "Windows XP" {
    set root=(hd0,3)
    chainloader (hd0,3)+1
}

Se il bootloader di Windows è su un disco rigido differente da quello di GRUB, potrebbe essere necessario ingannare Windows per fargli credere di risiedere nel primo drive. Ciò era possibile utilizzando drivemap. Assumendo che GRUB si trovi su hd0 e Windows su hd2, sarà necessario aggiungere la seguente riga dopo set root:

drivemap -s hd0 hd2

Con Windows usando EasyBCD e NeoGRUB

Poichè NeoGRUB non capisce il nuovo formato dei menu di GRUB2, sarà necessario effettuare il chainload di GRUB2, sostituendo il contenuto del vostro C:\NST\menu.lst con:

default 0
timeout 1
title       Chainload into GRUB v2
root        (hd0,7)
kernel      /boot/grub/i386-pc/core.img

Configurazione dell'aspetto

In GRUB2 è possibile cambiare l'aspetto del menu. Ci si assicuri di aver inizializzato il terminale grafico di grub2 (gfxterm), usando una modalità video appropriata (gfxmode). Ulteriori informazioni sono reperibili nella sezione #Correggere l'errore di GRUB2 "no suitable mode found". La modalità video impostata di seguito, verrà passata al kernel via gfxpayload; di conseguenza, questa sarà richiesta affinchè ogni configurazione dell'aspetto abbia effetto.

Impostare la risoluzione del framebuffer

GRUB2 può impostare il framebuffer sia per sé stesso che per il kernel. Il vecchio parametro vga= è deprecato. Il metodo consigliato è modificare /etc/default/grub come segue:

GRUB_GFXMODE=1024x768x32
GRUB_GFXPAYLOAD_LINUX=keep

Per rendere effettivi i cambiamenti, si esegua:

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

L'opzione gfxpayload si assicurerà che la risoluzione venga mantenuta e passata al kernel.

Nota: Se questo esempio non funziona, si provi a sostituire gfxmode="1024x768x32" con vbemode="0x105".
Nota: Per elencare tutte le modalità video disponibili è sufficiente lanciare il comando hwinfo --framebuffer (hwinfo è disponibile in [community], mentre dal prompt di GRUB2 si usi vbeinfo (è necessario caricare il modulo vbe prima).

Se questo metodo non funziona, la vecchia opzione vga= è ancora valida. Si aggiunga vga= all'opzione GRUB_CMDLINE_LINUX_DEFAULT in /etc/default/grub. Ad esempio:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash vga=792" 

imposterà una risoluzione di 1024x768.

È possibile scegliere tra le seguenti risoluzioni: 640×480, 800×600, 1024×768, 1280×1024, 1600×1200, 1920x1200.

Hack 915resolution

Se si stanno utilizzando schede grafiche Intel, può accadere che nè # hwinfo --framebuffervbeinfo mostrino la risoluzione desiderata. In questo caso, è possibile utilizzare l'hack proposto, che modificherà temporaneamente il BIOS della scheda video aggiungendo la risoluzione richiesta. Si veda la home page di 915resolution.

Quanto segue è valido per il mio sistema: lo si adatti quindi al proprio.

Innanzitutto è necessario scegliere una modalità video da modificare più tardi. Si avvii quindi 915resolution nella shell di GRUB:

915resolution -l

L'output sarà simile al seguente:

Intel 800/900 Series VBIOS Hack : version 0.5.3
...
Mode 30 : 640x480, 8 bits/pixel
...

L'obiettivo è quello di sovrascrivere la modalità 30 (naturalmente si può scegliere di modificare qualsiasi altra modalità). Nel file /etc/grub.d/00_header, inserire la seguente riga prima di set gfxmode=${GRUB_GFXMODE}:

915resolution 30 1440 900

Il comando appena inserito sovrascriverà la modalità 30 con la risoluzione di 1440x900. Sarà ora necessario impostare il valore di GRUB_GFXMODE, come spiegato in precedenza e rigenerare il file di configurazione di GRUB2:

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

Immagine di sfondo e caratteri bitmap

GRUB2 supporta le immagini di sfondo e i caratteri bitmap nel formato pf2. Il font unifont è incluso nel pacchetto grub-common con nome unicode.pf2 oppure, in soli caratteri ASCII con nome ascii.pf2.

I formati di immagine supportati includono tga, png e jpeg, a patto che i rispettivi moduli siano caricati. La risoluzione massima applicabile dipende dall'hardware in uso.

Prima di procedere, seguire quanto indicato in #Impostare la risoluzione del framebuffer.

Si modifichi quindi il file /etc/default/grub come segue:

GRUB_BACKGROUND="/boot/grub/miaimmagine"
#GRUB_THEME="/path/to/gfxtheme"
GRUB_FONT="/path/to/font.pf2"
Nota: Se si è installato GRUB in una partizione separata, /boot/grub/miaimmagine diventa /grub/miaimmagine.

Per applicare le modifiche al grub.cfg, si esegua:

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

Se l'inserimento dell'immagine è avvenuto con successo, dovrebbe essere visualizzato il messaggio Found background image..., durante l'esecuzione del precedente comando. Se questo non accade, significa che l'immagine non è stata incorporata nel grub.cfg.

In tal caso, si controlli che:

  • il percorso e il nome dell'immagine in /etc/default/grub siano corretti
  • l'immagine abbia dimensioni e formato adeguati (tga, png, png a 8 bit)
  • l'immagine sia stata salvata in modalità RGB e non sia indicizzata
  • la modalità console non sia stata abilitata in /etc/default/grub
  • il comando grub-mkconfig sia stato eseguito per inserire le informazioni relative allo sfondo nell file /boot/grub/grub.cfg.

Temi

Di seguito viene proposto un esempio per la configurazione di GRUB2 con il tema Starfield, incluso nel pacchetto fornito con Arch.

Si modifichi /etc/default/grub:

GRUB_THEME="/usr/share/grub/themes/starfield/theme.txt"

Si applichino le modifiche:

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

Se il tema è stato applicato correttamente, apparirà a video il messaggio Found theme: /usr/share/grub/themes/starfield/theme.txt.

Colori del Menù

In GRUB2 è possibile cambiare i colori del menù. L'elenco dei colori disponibili è reperibile qui. Di seguito, un esempio:

Si modifichi /etc/default/grub come segue:

GRUB_COLOR_NORMAL="light-blue/black"
GRUB_COLOR_HIGHLIGHT="light-cyan/blue"

Per rendere effettivi i cambiamenti si esegua:

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

Menù nascosto

Una delle caratteristiche proprie di GRUB2 è la possibilità di nascondere il menù e renderlo visibile attraverso la pressione del tasto Template:Keypress, se necessario. È anche possibile decidere se visualizzare o meno il countdown.

Si modifichi /etc/default/grub. Nell'esempio che segue, il countdown è stato impostato a 5 secondi e reso visibile all'utente:

GRUB_HIDDEN_TIMEOUT=5
GRUB_HIDDEN_TIMEOUT_QUIET=false

Si esegua:

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

Disabilitare il framebuffer

Se si usano i driver proprietari NVIDIA, potrebbe essere necessario disabilitare il framebuffer di GRUB2, poichè potrebbe interferire con il driver.

Per disabilitarlo, si modifichi /etc/default/grub decommentando la seguente linea:

GRUB_TERMINAL_OUTPUT=console

Si esegua poi:

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

Altre opzioni

LVM

Se si usa LVM per la propria /boot, si aggiunga la seguente linea prima delle varie voci:

insmod lvm

e si specifichi la propria root nella menuentry in questo modo:

set root=lvm/"nome_gruppo_lvm"-"nome_partizione_logica_di_boot_lvm"

Esempio:

# (0) Arch Linux
menuentry "Arch Linux" {
insmod lvm
set root=lvm/VolumeGroup-lv_boot
# you can only set following two lines
linux /vmlinuz-linux root=/dev/mapper/VolumeGroup-root ro
initrd /initramfs-linux.img
}

RAID

GRUB2 permette di trattare i volumi in configurazione RAID in modo semplice. Si aggiunga insmod mdraid al grub.cfg che consentirà di riferirsi al volume in modo nativo. Ad esempio, /dev/md0 diventa:

set root=(md0)

mentre un volume RAID partizionato (es. /dev/md0p1 diventa:

set root=(md0,1)

Nomenclatura permanente dei dispositivi a blocchi

Un modo per identificare con una nomenclatura persistente i dispositivi a blocchi è quello di utilizzare degli UUID univoci per le partizioni, invece dei vecchi valori /dev/sd*. I vantaggi sono spiegati nel link fornito sopra.

GRUB2 utilizza di default gli UUID dei filesystems per identificare in modo permanente i dispositivi a blocchi.

Nota: È necessario rigenerare il file /boot/grub/grub.cfg affinchè vengano aggiornati gli UUID ogni volta che una partizione viene ridimensionata o formattata. Si tenga a mente questo particolare ogni volta che si modificano le partizioni con un LiveCD.

L'uso degli UUID è controllato da un'opzione in /etc/default/grub:

# GRUB_DISABLE_LINUX_UUID=true

In ogni caso, ci si ricordi di applicare i cambiamenti:

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

Usare le etichette

È possibile usare le etichette (stringhe che identificano le partizioni in una maniera leggibile dall'utente), usando l'opzione --label del comando search. Innanzitutto, si apponga un'etichetta alle proprie partizioni:

# tune2fs -L <ETICHETTA> <PARTIZIONE>

Poi si aggiunga una voce usando le etichette:

menuentry "Arch Linux, session texte" {
    search --label --set=root archroot
    linux /boot/vmlinuz-linux root=/dev/disk/by-label/archroot ro
    initrd /boot/initramfs-linux.img
}

Richiamare l'ultimo sistema avviato

GRUB2 è in grado di ricordarsi l'ultimo sistema avviato ed usarlo come default la prossima volta che si eseguirà il boot. Questa funzionalità è utile se si dispone di kernel multipli (ad esempio il kernel corrente di Arch e il LTS come fallback) o più sistemi operativi. Si modifichi /etc/default/grub e si cambi il valore di GRUB_DEFAULT:

GRUB_DEFAULT=saved

Ciò consentirà a GRUB di avviare il sistema operativo salvato. Per abilibare il salvataggio, si aggiunga la linea seguente ad /etc/default/grub:

GRUB_SAVEDEFAULT=true
Nota: Le voci di menù aggiunte manualmente in /etc/grub.d/40_custom o /boot/grub/custom.cfg (ad esempio Windows), richiederanno l'opzione savedefault.

Ci si ricordi di rigenerare il file di configurazione di GRUB.

Sicurezza

Se si desidera rendere più sicuro GRUB2 e fare in modo che nessuno possa cambiare i parametri di boot od usare la riga di comando, è possibile aggiungere un nome utente e password ai files di configurazione di GRUB. A tal fine, si esegua grub-mkpasswd_pbkdf2. Si inserisca una password e la si confermi. L'output assomiglierà a questo:

Your PBKDF2 is grub.pbkdf2.sha512.10000.C8ABD3E93C4DFC83138B0C7A3D719BC650E6234310DA069E6FDB0DD4156313DA3D0D9BFFC2846C21D5A2DDA515114CF6378F8A064C94198D0618E70D23717E82.509BFA8A4217EAD0B33C87432524C0B6B64B34FBAD22D3E6E6874D9B101996C5F98AB1746FE7C7199147ECF4ABD8661C222EEEDB7D14A843261FFF2C07B1269A

Si aggiungano le seguenti stringhe a /etc/grub.d/0_header:

set superusers="username"
password_pbkdf2 username <password>

Dove a <password> corrisponde la stringa generata con grub-mkpasswd_pbkdf2.

Si rigeneri il file di configurazione. La riga di comando e i parametri di boot di GRUB2 sono ora protetti.

Le impostazioni di cui sopra possono essere rese meno restrittive e personalizzate aggiungendo più utenti, come spiegato nel capitolo "Security" del manuale di GRUB.

Cifratura della partizione root

Per far sì che GRUB2 passi automaticamente al kernel i parametri necessari per la cifratura della root, si aggiunga cryptdevice=/dev/device:etichetta a GRUB_CMDLINE_LINUX in /etc/default/grub.

Un esempio con la root mappata su /dev/mapper/root:

GRUB_CMDLINE_LINUX="cryptdevice=/dev/sda2:root"

Si disabiliti inoltre l'uso degli UUID per il file system di root:

GRUB_DISABLE_LINUX_UUID=true

Si rigeneri quindi il file di configurazione di grub.

Effettuare il boot di una voce non default per una sola volta

Il comando grub-reboot è molto utile per avviare una voce diversa da quella di default. GRUB2 caricherà la voce specificata come primo argomento del comando e il sistema operativo corrispondente verrà avviato al prossimo avvio. Si noti che GRUB2 effettuerà il boot della scelta di default per tutti i riavvii successivi a quello effettuato subito dopo l'esecuzione del comando. Non è necessario modificare il file di configurazione di GRUB o scegliere una voce nel menù di avvio.

Avviare un'immagine ISO direttamente da GRUB2

Si modifichi /etc/grub.d/40_custom o /boot/grub/custom.cfg aggiungendo una voce per il boot dell'ISO che si desidera avviare. Una volta fatto, si aggiorni il menu di GRUB con il solito grub-mkconfig -o /boot/grub/grub.cfg (dato da root).

ISO di Arch Linux

Nota: L'esempio assume che la ISO si trovi nella cartella /archives su hd0,6. Sarà quindi necessario modificare tutti i riferimenti ad HDD e partizioni per adattarli al proprio sistema.

Esempio con ISO x86_64

menuentry "Archlinux-2013.01.04-dual.iso" --class iso {
 set isofile="/archives/archlinux-2013.01.04-dual.iso"
 loopback loop (hd0,6)$isofile
 linux (loop)/arch/boot/x86_64/vmlinuz archisolabel=ARCH_201301 img_dev=/dev/sda6 img_loop=$isofile earlymodules=loop
 initrd (loop)/arch/boot/x86_64/archiso.img
}

Esempio con ISO i686

menuentry "Archlinux-2013.01.04-dual.iso" --class iso {
 set isofile="/archives/archlinux-2013.01.04-dual.iso"
 loopback loop (hd0,6)$isofile
 linux (loop)/arch/boot/i686/vmlinuz archisolabel=ARCH_201301 img_dev=/dev/sda6 img_loop=$isofile earlymodules=loop
 initrd (loop)/arch/boot/i686/archiso.img
}


Suggerimento: Se si sta usando una penna USB si utilizzi la nomenclatura persistente dei dispositivi a blocchi per definire il valore del parametro img_dev. (esempio: img_dev=/dev/disk/by-label/CORSAIR)

ISO di Ubuntu

Nota: L'esempio assume che la ISO si trovi nella cartella /archives su hd0,6. Sarà quindi necessario modificare tutti i riferimenti ad HDD e partizioni per adattarli al proprio sistema.
menuentry "ubuntu-12.04-desktop-amd64.iso" {
set isofile="/path/to/ubuntu-12.04-desktop-amd64.iso"
loopback loop (hdX,Y)$isofile
linux (loop)/casper/vmlinuz boot=casper
iso-scan/filename=$isofile quiet noeject noprompt splash --
initrd (loop)/casper/initrd.lz
}

Altre ISO

Altre configurazioni funzionanti sono reperibili a questo indirizzo.


Usare la shell

Poichè l'MBR è troppo piccolo per contenere tutti i moduli di GRUB2, solo il menù e i comandi fondamentali risiedono lì. La maggior parte delle funzionalità di GRUB2 è contenuta nei moduli in /boot/grub, che sono caricati quando necessario. In caso di errori (ad esempio se viene alterata la tabella delle partizioni), GRUB2 potrebbe non riuscire ad effettuare il boot, ed avviare una shell al posto del menù classico.

GRUB2 offre diversi tipi di shell. Se vi sono problemi nella lettura del menu, ma il bootloader è comunque in grado di trovare il disco dove GRUB2 risiede, è probabile che si sarà lasciati nella shell "normale":

sh:grub>

In caso di problemi più seri (GRUB non riesce a trovare i files richiesti), potrebbe venir visualizzata la shell di emergenza:

grub rescue>

La shell di emergenza è una versione ridotta di quella normale, ed offre di conseguenza, un numero ridotto di funzionalità. Si provi a caricare il modulo normal, e poi ad avviare la shell classica:

grub rescue> set prefix=(hdX,Y)/boot/grub
grub rescue> insmod (hdX,Y)/boot/grub/normal.mod
rescue:grub> normal

Supporto al Pager

GRUB2 supporta il pager per rendere agevole la lettura di output lunghi. Si noti che questa funzionalità è disponibile solamente nella shell normale, e non in quella d'emergenza. Per attivarla, si scriva:

sh:grub> set pager=1

Tools grafici per la configurazione

I seguenti pacchetti possono essere installati da AUR

  • grub-customizerAUR (richiede gettext, gksu, gtkmm, hicolor-icon-theme, openssl)
    Utility per personalizzare il bootloader (GRUB2 o BURG)
  • grub-editorAUR (richiede kdelibs)
    Un modulo KCM per KDE4 per configurare GRUB2.
  • kcm-grub2AUR (richiede kdelibs python2-qt kdebindings-python)
    Questo modulo KCM gestisce le impostazioni più comuni di GRUB2.
  • startupmanagerAUR (richiede gnome-python imagemagick yelp python2 xorg-xrandr)
    Una GUI per cambiare le impostazioni di GRUB, GRUB2, Usplash e Splashy.

parttool per hide/unhide

Se si hanno sistemi Windows 9x installati con dischi C:\ nascosti, GRUB dispone delle opzioni hide/unhide attraverso parttool. Ad esempio, per effettuare ilboot del terzo disco C di tre sistemi Windows 9x installati, si avvii la shell e:

parttool hd0,1 hidden+ boot-
parttool hd0,2 hidden+ boot-
parttool hd0,3 hidden- boot+
set root=hd0,3
chainloader +1
boot

Usare la console di emergenza

Si veda innanzitutto #Usare la shell. Se non si è in grado di avviare la shell standard, una possibile soluzione è quella di effettuare il boot tramite LiveCD o con qualche altro disco di ripristino per correggere gli errori di configurazione e reinstallare GRUB. Tuttavia, un disco di ripristino non è sempre disponibile (né tantomeno necessario), e la console di emergenza è sorprendentemente robusta.

I comandi disponibili in questa modalità includono insmod, ls, set e unset. Questo esempio usa set ed insmod. set modifica il valore delle variabili, mentre insmod aggiunge nuovi moduli per espandere le funzionalità di base.

Prima di iniziare, è necessario che l'utente sappia la posizione della propria partizione di /boot (sia essa separata o una sottodirectory della partizione root):

grub rescue> set prefix=(hdX,Y)/boot/grub

Dove X è il numero relativo al drive ed Y quello della partizione. Per espandere le funzionalità della console, si inserisca il modulo linux.

grub rescue> insmod (hdX,Y)/boot/grub/linux.mod
Nota: Se si sta usando una partizione di boot separata, si ometta /boot dal percorso. (esempio: set prefix=(hdX,Y)/grub and insmod (hdX,Y)/grub/linux.mod).

Ciò rende disponibili i comandi linux ed initrd, che dovrebbero essere familiari (si veda #Configurazione).

Un esempio, avvio di Arch Linux:

set root=(hd0,5)
linux /boot/vmlinuz-linux root=/dev/sda5
initrd /boot/initramfs-linux.img
boot

Di nuovo, in caso di partizione di boot separata, si cambino i comandi di conseguenza:

set root=(hd0,5)
linux /vmlinuz-linux root=/dev/sda6
initrd /initramfs-linux.img
boot

Dopo aver avviato con successo l'installazione di Arch Linux, è possibile correggere grub.cfg e procedere con la reinstallazione di GRUB2.

Per reinstallare GRUB2 nel MBR, cambiando /dev/sda secondo le proprie esigenze. Si veda #Installazione del Bootloader per i dettagli.

Combinare UUID e scripting

Se si vogliono usare gli UUID per sopperire al mapping inaffidabile dei dispositivi effettuato dal BIOS, oppure si stanno avendo difficoltà con la sintassi di GRUB, ecco un esempio che usa gli UUID e un piccolo script per far puntare GRUB alle giuste partizioni. Tutto ciò che si dovrà fare, sarà sostituire gli UUID dell'esempio con quelli corretti per il proprio sistema (L'esempio si applica a sistemi con una partizione di boot separata e va modificato di conseguenza in caso di partizioni aggiuntive).

menuentry "Arch Linux 64" {
     # Si impostino gli UUID delle proprie partizioni di boot e root
     set the_boot_uuid=ece0448f-bb08-486d-9864-ac3271bd8d07   
     set the_root_uuid=c55da16f-e2af-4603-9e0b-03f5f565ec4a
   
     # (Nota: In caso non si disponga di una partizione di boot separata, i due UUID saranno uguali)
   
     # Otteniamo gli identificativi dei dispositivi contenenti le partizioni di boot/root e li impostiamo nelle variabili "grub_boot" e "root"
     search --fs-uuid --set=root $the_root_uuid      
     search --fs-uuid --set=grub_boot $the_boot_uuid
   
     # Controllo per verificare che boot e root siano uguali
     # Se lo sono, allora aggiungo "/boot" a $grub_root, dal momento che $grub_root è effettivamente la partizione di root
     if [ $the_boot_uuid == $the_root_uuid] ; then
         set grub_boot=$grub_boot/boot
     fi
   
     # $grub_boot indica ora il dispositivo corretto e i seguenti comandi saranno in grado di trovare il kernel e l'immagine initrd senza problemi
     linux ($grub_boot)/vmlinuz-linux root=/dev/disk/by-uuid/$uuid_os_root ro
     initrd ($grub_boot)/initramfs-linux.img
 }

Risoluzione dei problemi

Abilitare i messaggi di debug in GRUB2

Si aggiunga:

set pager=1
set debug=all

Al grub.cfg.

Correggere l'errore di GRUB2 "no suitable mode found"

Se si ottiene questo errore alla scelta di un'opzione di boot:

error: no suitable mode found
Booting however

Allora sarà necessario inizializzare il terminale grafico di GRUB2 (gfxterm), usando una modalità video appropriata (gfxmode). Quest'ultima viene passata da GRUB2 al kernel linux usando l'opzione gfxpayload. Sui sistemi UEFI, se la modalità video di GRUB2 non viene inizializzata, non verranno visualizzati i messaggi di boot del kernel (almeno fino all'attivazione del KMS).

Si copi /usr/share/grub/unicode.pf2 in ${GRUB2_PREFIX_DIR} (/boot/grub su sistemi BIOS e UEFI. Se GRUB2 UEFI è stato installato con l'opzione --boot-directory abilitata, allora il percorso è /boot/efi/EFI/grub).

# cp /usr/share/grub/unicode.pf2 ${GRUB2_PREFIX_DIR}

Se il file /usr/share/grub/unicode.pf2 non esiste, si installi il pacchetto bdf-unifont e si proceda alla creazione e copia dello stesso in ${GRUB2_PREFIX_DIR}.

# grub-mkfont -o unicode.pf2 /usr/share/fonts/misc/unifont.bdf

Nel file grub.cfg, si aggiungano le seguenti linee per consentire a GRUB2 di passare correttamente la modalità video al kernel, altrimenti si otterrà uno schermo nero, benchè il boot sia effettuato regolarmente senza che il sistema si blocchi:

Sistemi BIOS

insmod vbe

Sistemi UEFI

insmod efi_gop
insmod efi_uga

Si aggiunga poi il seguente codice (comune a sistemi BIOS e UEFI)

insmod font
if loadfont ${prefix}/fonts/unicode.pf2
then
    insmod gfxterm
    set gfxmode=auto
    set gfxpayload=keep
    terminal_output gfxterm
fi

Come si può notare, affinchè gfxterm funzioni correttamente, il font unicode.pf2 deve esistere in ${GRUB2_PREFIX_DIR}.

messaggio d'errore msdos-style

grub-setup: warn: This msdos-style partition label has no post-MBR gap; embedding won't be possible!
grub-setup: warn: Embedding is not possible. GRUB can only be installed in this setup by using blocklists.
            However, blocklists are UNRELIABLE and its use is discouraged.
grub-setup: error: If you really want blocklists, use --force.

Questo problema si verifica quando si tenta di installare GRUB2 in VMWare. Ulteriori informazioni qui. Si spera in un fix in tempi brevi.

Può anche verificarsi quando la partizione inizia subito dopo l'MBR (blocco 63), senza lasciare uno spazio di circa 1MB (2048 blocchi) prima dell'inizio della prima partizione. Si veda GRUB2 (Italiano)#Istruzioni specifiche per Master Boot Record (MBR)

GRUB2 UEFI torna alla shell

Se GRUB viene caricato, ma torna alla shell di ripristino senza errori, il grub.cfg potrebbe trovarsi in una posizione sbagliata o non esistere del tutto. Questo problema potrebbe verificarsi se GRUB2 UEFI è stato installato con l'opzione --boot-directory abilitata, e il file grub.cfg non esiste, OPPURE se il numero identificativo della partizione di boot è cambiato (tale valore è infatti "hardcoded" nel file grubx64.efi).

GRUB2 UEFI non viene caricato

In alcuni casi, EFI potrebbe non avviare correttamente GRUB. Assumendo che tutto sia stato installato nel modo giusto, l'output di:

efibootmgr -v

assomiglierà a questo:

BootCurrent: 0000
Timeout: 3 seconds
BootOrder: 0000,0001,0002
Boot0000* Grub HD(1,800,32000,23532fbb-1bfa-4e46-851a-b494bfe9478c)File(\efi\grub\grub.efi)
Boot0001* Shell HD(1,800,32000,23532fbb-1bfa-4e46-851a-b494bfe9478c)File(\EfiShell.efi)
Boot0002* Festplatte BIOS(2,0,00)P0: SAMSUNG HD204UI

EFI dovrebbe ora caricare GRUB correttamente. Se lo schermo diveta nero per qualche secondo e GRUB passa alla prossima opzione di boot, come scritto in questo post, spostare GRUB sulla partizione di root potrebbe aiutare.

L'opzione di boot deve essere eliminata e ricreata dopo l'operazione. Il campo relativo a grub dovrebbe ora essere simile a questo:

Boot0000* Grub HD(1,800,32000,23532fbb-1bfa-4e46-851a-b494bfe9478c)File(\grub.efi)

Invalid signature

Se si riceve l'errore "invalid signature" cercando di avviare Windows, ad esempio dopo aver alterato la tabella partizioni o aver aggiunto altri hard disks, si provi a rimuovere la configurazione dei dispositivi di GRUB e lasciare che lo stesso la rigeneri:

# mv /boot/grub/device.map /boot/grub/device.map-old
# grub-mkconfig -o /boot/grub/grub.cfg

grub-mkconfig dovrebbe ora mostrare tutte le opzioni di boot, incluso Windows. Se il problema è risolto, si rimuova /boot/grub/device.map-old.

Freeze al boot

Se il boot si blocca senza errori dopo che GRUB2 carica il kernel e l'eventuale ramdisk, si provi a rimuovere il parametro del kernel add_efi_memmap.

Ripristinare GRUB Legacy

  • Spostare i files di GRUB Legacy o GRUB2:
# mv /boot/grub /boot/grub.nonfunctional
  • Ripristinare il backup di GRUB Legacy in /boot:
# cp -a /path/to/backup/grub /boot/
  • Ripristinare il MBR e i 62 settori successivi del disco sda (PERICOLOSO):
# dd if=/path/to/backup/first-sectors of=/dev/sdX bs=512 count=1
Attenzione: Il comando sopra riportato ripristina anche la tabella delle partizioni. Si proceda con cautela.

Una soluzione più sicura è il ripristino del solo MBR:

# dd if=/path/to/backup/mbr-boot-code of=/dev/sdX bs=446 count=1

Riferimenti

  1. Manuale ufficiale di GRUB2 - http://www.gnu.org/software/grub/manual/grub.html
  2. Pagina del wiki di Ubuntu su GRUB2 - https://help.ubuntu.com/community/Grub2
  3. Pagina del wiki di GRUB2 che spiega come compilarlo per sistemi UEFI - http://help.ubuntu.com/community/UEFIBooting
  4. La pagina di Wikipedia relativa alla partizione di Boot del BIOS.

Link esterni

  1. Uno script Bash per compilare ed installare GRUB2 per BIOS da BZR
  2. Uno script Bash per compilare ed installare GRUB2 per UEFI da BZR