update-grub vs. grub-install?

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.

Reacties

  • dus voer update-grub uit voordat grub-install (niet dat het een verschil moet maken, maar voor UEFI) of het tegenovergestelde?
  • grub-install installeert de binaire delen van GRUB, update-grub produceert alleen het configuratiebestand. Als je GRUB volledig opnieuw moet installeren, zeg ik ' voer eerst grub-install uit. Het kan in feite update-grub voor u uitvoeren als onderdeel van de taak – als het niet ' t is, kunt u het daarna zelf uitvoeren.
  • " eigen UEFI-opstartvariabele s " – > Dus als ik het goed heb begrepen in een UEFI-setup, zijn de UEFI-opstartvars in NVRAM als een array die de opstartschijf specificeert? Wat gebeurt er als een schijf defect raakt; kan men een fallback / meerdere waarden van deze array specificeren? Verder, als ik het begreep, kan de gebruiker altijd de UEFI-opstart-var omzeilen door alleen de opstartschijf handmatig te specificeren (wat de UEFI-opstartvar eigenlijk doet)? Dank je.
  • @ninjagecko Je begrip is correct maar misschien onvolledig. De UEFI-opstartvariabelen specificeren niet alleen de partitie-UUID om vanaf te booten, maar ook de padnaam van het bootloader-bestand, een door mensen leesbare naam en een optioneel parameterveld. En ja, je kunt meerdere (sets van) waarden specificeren, de volgorde specificeren om ze in te proberen, en zelfs het systeem vertellen om een specifieke optie uit de normale volgorde voor slechts één keer op te starten, en vervolgens doorgaan met de normale volgorde. Dit zijn allemaal standaardfuncties van de UEFI-specificatie; de firmware-auteurs kunnen zelfs meer opties bieden als ze dat willen.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *