opdater-grub vs. grub-installation?

Nogle eksempler fundet online siger, at update-grub skal køres EFTER grub-installation. Andre vender ordren om. Hvilket er korrekt?

Hvis jeg har to Linux-installationer (en på sda og en på sdb), hvis jeg kører update-grub på sda-installationen, placerer den sda-installationen øverst på boot menu. Hvis jeg kører update-grub på sdb-installationen, placerer den sdb-installationen øverst i menuen.

Forudsat at DEFAULT = 0, skal dette teoretisk set give mig mulighed for at vælge mit operativsystem ved at vælge boot-enhed i BIOS. Ændrer “grub-install / dev / sda” sda-startmenuen, så den svarer til den sidste “update-grub”, uanset om den blev kørt fra sda- eller sdb-versionen af Linux?

Svar

update-grub, i det mindste i Debian og dets slægtninge som Ubuntu, er dybest set bare en indpakning omkring grub-mkconfig. Så det opretter / opdaterer / regenererer GRUB konfigurationen , ikke selve bootloaderen i sig selv.

Hvad grub-install faktisk gør, afhænger af hvilken version af GRUB, du kører: traditionel BIOS GRUB eller UEFI GRUB?

Med den traditionelle BIOS GRUB vil grub-install (re) skrive den del af GRUB, der er indlejret i Master Boot Record, og indkode den fysiske diskblok til den. numre, hvorfra den næste del af GRUB skal læses. Den bestemmer også fra hvilken partition den faktiske GRUB-konfigurationsfil (/boot/grub/grub.cfg) læses. En vigtig faktor her er /boot/grub/device.map -filen, der fortæller GRUB, hvordan BIOS “s (og derfor GRUB” s) enhedsnummerering kortlægges til Linux-diskenheder.

Med UEFI GRUB, hoveddelen af GRUB-bootloaderen vil være placeret som en fil i EFI-systempartitionen, typisk som /boot/efi/EFI/<name of distribution>/grubx64.efi eller lignende. Dette bootloader-stienavn er gemt i system NVRAM (= det sted, hvor BIOS-indstillinger er gemt) i UEFI-opstartsvariablerne. Hoveddelen af GRUB kan være helt selvstændig (og skal være, hvis Secure Boot er i brug!), Eller den kan indlæse yderligere funktionalitet som GRUB-moduler, typisk fra /boot/grub -mappen Linux-distributionen, den er en del af.

UEFI-opstartsvariablerne identificerer den disk, som systemet skal bruge til at lede efter EFI-systempartitionen og bootloader-filen inde i den. Du kan selv se disse variabler ved hjælp af efibootmgr -v kommando. grub-install kommandoen opdaterer disse variabler, medmindre du bruger indstillingen --no-nvram for at angive andet.

Som et resultat med både traditionel BIOS og UEFI kan kørsel af grub-install opdatere din bootloader til at læse en helt anden GRUB-konfigurationsfil på en helt anden disk – selvom detaljerne i denne proces vil være helt forskellige.

Med UEFI kan du faktisk ændre dit valg af boot-enhed inden for operativsystemet med enten efibootmgr eller grub-install. Men grub-install er en massiv overkill for det: hvis begge dine installationer er UEFI og har deres egne separate ESP-partitioner, vil de have deres egne UEFI-opstartsvariabler, og det kan nemt gøres at vælge mellem dem med efibootmgr eller faktisk i UEFI BIOS-indstillinger.

Med traditionel BIOS er det lidt mere rodet: du vil sikre dig, at hver installation er /boot/grub/device.map identificerer disken for den specifikke installation som hd0, og den anden som hd1 Brug derefter grub-install til kun at skrive bootloaderen til hver installations diske; aldrig til den “modsatte” disk. På den måde vil begge diske være helt enkeltstående og starte, selvom den anden disk er helt fjernet. Du kan tilføje et menupunkt på konfigurationsfilerne for hver GRUB, der giver dig mulighed for at starte den “modsatte” installation, hvis du vil. Eller du kan bare bruge BIOS til at vælge den disk, der skal startes fra.

Det, du skal vide, at opstartsordrevælgeren til traditionelle BIOSer normalt fungerer ved at gøre disken valgt til at starte den “første” disk til BIOS-funktioner, og så vil GRUB “s hd0 altid henvise til” den disk, der aktuelt er valgt til opstart i BIOS “.

Så hvis du er starter i øjeblikket fra /dev/sda (så BIOS siger sda er hd0), og du vil have en GRUB-menupunkt på den disk for at skifte til /dev/sdb “s startmenu, du bruger noget som:

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 } 

… og ligeledes på / dev / sdb “s GRUB-konfiguration også.

Kommentarer

  • så kør update-grub før grub-installation (ikke at det skulle gøre en forskel, men for UEFI) eller det modsatte?
  • grub-install installerer de binære dele af GRUB, update-grub producerer kun konfigurationsfilen. Hvis du har brug for at geninstallere din GRUB, siger jeg ' d kør grub-install først. Det kan faktisk køre update-grub for dig som en del af jobbet – hvis det ikke ' t, kan du derefter køre det selv bagefter.
  • " egen UEFI-opstartsvariabel s " – > Så hvis jeg forstod korrekt i en UEFI-opsætning, er UEFI-opstartsvar i NVRAM som et array, der angiver bootdisken? Hvad sker der, hvis en disk fejler; kan man specificere en reserve / flere værdier for denne matrix? Foruden hvis jeg forstod det, kan brugeren altid omgå UEFI-opstartsvaren ved blot manuelt at specificere opstartsdisken (effektivt hvad UEFI-opstartsvar laver)? Tak.
  • @ninjagecko Din forståelse er korrekt, men måske ufuldstændig. UEFI-opstartsvariablerne angiver ikke kun den partition UUID, der skal startes fra, men stienavnet på bootloader-filen, et menneskeligt læsbart navn og et valgfrit parameterfelt. Og ja, du kan angive flere (sæt) værdier, angive rækkefølgen for at prøve dem i og endda fortælle systemet at starte en bestemt mulighed ud af den normale rækkefølge for netop dette en gang og derefter genoptage med den normale rækkefølge. Disse er alle standardfunktioner i UEFI-specifikationen; firmwareforfatterne kan give endnu flere muligheder, hvis de vil.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *