User Tools

Site Tools


doc:appunti:linux:tux:grub

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
doc:appunti:linux:tux:grub [2014/04/04 11:54] – [Installazione di GRUB] niccolodoc:appunti:linux:tux:grub [2025/07/18 15:47] (current) – [GRUB su sistema EFI dual boot] niccolo
Line 103: Line 103:
 ^ /etc/grub.d/         | Snippet usati da ''update-grub'' per generare il menu.  | ^ /etc/grub.d/         | Snippet usati da ''update-grub'' per generare il menu.  |
  
 +**ATTENZIONE**! Non fare confusione tra l'UUID del block device (utilizzato nei contesti di cui sopra) e l'**UUID dei volumi RAID**. Questi ultimi si visualizzano con il comando:
 +
 +<code>
 +mdadm --detail /dev/md0
 +</code>
 +
 +oppure eseguendo **''/usr/share/mdadm/mkconf''**. L'UUID dei volumi RAID sono usati solo nel contesto di assemblaggio dei volumi stessi, quindi nel file **''/etc/mdadm/mdadm.conf''**.
 ===== fdisk e modo DOS-compatibile ===== ===== fdisk e modo DOS-compatibile =====
  
Line 144: Line 151:
 mklabel gpt mklabel gpt
  
-mkpart primary   1.0MB   10.0MB                                   +mkpart primary   1.0MB   10.0MB 
-mkpart primary  10.0MB   60.0GB                                   +mkpart primary  10.0MB   60.0GB 
-mkpart primary  60.0GB   80.0GB                                   +mkpart primary  60.0GB   80.0GB 
-mkpart primary  80.0GB  200.0GB                                   +mkpart primary  80.0GB  200.0GB 
-mkpart primary 200.0GB  100%                                     +mkpart primary 200.0GB  100%
  
 name 2 rootfs name 2 rootfs
Line 162: Line 169:
 set 1 bios_grub on set 1 bios_grub on
 </code> </code>
 +
 +Se si vuole utilizzare unità di misura più precise, ad esempio il byte, dare il comando **''unit B''**.
  
 Il risultato visibile con **''print''** è il seguente: Il risultato visibile con **''print''** è il seguente:
