update-grub
, tenminste in Debian en zijn verwanten zoals Ubuntu, is in principe slechts een omhulsel rond grub-mkconfig
. Dus het creëert/updates/regenereert de GRUB configuratie, niet de eigenlijke bootloader zelf.
Wat de grub-install
eigenlijk doet hangt af van welke versie van GRUB je draait: traditionele BIOS GRUB of UEFI GRUB?
Met de traditionele BIOS GRUB, zal grub-install
het deel van GRUB dat in de Master Boot Record is opgenomen (her)schrijven, en daarin de fysieke schijfblok nummers coderen van waaruit het volgende deel van GRUB moet worden gelezen. Het zal ook bepalen van welke partitie het eigenlijke GRUB configuratiebestand (/boot/grub/grub.cfg
) zal worden gelezen. Een belangrijke factor hier is het /boot/grub/device.map
bestand, dat GRUB vertelt hoe BIOS (en dus GRUB’s) apparaat nummering zich verhoudt tot Linux schijf apparaten.
Met de UEFI GRUB, zal het belangrijkste deel van de GRUB bootloader zich bevinden als een bestand in de EFI Systeem Partitie, meestal als /boot/efi/EFI/<name of distribution>/grubx64.efi
of iets dergelijks. Deze padnaam van de bootloader wordt opgeslagen in systeem-NVRAM (= de plaats waar BIOS-instellingen worden opgeslagen) in de UEFI-opstartvariabelen. Het hoofdgedeelte van GRUB kan volledig op zichzelf staan (en moet dat zijn als Secure Boot wordt gebruikt!) of het kan extra functionaliteit laden als GRUB modules, typisch uit de /boot/grub
directory van de Linux distributie waar het deel van uitmaakt.
De UEFI boot variabelen identificeren de schijf die het systeem moet gebruiken om te zoeken naar de EFI Systeem Partitie en het bootloader bestand daarin. U kunt deze variabelen zelf bekijken, met het efibootmgr -v
commando. Het grub-install
commando zal deze variabelen updaten, tenzij u de --no-nvram
optie gebruikt om anders te specificeren.
Dus, met zowel traditioneel BIOS als UEFI, kan het uitvoeren van grub-install
uw bootloader updaten om een geheel ander GRUB configuratiebestand op een geheel andere schijf te lezen – hoewel de details van dat proces geheel anders zullen zijn.
Met UEFI, kunt u daadwerkelijk uw boot device selectie vanuit het OS veranderen, met ofwel efibootmgr
of grub-install
. Maar grub-install
is een enorme overkill voor dat: als beide installaties UEFI zijn en hun eigen aparte ESP partities hebben, zullen ze hun eigen UEFI boot variabelen hebben en het selecteren tussen hen kan gemakkelijk worden gedaan met efibootmgr
, of inderdaad in de UEFI BIOS instellingen.
Met traditionele BIOS, is het een beetje rommeliger: je zult ervoor moeten zorgen dat /boot/grub/device.map
van elke installatie de schijf van die specifieke installatie identificeert als hd0
, en de andere als hd1
. Gebruik dan grub-install
om de bootloader alleen naar de eigen schijf van elke installatie te schrijven; nooit naar de “tegenoverliggende” schijf. Op die manier zullen beide schijven volledig stand-alone en bootable zijn, zelfs als de andere schijf volledig verwijderd wordt. U kunt een menu-item toevoegen aan de configuratiebestanden van elke GRUB die u toelaat om de “tegenovergestelde” installatie te booten, als u dat wenst. Of je kunt gewoon de BIOS gebruiken om de schijf te selecteren waarvan opgestart moet worden.
Hetgeen je moet weten is dat de boot volgorde selector van traditionele BIOSen meestal zal werken door de schijf die geselecteerd is om op te starten de “eerste” schijf te maken voor BIOS functies, en dus zal GRUB’s hd0
altijd verwijzen naar “de schijf die momenteel geselecteerd is om op te starten in BIOS”.
Dus, als je momenteel boot van /dev/sda
(dus BIOS zegt dat sda
hd0
is), en je wilt een GRUB menu item op die schijf om te schakelen naar /dev/sdb
’s boot menu, dan gebruik je iets als:
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}
… en evenzo op /dev/sdb’s GRUB configuratie ook.