Sommige online gevonden voorbeelden zeggen dat update-grub NADAT grub-install moet worden uitgevoerd. Anderen keren de volgorde om. Wat is correct?
Als ik twee Linux-installaties heb (één op sda en één op sdb), als ik update-grub op de sda-installatie draai, zal het de sda-installatie bovenaan de boot plaatsen menu. Als ik update-grub op de sdb-installatie draai, zal het de sdb-installatie bovenaan het menu plaatsen.
Aangenomen dat DEFAULT = 0, zou dit me theoretisch in staat moeten stellen om mijn OS te selecteren door de opstartapparaat in het BIOS. Verandert “grub-install / dev / sda” het sda-opstartmenu zodat het overeenkomt met de laatste “update-grub”, ongeacht of het werd uitgevoerd vanaf de sda- of sdb-versie van Linux?
Antwoord
update-grub
, in ieder geval in Debian en zijn verwanten zoals Ubuntu, is eigenlijk gewoon een wrapper rond grub-mkconfig
. Dus het maakt / actualiseert / regenereert de GRUB configuratie , niet de daadwerkelijke bootloader zelf.
Wat de grub-install
eigenlijk doet, hangt af van welke versie van GRUB die u gebruikt: traditionele BIOS GRUB of UEFI GRUB?
Met de traditionele BIOS GRUB, grub-install
zal het deel van de GRUB ingebed in de Master Boot Record (her) schrijven en daarin het fysieke schijfblok coderen nummers waar vandaan het volgende deel van GRUB moet worden gelezen. Het zal ook bepalen vanaf welke partitie het feitelijke GRUB-configuratiebestand (/boot/grub/grub.cfg
) zal worden gelezen. Een belangrijke factor hier is het /boot/grub/device.map
-bestand, dat GRUB vertelt hoe de apparaatnummering van BIOS (en dus GRUB) wordt toegewezen aan Linux-schijfapparaten.
Met de UEFI GRUB, het grootste deel van de GRUB-bootloader zal worden gelokaliseerd als een bestand in de EFI-systeempartitie, typisch als /boot/efi/EFI/<name of distribution>/grubx64.efi
of vergelijkbaar. Deze padnaam van de bootloader wordt opgeslagen in systeem-NVRAM (= de plaats waar BIOS-instellingen zijn opgeslagen) in de UEFI-opstartvariabelen. Het grootste deel van GRUB kan volledig op zichzelf staan (en moet zijn als Secure Boot in gebruik is!) 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-opstartvariabelen zullen de schijf identificeren die het systeem moet gebruiken om te zoeken naar de EFI-systeempartitie en het bootloader-bestand erin. Je kunt deze variabelen zelf bekijken met efibootmgr -v
commando. Het grub-install
commando zal deze variabelen updaten, tenzij je de --no-nvram
optie gebruikt om iets anders te specificeren.
Als resultaat, met zowel traditionele BIOS als UEFI, kan het draaien van grub-install
je bootloader updaten om een compleet ander GRUB-configuratiebestand te lezen op een volledig andere schijf – hoewel de details van dat proces compleet anders zullen zijn.
Met UEFI kunt u uw opstartapparaatselectie daadwerkelijk wijzigen vanuit het besturingssysteem, met ofwel efibootmgr
of grub-install
. Maar grub-install
is daarvoor een enorme overkill: als beide installaties UEFI zijn en hun eigen afzonderlijke ESP-partities hebben, hebben ze hun eigen UEFI-opstartvariabelen en kan er gemakkelijk tussen worden geselecteerd met efibootmgr
, of inderdaad in de UEFI BIOS-instellingen.
Met traditionele BIOS is het “een beetje rommeliger: je wilt er zeker van zijn dat elke installatie /boot/grub/device.map
identificeert de schijf van die specifieke installatie 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 “tegenovergestelde” schijf. Op die manier zijn beide schijven volledig stand-alone en opstartbaar, zelfs als de andere schijf volledig is verwijderd. Je kunt een menu-item toevoegen aan de configuratiebestanden van elke GRUB waarmee je de “tegenovergestelde” installatie kunt opstarten, als je wilt. Of je kunt gewoon het BIOS gebruiken om de schijf te selecteren om van op te starten.
Het ding dat je moet weten is dat de opstartvolgorde-selector van traditionele BIOSen gewoonlijk zal werken door de schijf te selecteren voor het opstarten van de “eerste” schijf. voor BIOS-functies, en dus zal GRUB “s hd0
altijd verwijzen naar” de schijf die momenteel is geselecteerd om op te starten in BIOS “.
Dus, als je dat bent momenteel aan het opstarten vanaf /dev/sda
(dus BIOS zegt sda
is hd0
), en je wilt een GRUB menu-item op die schijf om over te schakelen naar /dev/sdb
“s opstartmenu,” zou je iets gebruiken 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 ook op de GRUB-configuratie van / dev / sdb.
grub-install
installeert de binaire delen van GRUB,update-grub
produceert alleen het configuratiebestand. Als je GRUB volledig opnieuw moet installeren, zeg ik ' voer eerstgrub-install
uit. Het kan in feiteupdate-grub
voor u uitvoeren als onderdeel van de taak – als het niet ' t is, kunt u het daarna zelf uitvoeren.