update-grub vs. grub-install? (Norsk)

Noen eksempler som er funnet online sier at oppdateringsgrub skal kjøres ETTER grubinstallasjon. Andre omgjør ordren. Hvilket er riktig?

Hvis jeg har to Linux-installasjoner (en på sda og en på sdb), hvis jeg kjører update-grub på sda-installasjonen, vil den plassere sda-installasjonen øverst på oppstarten Meny. Hvis jeg kjører update-grub på sdb-installasjonen, vil den plassere sdb-installasjonen øverst i menyen.

Forutsatt at DEFAULT = 0, bør dette teoretisk tillate meg å velge operativsystemet mitt ved å velge oppstartsenhet i BIOS. Endrer «grub-install / dev / sda» sda-oppstartsmenyen slik at den tilsvarer den siste «update-grub», uansett om den ble kjørt fra sda- eller sdb-versjonen av Linux?

Svar

update-grub, i det minste i Debian og dets slektninger som Ubuntu, er i utgangspunktet bare en omslag rundt grub-mkconfig. Så det oppretter / oppdaterer / regenererer GRUB -konfigurasjonen , ikke selve bootloaderen selv.

Hva grub-install faktisk gjør, avhenger av hvilken versjon av GRUB du kjører: tradisjonell BIOS GRUB eller UEFI GRUB?

Med den tradisjonelle BIOS GRUB vil grub-install (re) skrive den delen av GRUB som er innebygd i Master Boot Record, og kode inn i den fysiske diskblokken. tall fra hvor du skal lese neste del av GRUB. Den vil også avgjøre fra hvilken partisjon den faktiske GRUB-konfigurasjonsfilen (/boot/grub/grub.cfg) skal leses. En viktig faktor her er /boot/grub/device.map -filen, som forteller GRUB hvordan BIOS «(og derfor GRUB») enhetsnummerering tilordnes Linux-enheter.

Med UEFI GRUB, hoveddelen av GRUB-opplasteren vil være plassert som en fil i EFI-systempartisjonen, vanligvis som /boot/efi/EFI/<name of distribution>/grubx64.efi eller lignende. Dette sti-navnet på opplasteren er lagret i system NVRAM (= stedet der BIOS-innstillingene er lagret) i UEFI-oppstartsvariablene. Hoveddelen av GRUB kan være helt selvstendig (og må være hvis Secure Boot er i bruk!), Eller den kan laste inn ekstra funksjonalitet som GRUB-moduler, vanligvis fra /boot/grub -katalogen til Linux-distribusjonen den er en del av.

UEFI-oppstartsvariablene vil identifisere disken systemet skal bruke for å lete etter EFI System Partition og bootloader-filen i den. Du kan se disse variablene selv ved å bruke efibootmgr -v -kommando. Kommandoen grub-install oppdaterer disse variablene, med mindre du bruker alternativet --no-nvram for å spesifisere noe annet.

Som et resultat, med både tradisjonell BIOS og UEFI, kan kjøring av grub-install oppdatere bootloader for å lese en helt annen GRUB-konfigurasjonsfil på en helt annen disk – selv om detaljene i denne prosessen vil være helt forskjellige.

Med UEFI kan du faktisk endre valg av oppstartsenhet fra operativsystemet, med enten efibootmgr eller grub-install. Men grub-install er en massiv overkill for det: Hvis begge installasjonene dine er UEFI og har sine egne separate ESP-partisjoner, vil de ha sine egne UEFI-oppstartsvariabler, og det kan enkelt gjøres å velge mellom dem med efibootmgr, eller faktisk i UEFI BIOS-innstillingene.

Med tradisjonell BIOS er det litt rotere: du vil sørge for at hver installasjon er /boot/grub/device.map identifiserer disken til den spesifikke installasjonen som hd0, og den andre som hd1 Bruk deretter grub-install til å bare skrive bootloaderen til hver installasjons egen disk; aldri til «motsatt» disk. På den måten vil begge diskene være helt frittstående og starte opp, selv om den andre disken er helt fjernet. Du kan legge til et menyelement på konfigurasjonsfilene til hver GRUB som lar deg starte den «motsatte» installasjonen, hvis du vil. Eller du kan bare bruke BIOS til å velge disken du vil starte fra.

Det du må vite at oppstartsrekkefølgen for tradisjonelle BIOSer vanligvis vil fungere ved å gjøre disken valgt for å starte den «første» disken. for BIOS-funksjoner, og så vil GRUB «s hd0 alltid referere til» disken som er valgt for oppstart i BIOS «.

Så hvis du er starter for øyeblikket fra /dev/sda (så BIOS sier sda er hd0), og du vil ha en GRUB-menyelement på den disken for å bytte til /dev/sdb «s oppstartsmeny, du bruker noe sånt 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 på samme måte på / dev / sdb «s GRUB-konfigurasjon også.

Kommentarer

  • så kjør update-grub før grub-install (ikke at det skal utgjøre en forskjell, men for UEFI) eller det motsatte?
  • grub-install installerer de binære delene av GRUB, update-grub produserer bare konfigurasjonsfilen. Hvis du trenger å installere GRUB på nytt helt, sier jeg ' jeg kjører grub-install først. Den kan faktisk kjøre update-grub for deg som en del av jobben – hvis den ikke ' t, kan du kjøre den selv etterpå.
  • " egen UEFI-oppstartsvariabel s " – > Så hvis jeg forsto riktig i et UEFI-oppsett, er UEFI-oppstartsvar i NVRAM som en matrise som spesifiserer oppstartsdisken? Hva skjer hvis en disk mislykkes; kan man spesifisere en reserve / flere verdier for denne matrisen? Fortsatt, hvis jeg forsto det, kan brukeren alltid omgå UEFI-oppstartsvaren ved bare å spesifisere oppstartsdisken manuelt (effektivt hva UEFI oppstartsvar gjør)? Takk.
  • @ninjagecko Din forståelse er riktig, men kanskje ufullstendig. UEFI-oppstartsvariablene spesifiserer ikke bare partisjonen UUID å starte fra, men stienavnet til bootloader-filen, et lesbart navn og et valgfritt parameterfelt. Og ja, du kan spesifisere flere (sett med) verdier, spesifisere rekkefølgen du vil prøve dem i, og til og med be systemet om å starte et spesifikt alternativ ut av normal rekkefølge for akkurat denne gangen, og deretter fortsette med normal rekkefølge. Dette er alle standardfunksjonene til UEFI-spesifikasjonen; firmwareforfatterne kan gi enda flere alternativer hvis de vil.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *