Alcuni esempi trovati online dicono che update-grub dovrebbe essere eseguito DOPO grub-install. Altri invertono lordine. Quale è corretto?
Se ho due installazioni Linux (una su sda e una su sdb), se eseguo update-grub sullinstallazione sda, posizionerà linstallazione sda nella parte superiore dellavvio menù. Se eseguo update-grub sullinstallazione sdb, posizionerà linstallazione sdb nella parte superiore del menu.
Supponendo DEFAULT = 0, questo dovrebbe, in teoria, permettermi di selezionare il mio sistema operativo selezionando il dispositivo di avvio nel BIOS. “Grub-install / dev / sda” cambia il menu di avvio sda in modo che corrisponda allultimo “update-grub”, indipendentemente dal fatto che sia stato eseguito dalla versione sda o sdb di Linux?
Risposta
update-grub
, almeno in Debian e nei suoi parenti come Ubuntu, è fondamentalmente solo un involucro attorno a grub-mkconfig
. Quindi crea / aggiorna / rigenera la configurazione di GRUB, non il bootloader vero e proprio.
Ciò che grub-install
fa effettivamente dipende da quale versione di GRUB che stai utilizzando: BIOS tradizionale GRUB o UEFI GRUB?
Con il tradizionale BIOS GRUB, grub-install
(ri) scriverà la parte di GRUB incorporata nel Master Boot Record e codificherà in esso il blocco del disco fisico numeri da cui leggere la parte successiva di GRUB. Determinerà anche da quale partizione verrà letto il 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 BIOS (e quindi GRUB “s) si associ ai dispositivi disco Linux.
UEFI GRUB, la parte principale del bootloader GRUB si troverà come 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 archiviate le impostazioni del BIOS) nelle variabili di avvio UEFI. La parte principale di GRUB può essere completamente autonoma (e deve esserlo se è in uso Secure Boot!) Oppure può caricare funzionalità aggiuntive come moduli GRUB, tipicamente dalla directory /boot/grub
di la distribuzione Linux di cui fa parte.
Le variabili di avvio UEFI identificheranno il disco che il sistema dovrebbe utilizzare per cercare la partizione di sistema EFI e il file bootloader al suo interno. Puoi visualizzare queste variabili tu stesso, utilizzando efibootmgr -v
comando. Il comando grub-install
aggiornerà tali variabili, a meno che non utilizzi lopzione --no-nvram
per specificare altrimenti.
Di conseguenza, sia con il BIOS tradizionale che con UEFI, lesecuzione di grub-install
può aggiornare il bootloader per leggere un file di configurazione GRUB completamente diverso su un disco diverso, sebbene i dettagli di tale processo saranno completamente diversi.
Con UEFI, puoi effettivamente modificare la selezione del dispositivo di avvio dallinterno del sistema operativo, con efibootmgr
o grub-install
. Ma grub-install
è un enorme sovraccarico per questo: se entrambe le installazioni sono UEFI e hanno le proprie partizioni ESP separate, avranno le proprie variabili di avvio UEFI e la selezione tra di esse può essere facilmente eseguita con efibootmgr
, o addirittura nelle impostazioni UEFI BIOS.
Con il BIOS tradizionale, “è un po più complicato: ti consigliamo di assicurarti che ogni installazione” sia /boot/grub/device.map
identifica il disco di quella specifica installazione come hd0
e laltro come hd1
Quindi usa grub-install
per scrivere il bootloader solo sul disco di ciascuna installazione; mai al disco “opposto”. In questo modo, entrambi i dischi saranno completamente autonomi e avviabili anche se laltro disco viene completamente rimosso. Puoi aggiungere una voce di menu ai file di configurazione di ogni GRUB che ti permetterà di avviare linstallazione “opposta”, se lo desideri. Oppure puoi semplicemente usare il BIOS per selezionare il disco da cui avviare.
La cosa che devi sapere che il selettore dellordine di avvio dei BIOS tradizionali di solito funzionerà facendo in modo che il disco selezionato per lavvio sia il “primo” disco per le funzioni BIOS, quindi hd0
di GRUB farà sempre riferimento al “disco attualmente selezionato per lavvio nel BIOS”.
Quindi, se lo sei attualmente si avvia da /dev/sda
(quindi il BIOS dice che sda
è hd0
) e vuoi un Voce di menu GRUB su quel disco per passare al menu di avvio /dev/sdb
“, devi” usare qualcosa del tipo:
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 allo stesso modo anche nella configurazione GRUB di / dev / sdb.
grub-install
installa le parti binarie di GRUB,update-grub
produce solo il file di configurazione. Se è necessario reinstallare completamente GRUB, ' dico di eseguire primagrub-install
. Potrebbe effettivamente eseguireupdate-grub
per te come parte del lavoro; se ' non funziona, puoi eseguirlo da solo in seguito.