update-grub
, almeno in Debian e nei suoi parenti come Ubuntu, è fondamentalmente solo un wrapper intorno a grub-mkconfig
. Quindi crea/aggiorna/rigenera la configurazione di GRUB, non il bootloader vero e proprio.
Cosa fa effettivamente grub-install
dipende da quale versione di GRUB si sta eseguendo: GRUB BIOS tradizionale o UEFI GRUB?
Con il BIOS GRUB tradizionale, grub-install
(ri)scrive la parte di GRUB incorporata nel Master Boot Record, e codifica in esso i numeri di blocco del disco fisico da dove leggere la parte successiva di GRUB. Determinerà anche da quale partizione verrà letto l’effettivo file di configurazione di GRUB (/boot/grub/grub.cfg
). Un fattore importante qui è il file /boot/grub/device.map
, che dice a GRUB come la numerazione dei dispositivi del BIOS (e quindi di GRUB) mappano i dispositivi del disco Linux.
Con UEFI GRUB, la parte principale del bootloader di GRUB si trova come un file nella partizione di sistema EFI, tipicamente come /boot/efi/EFI/<name of distribution>/grubx64.efi
o simile. Questo percorso del bootloader è memorizzato nella NVRAM di sistema (= il luogo in cui sono memorizzate le impostazioni del BIOS) nelle variabili di avvio UEFI. La parte principale di GRUB può essere completamente autonoma (e deve esserlo se è in uso il Secure Boot!) o può caricare funzionalità aggiuntive come moduli GRUB, tipicamente dalla directory /boot/grub
della distribuzione Linux di cui fa parte.
Le variabili di avvio UEFI identificheranno il disco che il sistema dovrebbe usare per cercare la partizione di sistema EFI e il file del bootloader al suo interno. Puoi vedere queste variabili tu stesso, usando il comando efibootmgr -v
. Il comando grub-install
aggiornerà queste variabili, a meno che non si utilizzi l’opzione --no-nvram
per specificare altrimenti.
Come risultato, sia con il BIOS tradizionale che con UEFI, l’esecuzione di grub-install
può aggiornare il bootloader per leggere un file di configurazione GRUB completamente diverso su un disco completamente diverso – anche se i dettagli di quel processo saranno completamente diversi.
Con UEFI, si può effettivamente cambiare la selezione del dispositivo di avvio dall’interno del sistema operativo, con efibootmgr
o grub-install
. Ma grub-install
è un’esagerazione: se entrambe le vostre installazioni sono UEFI e hanno le loro partizioni ESP separate, avranno le loro variabili di avvio UEFI e la selezione tra di esse può essere fatta facilmente con efibootmgr
, o nelle impostazioni del BIOS UEFI.
Con il BIOS tradizionale, è un po’ più complicato: dovrete assicurarvi che il /boot/grub/device.map
di ogni installazione identifichi il disco di quella specifica installazione come hd0
, e l’altra come hd1
. Poi usate grub-install
per scrivere il bootloader solo sul disco di ogni installazione; mai sul disco “opposto”. In questo modo, entrambi i dischi saranno completamente autonomi e avviabili anche se l’altro disco viene completamente rimosso. È possibile aggiungere una voce di menu nei file di configurazione di ogni GRUB che vi permetterà di avviare l’installazione “opposta”, se volete. Oppure si può semplicemente usare il BIOS per selezionare il disco da cui avviare.
La cosa da sapere è che il selettore dell’ordine di avvio dei BIOS tradizionali di solito funziona rendendo il disco selezionato per l’avvio il “primo” disco per le funzioni del BIOS, e quindi il hd0
di GRUB farà sempre riferimento al “disco attualmente selezionato per l’avvio nel BIOS”.
Quindi, se si sta attualmente avviando da /dev/sda
(quindi il BIOS dice che sda
è hd0
), e si vuole che una voce di menu di GRUB su quel disco passi al menu di avvio di /dev/sdb
, si dovrebbe usare qualcosa come:
menuentry "Switch to /dev/sdb"{ # flip the disk mappings and reload configuration drivemap -s (hd0) (hd1) set root=<the identifier for sdb's partition that contains grub.cfg> configfile /boot/grub/grub.cfg # or just /grub/grub.cfg is /boot is a separate partition}
… e lo stesso vale per la configurazione GRUB di /dev/sdb.