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

Några exempel som hittats online säger att update-grub ska köras EFTER grubinstallation. Andra gör om ordningen. Vilket är korrekt?

Om jag har två Linux-installationer (en på sda och en på sdb), om jag kör update-grub på sda-installationen, kommer den att placera sda-installationen högst upp på start meny. Om jag kör update-grub på sdb-installationen kommer den att placera sdb-installationen högst upp i menyn.

Förutsatt att DEFAULT = 0, skulle detta teoretiskt sett tillåta mig att välja mitt operativsystem genom att välja starta enheten i BIOS. Ändrar ”grub-install / dev / sda” sda-startmenyn så att den motsvarar den senaste ”update-grub”, oavsett om den kördes från sda- eller sdb-versionen av Linux?

Svar

update-grub, åtminstone i Debian och dess släktingar som Ubuntu, är i grunden bara ett omslag runt grub-mkconfig. Så det skapar / uppdaterar / regenererar GRUB -konfigurationen , inte själva bootloadern själv.

Vad grub-install faktiskt gör beror på vilken version av GRUB du kör: traditionell BIOS GRUB eller UEFI GRUB?

Med den traditionella BIOS GRUB kommer grub-install att (om) skriva den del av GRUB som är inbäddad i Master Boot Record och koda in det fysiska diskblocket nummer varifrån nästa del av GRUB ska läsas. Det kommer också att avgöra från vilken partition den faktiska GRUB-konfigurationsfilen (/boot/grub/grub.cfg) kommer att läsas. En viktig faktor här är /boot/grub/device.map -filen, som berättar för GRUB hur BIOS ”(och därför GRUB”) enhetsnummerering mappas till Linux-skivenheter.

Med UEFI GRUB, huvuddelen av GRUB-startladdaren kommer att finnas som en fil i EFI-systempartitionen, vanligtvis som /boot/efi/EFI/<name of distribution>/grubx64.efi eller liknande. Det här startladdarens söknamn lagras i system NVRAM (= platsen där BIOS-inställningar lagras) i UEFI-startvariablerna. Huvuddelen av GRUB kan vara helt fristående (och måste vara om Secure Boot används!) Eller så kan den ladda ytterligare funktioner som GRUB-moduler, vanligtvis från /boot/grub -katalogen Linux-distributionen som den är en del av.

UEFI-startvariablerna identifierar den skiva som systemet ska använda för att leta efter EFI-systempartitionen och bootloader-filen inuti den. Du kan se dessa variabler själv med hjälp av efibootmgr -v -kommando. Kommandot grub-install uppdaterar dessa variabler, såvida du inte använder alternativet --no-nvram för att ange något annat.

Som ett resultat, med både traditionell BIOS och UEFI, kan körning av grub-install uppdatera din bootloader så att den läser en helt annan GRUB-konfigurationsfil på en helt annan disk – även om detaljerna i den processen kommer att vara helt annorlunda.

Med UEFI kan du faktiskt ändra ditt val av startenhet inom operativsystemet, med antingen efibootmgr eller grub-install. Men grub-install är en enorm överdrift för det: om båda dina installationer är UEFI och har sina egna separata ESP-partitioner, kommer de att ha sina egna UEFI-startvariabler och att välja mellan dem kan enkelt göras med efibootmgr, eller verkligen i UEFI BIOS-inställningar.

Med traditionell BIOS är det lite messier: du vill se till att varje installation är /boot/grub/device.map identifierar disken för den specifika installationen som hd0, och den andra som hd1 Använd sedan grub-install för att bara skriva startladdaren till varje installations disk. aldrig till den ”motsatta” skivan. På det sättet kommer båda diskarna att vara helt fristående och startbara även om den andra disken är helt borttagen. Du kan lägga till ett menyalternativ på konfigurationsfilerna för varje GRUB som gör att du kan starta den ”motsatta” installationen, om du vill. Eller så kan du bara använda BIOS för att välja den skiva du vill starta från.

Det du måste veta att startordningens väljare för traditionella BIOS vanligtvis fungerar genom att göra skivan vald för att starta den ”första” skivan för BIOS-funktioner, och så kommer GRUB ”s hd0 alltid att hänvisa till” den skiva som för närvarande är vald för start i BIOS ”.

Så om du är startar för närvarande från /dev/sda (så BIOS säger sda är hd0), och du vill ha en GRUB-menyalternativ på den disken för att växla till /dev/sdb ”s startmeny, du skulle använda något 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 } 

… och även på / dev / sdb ”s GRUB-konfiguration också.

Kommentarer

  • så kör update-grub innan grub-installation (inte att det skulle göra skillnad, men för UEFI) eller tvärtom?
  • grub-install installerar de binära delarna av GRUB, update-grub producerar bara konfigurationsfilen. Om du behöver installera om din GRUB helt, säger jag ' kör grub-install först. Det kan faktiskt köra update-grub för dig som en del av jobbet – om det inte ' t kan du sedan köra det själv efteråt.
  • " egen UEFI-startvariabel s " – > Så om jag förstod rätt i en UEFI-inställning är UEFI start vars i NVRAM som en matris som anger startdisken? Vad händer om en disk misslyckas; kan man ange ett reservvärde / flera värden för denna matris? Till och med om jag förstod, kan användaren alltid kringgå UEFI-startvar genom att manuellt ange startdisken (effektivt vad UEFI-startvarian gör)? Tack.
  • @ninjagecko Din förståelse är korrekt men kanske ofullständig. UEFI-startvariablerna anger inte bara partitionen UUID att starta från, utan sökvägen för bootloader-filen, ett mänskligt läsbart namn och ett valfritt parameterfält. Och ja, du kan ange flera (uppsättningar) värden, ange ordningen för att försöka dem och till och med be systemet att starta ett specifikt alternativ ur normal ordning för just denna gång och sedan återuppta med normal ordning. Dessa är alla standardfunktioner i UEFI-specifikationen; firmwareförfattarna kan ge ännu fler alternativ om de vill.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *