update-grub
, åtminstone i Debian och dess släktingar som Ubuntu, är i princip bara ett omslag runt grub-mkconfig
. Så den skapar/uppdaterar/genererar GRUB-konfigurationen, inte själva starthanteraren.
Vad grub-install
egentligen gör beror på vilken version av GRUB du kör: traditionell BIOS GRUB eller UEFI GRUB?
Med traditionell BIOS GRUB kommer grub-install
att (om)skriva den del av GRUB som är inbäddad i Master Boot Record och koda in de fysiska blocknumren på disken från vilka nästa del av GRUB ska läsas. Den bestämmer också från vilken partition den faktiska GRUB-konfigurationsfilen (/boot/grub/grub.cfg
) ska läsas. En viktig faktor här är /boot/grub/device.map
-filen, som talar om för GRUB hur BIOS:s (och därmed GRUB:s) enhetsnumrering motsvarar Linux disk-enheter.
Med UEFI GRUB kommer huvuddelen av GRUB-starthanteraren att ligga som en fil i EFI System Partition, vanligtvis som /boot/efi/EFI/<name of distribution>/grubx64.efi
eller liknande. Denna sökväg till starthanteraren lagras i systemets NVRAM (= platsen där BIOS-inställningarna lagras) i UEFI-startvariablerna. Huvuddelen av GRUB kan vara helt självständig (och måste vara det om Secure Boot används!) eller så kan den ladda in ytterligare funktionalitet som GRUB-moduler, vanligtvis från katalogen /boot/grub
i den Linuxdistribution som den är en del av.
Uefi-startvariablerna identifierar den disk som systemet ska använda för att leta efter EFI System Partition och bootloaderfilen i den. Du kan själv visa dessa variabler med hjälp av kommandot efibootmgr -v
. Kommandot grub-install
kommer att uppdatera dessa variabler, om 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 för att läsa 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 uppstartsenhet från operativsystemet, med antingen efibootmgr
eller grub-install
. Om båda dina installationer är UEFI och har sina egna separata ESP-partitioner kommer de att ha sina egna UEFI-startvariabler och valet mellan dem kan enkelt göras med efibootmgr
, eller i UEFI BIOS-inställningarna.
Med traditionell BIOS är det lite mer rörigt: du måste se till att varje installations /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 endast skriva starthanteraren till varje installations egen disk; aldrig till den ”motsatta” disken. På så sätt kommer båda diskarna att vara helt fristående och startbara även om den andra disken tas bort helt och hållet. Du kan lägga till ett menyalternativ i konfigurationsfilerna för varje GRUB som gör det möjligt att starta upp den ”motsatta” installationen, om du vill. Eller så kan du bara använda BIOS för att välja vilken disk som ska startas upp från.
Det du måste veta är att startordningsväljaren i traditionella BIOS vanligtvis fungerar genom att göra den disk som väljs för uppstart till den ”första” disken för BIOS-funktioner, och därför kommer GRUBs hd0
alltid att hänvisa till ”den disk som för närvarande är vald för uppstart i BIOS”.
Så, om du för närvarande startar från /dev/sda
(så BIOS säger att sda
är hd0
), och du vill att ett GRUB-menyalternativ på den disken ska växla till /dev/sdb
s uppstartsmeny, skulle du använda något i stil med:
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 likadant på /dev/sdb’s GRUB-konfiguration också.