update-grub
, ainakin Debianissa ja sen sukulaisissa, kuten Ubuntussa, on periaatteessa vain kääre grub-mkconfig
ympärillä. Se siis luo/päivittää/uudistaa GRUB-konfiguraation, ei varsinaista itse käynnistyslatausta.
Mitä grub-install
oikeastaan tekee, riippuu siitä, mitä GRUB-versiota käytät: perinteistä BIOS GRUBia vai UEFI GRUBia?
Perinteisessä BIOS GRUBissa grub-install
(uudelleen)kirjoittaa Master Boot Recordiin upotetun GRUBin osan ja koodaa siihen fyysisen levyn lohkonumerot, joista GRUBin seuraava osa luetaan. Se määrittää myös, mistä osiosta varsinainen GRUB-konfiguraatiotiedosto (/boot/grub/grub.cfg
) luetaan. Tärkeä tekijä tässä on /boot/grub/device.map
-tiedosto, joka kertoo GRUBille, miten BIOSin (ja siten GRUBin) laitenumerointi vastaa Linux-levylaitteita.
UEFI GRUBissa GRUB-käynnistyslatausohjelman pääosa sijaitsee tiedostona EFI-järjestelmän osiossa, tyypillisesti /boot/efi/EFI/<name of distribution>/grubx64.efi
tai vastaavassa muodossa. Tämä käynnistyslataajan polkunimi tallennetaan järjestelmän NVRAM-muistiin (= paikkaan, johon BIOS-asetukset tallennetaan) UEFI-käynnistysmuuttujiin. GRUBin pääosa voi olla täysin itsenäinen (ja sen on oltava, jos Secure Boot on käytössä!) tai se voi ladata lisätoimintoja GRUB-moduuleina, tyypillisesti sen Linux-jakelun /boot/grub
-hakemistosta, jonka osana se on.
UEFI-käynnistysmuuttujat tunnistavat levyn, jota järjestelmän pitäisi käyttää etsiäkseen EFI-järjestelmäosion ja sen sisällä olevan käynnistyslaturitiedoston. Voit tarkastella näitä muuttujia itse komennolla efibootmgr -v
. Komento grub-install
päivittää nämä muuttujat, ellet käytä --no-nvram
-vaihtoehtoa määrittääksesi toisin.
Siten sekä perinteisen BIOSin että UEFI:n kanssa komennon grub-install
suorittaminen voi päivittää käynnistyslataimen lukemaan täysin eri GRUB-konfiguraatiotiedostoa täysin eri levyltä – vaikka tämän prosessin yksityiskohdat ovatkin täysin erilaiset.
UEFI:ssä voit itse asiassa muuttaa käynnistyslaitevalintaa käyttöjärjestelmästä käsin joko efibootmgr
:llä tai grub-install
:llä. Mutta grub-install
on massiivinen ylilyönti sitä varten: jos molemmat asennuksesi ovat UEFI:tä ja niillä on omat erilliset ESP-osionsa, niillä on omat UEFI-käynnistysmuuttujansa, ja valinta niiden välillä voidaan helposti tehdä efibootmgr
:llä tai itse asiassa UEFI BIOS:n asetuksissa.
Perinteisellä BIOS:lla asia on hieman sotkuisempi: sinun on varmistettava, että kummankin asennuksen /boot/grub/device.map
:llä yksilöidään kyseisen asennuksen levyke hd0
:ksi ja toisella hd1
:ksi. Käytä sitten grub-install
:tä kirjoittaaksesi käynnistyslataimen vain kunkin asennuksen omalle levylle; ei koskaan ”vastakkaiselle” levylle. Näin molemmat levyt ovat täysin itsenäisiä ja käynnistyskelpoisia, vaikka toinen levy poistettaisiin kokonaan. Voit halutessasi lisätä kunkin GRUBin konfigurointitiedostoihin valikkokohdan, jonka avulla voit käynnistää ”vastakkaisen” asennuksen. Tai voit vain käyttää BIOS:ia valitsemaan levyn, jolta käynnistetään.
Tietääksesi sinun on tiedettävä, että perinteisten BIOS:ien käynnistysjärjestyksen valitsin toimii yleensä siten, että käynnistykseen valittu levy on BIOS:n toimintojen kannalta ”ensimmäinen” levy, joten GRUB:n hd0
viittaa aina ”siihen levyyn, joka on tällä hetkellä valittu BIOS:ssa käynnistystä varten”.
Jos siis käynnistät tällä hetkellä levyltä /dev/sda
(joten BIOS sanoo, että sda
on hd0
) ja haluat, että GRUBin valikkokohde kyseisellä levyllä vaihtaa /dev/sdb
:n käynnistysvalikkoon, käyttäisit jotakin seuraavanlaista:
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}
… ja samoin /dev/sdb:n GRUB-konfiguraatiossa myös.