Line 265: Line 274:
  
 Come impostare il modo video per GRUB e per il kernel che viene avviato: vedere la pagina **[[..:sa:console]]**. Come impostare il modo video per GRUB e per il kernel che viene avviato: vedere la pagina **[[..:sa:console]]**.
 +
 +===== Bootstrap dal prompt grub> =====
 +
 +Vedere questo tutorial: [[http://tuxers.com/main/instigating-a-manual-boot-from-the-grub-prompt/|Instigating a Manual Boot from the GRUB Prompt]].
 +
 +La sequenza minimale per avviare dal prompt **''grub>''** è la seguente:
 +
 +<code>
 +ls
 +set root=(md/4)
 +linux /vmlinuz ro root=/dev/md4
 +initrd /initrd.img
 +boot
 +</code>
 +
 +Con il primo comando si elencano i filesystem riconosciuti dai quali è possibile leggere l'immagine del kernel e dell'initrd. La riga di comando per caricare il kernel deve indicare il root filesystem, si può utilizzare il nome del device oppure l'UUID con **''root=UUID=''**. L'UUID di un filesystem si può vedere in **''/dev/disk/by-uuid/''** oppure con il comando **''dumpe2fs''**.
 +
 +===== Installare GRUB in un'altra partizione =====
 +
 +Questa la sequenza tipica di boot con GRUB (verificare con lo script **bootinfoscript**):
 +
 +  - **MBR** di /dev/sda -> carica ''core.img'' dal settore 1 di ''/dev/sda''
 +  - **core.img** -> cerca un filesystem, ad esempio tramite //MD UUID//
 +  - Filesystem **''/boot/grub/''** -> esegue il menut ''grub.cfg''
 +
 +Se si vuole abilitare il GRUB che sta su in filesystem diverso (es. ''/dev/md4'') da quello di boot (es. ''/dev/md0''):
 +
 +<code>
 +mount /dev/md4 /mnt
 +grub-install --boot-directory=/mnt/boot /dev/sda
 +</code>
 +
 +===== GRUB su sistema EFI =====
 +
 +I PC a partire dall'anno 2010 dovrebbero supportare nel BIOS il bootstrap secondo lo standard **[[wpit>UEFI]]** che si contrappone al vecchio sistema dell'MBR che viene quindi chiamato generalmente **legacy**. Nella configurazione legacy il codice di GRUB si installa, oltre che nel settore MBR, anche in una partizione dedicata identificata dal flag **bios_grub**. In una installazione EFI invece è necessario creare sul disco una partizione FAT32 generalmente identificata dai flag **boot** ed **esp**.
 +
 +Il boot legacy oppure EFI viene generalmente impostato nel programma di setup del BIOS, una volta effettuato il bootstrap in GNU/Linux è possibile sapere se il sistema è EFI verificando l'esistenza della pseudo directory **/sys/firmware/efi/**. Il programma **grub-install** è in grado di determinare l'impostazione del sistema e installare GRUB nello spazio opportuno.
 +
 +===== GRUB su sistema EFI dual boot =====
 +
 +Vedere questa [[https://wiki.debian.org/GrubEFIReinstall|guida]].
 +
 +Scenario: installazione Debian Wheezy su disco con Windows 7, che si avvia in modalità EFI.
 +
 +Fortunatamente Windows 7 consente il ridimensionamento della partizione direttamente dal disk manager nativo. Dopo aver effettuato l'installazione Debian da CD o chiavetta USB si scopre che il boot manager (EFI) è rimasto inalterato e si avvia solo Windows 7.
 +
 +Occorre riavviare da chiavetta USB, modalità rescue, e fare l'installazione di Grub sulla partizione EFI. Bisogna guadagnare una shell chroot nell'ambiente target (montando ''/dev'', ''/dev/pts'', ''/proc'' e ''/sys'', ecc.)
 +
 +Se la partizione EFI è ''/dev/sda'' si fa qualcosa del genere:
 +
 +<code>
 +mount /dev/sda1 /boot/efi
 +apt-get install --reinstall grub-efi
 +grub-install /dev/sda
 +</code>
 +
 +Nel caso in cui si esegua nuovamente **''grub-install''**, ricordarsi sempre di montare prima la partizione EFI in ''/boot/efi'', altrimenti la voce Windows 7 nel menu di Grub viene persa.
 +
 +===== GRUB su sistema EFI con due dischi RAID1 =====
 +
 +Se installiamo GNU/Linux su due dischi sfruttando la funzionalità **RAID1** (mirroring), il boot loader GRUB dovrà essere installato separatamente **su entrambi i dischi** in due partizioni che non siano assemblate in RAID, questo perché il BIOS EFI è in grado di fare boot da una partizione FAT, ma non da un volume RAID1 GNU/Linux.
 +
 +Dopo una normale installazione il boot loader sarà installato su una partizione **FAT32** del primo disco, ad esempio **/dev/sda1**. Con gli opportuni comandi si potrà creare una analoga partizione **/dev/sdb1** sul secondo disco, copiarci il boot loader e istruire EFI per tenere conto di questa nuova eventuale **boot entry**.
 +
 +<code>
 +mkfs.fat -F 32 /dev/sdb1
 +mount /dev/sdb1 /mnt
 +cp -pr /boot/efi/EFI /mnt
 +umount /mnt
 +</code>
 +
 +Con **efibootmgr** si ispezione lo stato corrente del boot manager EFI:
 +
 +<code>
 +efibootmgr
 +BootCurrent: 0002
 +Timeout: 0 seconds
 +BootOrder: 0002,0004
 +Boot0002* debian
 +Boot0004* Windows Boot Manager
 +</code>
 +
 +Si vede che la prima voce di boot 0002 è Debian ed è rimasta traccia del boot Windows 0004, sebbene questo sistema operativo non sia più presente sul disco. La voce relativa a Windows può essere rimossa:
 +
 +<code>
 +efibootmgr --delete-bootnum --bootnum 0004
 +</code>
 +
 +Quindi aggiungere una nuova voce di boot al BIOS EFI:
 +
 +<code>
 +efibootmgr --bootnum 0003 --create --disk /dev/sda --part 1 --label "debian disk#2" --loader "/EFI/debian/shimx64.efi"
 +efibootmgr --bootorder 0002,0003
 +</code>
 +
 +Infine si verifica che tutte le informazioni siano corrette:
 +
 +<code>
 +efibootmgr --verbose
 +BootCurrent: 0002
 +Timeout: 0 seconds
 +BootOrder: 0002,0003
 +Boot0002* debian        HD(2,GPT,f6ffff5f...,0x5000,0x13000)/File(\EFI\debian\shimx64.efi)
 +Boot0003* debian disk#2 HD(2,GPT,55c28cee...,0x5000,0x13000)/File(\EFI\debian\shimx64.efi)
 +</code>
 +
 +L'id mostrato è il PARTUUID della partizione, che può essere ispezionato con **blkid**:
 +
 +<code>
 +blkid /dev/sdb1
 +/dev/sda2: UUID="5B59-E4A5" BLOCK_SIZE="512" TYPE="vfat" PARTLABEL="primary" PARTUUID="55c28cee..."
 +</code>
 +
 +===== Boot interattivo dal prompt grub> =====
 +
 +Se se interrompe il bootstrap oppure l'host non riesce a completare il normale boot, è possibile avviare manualmente un boostrap alternativo dal prompt **%%grub>%%** (ammesso che esista un kernel e una initrd valida). Ecco un esempio che utilizza il kernel dalla partizione RAID **/dev/md4**.
 +
 +<code>
 +grub> ls (md/4)/boot
 +initrd.img-6.1.0-25-amd64 vmlinuz-6.1.0-25-amd64 ...
 +
 +grub> set prefix=(md/4)/boot/grub
 +grub> set root=(md/4)
 +
 +grub> linux /boot/vmlinuz-3.13.0-29-generic root=/dev/md4
 +grub> initrd /boot/initrd.img-3.13.0-29-generic
 +grub> boot
 +</code>
 +
 +La sintassi **%%(md/4)%%** viene utilizzata per indicare le partizioni RAID. La sintassi per indicare la partizioni normali di un disco SATA è invece del tipo **%%(hd0,1)%%**, dove i dischi fissi sono numerati a partire da **zero** e le partizioni a partire da **1**.
 +
 +
 +===== GRUB_DEFAULT Selezione kernel predefinito =====
 +
 +Le nuove installazioni di GRUB2 hanno il menu di avvio organizzato in **menuentry** e **submenu**. Per selezionare come predefinita una delle opzioni, si edita **''/etc/default/grub''**.
 +
 +L'indice di ogni voce inizia da zero, quindi se il sumbenu appare in posizione 2 e si vuole selezionare la quarta menuentry di tale submemu, si deve mettere:
 +
 +<file>
 +GRUB_DEFAULT="1>3"
 +</file>
 +
 +quindi eseguire **update-grub**.
 +
 +Questo è un esempio di un menu gerarchico di GRUB come appare nel file **/boot/grub/grub.cfg**:
 +
 +<code>
 +menuentry 'Debian GNU/Linux' --class debian --class gnu-linux ...
 +submenu 'Advanced options for Debian GNU/Linux' ...
 +        menuentry 'Debian GNU/Linux, with Linux 6.1.0-37-amd64' --class debian ...
 +        menuentry 'Debian GNU/Linux, with Linux 6.1.0-37-amd64 (recovery mode)' ...
 +        menuentry 'Debian GNU/Linux, with Linux 6.1.0-35-amd64' --class debian ...
 +        menuentry 'Debian GNU/Linux, with Linux 6.1.0-35-amd64 (recovery mode)' ...
 +menuentry "Memory test (memtest86+x64.bin)"  ...
 +menuentry 'Memory test (memtest86+x64.bin, serial console)'  ...
 +</code>
 +
 +La prima voce è quella predefinita, è di tipo **menuentry** ed è selezionarta con **GRUB_DEFAULT=0**. La seconda voce è di tipo **submenu** con quattro sotto-voci. Quindi - ad esempio - per selezionare il boot con kernel **6.1.0-35-amd64** in **recovery mode** si deve indicare la voce **%%GRUB_DEFAULT=1>3%%**.
 +
 +
doc/appunti/linux/tux/grub.1396605296.txt.gz · Last modified: by niccolo