update-grub vs. grub-install?

update-grub, legalábbis a Debianban és rokonaiban, mint az Ubuntu, alapvetően csak egy burkolat a grub-mkconfig körül. Tehát a GRUB konfigurációt hozza létre/frissíti/újragenerálja, nem magát a tényleges bootloadert.

Mit csinál valójában a grub-install, az attól függ, hogy a GRUB melyik verzióját futtatod: hagyományos BIOS GRUB vagy UEFI GRUB?

A hagyományos BIOS GRUB esetében a grub-install (újra)írja a GRUB-nak a Master Boot Recordba ágyazott részét, és belekódolja a fizikai lemezblokkok számát, ahonnan a GRUB következő részét kell beolvasni. Azt is meghatározza, hogy a tényleges GRUB konfigurációs fájl (/boot/grub/grub.cfg) melyik partícióról lesz beolvasva. Fontos tényező itt a /boot/grub/device.map fájl, amely megmondja a GRUB-nak, hogy a BIOS (és így a GRUB) eszközszámozása hogyan illeszkedik a Linux lemezeszközökhöz.

Az UEFI GRUB esetében a GRUB bootloader fő része az EFI rendszerpartícióban található fájlként, jellemzően /boot/efi/EFI/<name of distribution>/grubx64.efi vagy hasonló néven. Ez a bootloader elérési útvonala a rendszer NVRAM-jában (= a BIOS-beállítások tárolásának helye) az UEFI bootváltozókban kerül tárolásra. A GRUB fő része lehet teljesen önálló (és annak kell lennie, ha Secure Boot van használatban!), vagy betölthet további funkciókat GRUB modulokként, jellemzően a /boot/grub könyvtárból a Linux disztribúcióból, amelynek része.

Az UEFI bootváltozók azonosítják a lemezt, amelyen a rendszer keresi az EFI rendszerpartíciót és a benne lévő bootloader fájlt. Ezeket a változókat maga is megtekintheti a efibootmgr -v parancs segítségével. A grub-install parancs frissíti ezeket a változókat, hacsak nem használja a --no-nvram opciót, hogy mást adjon meg.

A hagyományos BIOS és az UEFI esetében egyaránt a grub-install parancs futtatása frissítheti a bootloadert, hogy egy teljesen más GRUB konfigurációs fájlt olvasson egy teljesen más lemezen – bár ennek a folyamatnak a részletei teljesen mások lesznek.

Az UEFI esetében ténylegesen megváltoztathatja a rendszerindító eszköz kiválasztását az operációs rendszeren belül, a efibootmgr vagy a grub-install segítségével. De a grub-install egy hatalmas túlzás ehhez: ha mindkét telepítésed UEFI-s, és saját külön ESP partícióval rendelkezik, akkor saját UEFI bootváltozóik lesznek, és a kettő közötti választás könnyen elvégezhető a efibootmgr segítségével, vagy akár az UEFI BIOS beállításaiban.

A hagyományos BIOS-szal ez egy kicsit kuszább: meg kell győződnöd arról, hogy mindkét telepítés /boot/grub/device.map-ja az adott telepítés lemezét hd0-ként azonosítja, a másikat pedig hd1-ként. Ezután a grub-install használatával csak az egyes telepítések saját lemezére írja a bootloadert; az “ellenkező” lemezre soha. Így mindkét lemez teljesen önálló és bootolható lesz, még akkor is, ha a másik lemezt teljesen eltávolítjuk. Ha akarod, mindkét GRUB konfigurációs fájljaiban hozzáadhatsz egy olyan menüpontot, amely lehetővé teszi az “ellenkező” telepítés bootolását. Vagy egyszerűen a BIOS segítségével kiválaszthatod, hogy melyik lemezről bootolj.

Azt kell tudni, hogy a hagyományos BIOS-ok bootolási sorrendválasztója általában úgy működik, hogy a BIOS funkciói szempontjából a bootoláshoz kiválasztott lemez lesz az “első” lemez, és így a GRUB hd0 mindig “a BIOS-ban a bootoláshoz aktuálisan kiválasztott lemezre” fog hivatkozni.

Szóval, ha jelenleg a /dev/sda lemezről bootolsz (tehát a BIOS szerint a sda a hd0), és azt akarod, hogy a GRUB menüpont ezen a lemezen a /dev/sdb lemez boot menüjére váltson, akkor valami ilyesmit használsz:

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} 

… és ugyanígy a /dev/sdb GRUB konfigurációjában is.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.