update-grub
, cel puțin în Debian și rudele sale, cum ar fi Ubuntu, este practic doar un înveliș în jurul lui grub-mkconfig
. Deci, creează/actualizează/regenerează configurația GRUB, nu încărcătorul de boot propriu-zis.
Ce face de fapt grub-install
depinde de versiunea de GRUB pe care o rulați: GRUB BIOS tradițional sau UEFI GRUB?
Cu BIOS GRUB tradițional, grub-install
va (re)scrie partea din GRUB încorporată în Master Boot Record și va codifica în ea numerele de blocuri ale discului fizic de unde să citească următoarea parte din GRUB. De asemenea, va determina din ce partiție va fi citit fișierul real de configurare GRUB (/boot/grub/grub.cfg
). Un factor important în acest caz este fișierul /boot/grub/device.map
, care indică GRUB modul în care numerotarea dispozitivelor din BIOS (și, prin urmare, din GRUB) se corelează cu dispozitivele discului Linux.
În cazul UEFI GRUB, partea principală a încărcătorului de pornire GRUB va fi localizată ca fișier în partiția de sistem EFI, de obicei ca /boot/efi/EFI/<name of distribution>/grubx64.efi
sau similar. Această cale de acces la încărcătorul de pornire este stocată în NVRAM de sistem (= locul în care sunt stocate setările BIOS) în variabilele de pornire UEFI. Partea principală a GRUB poate fi complet autonomă (și trebuie să fie dacă se utilizează Secure Boot!) sau poate încărca funcționalități suplimentare sub formă de module GRUB, de obicei din directorul /boot/grub
al distribuției Linux din care face parte.
Variabilele de pornire UEFI vor identifica discul pe care sistemul ar trebui să îl utilizeze pentru a căuta partiția de sistem EFI și fișierul bootloader din interiorul acesteia. Puteți vizualiza singuri aceste variabile, utilizând comanda efibootmgr -v
. Comanda grub-install
va actualiza aceste variabile, cu excepția cazului în care folosiți opțiunea --no-nvram
pentru a specifica altfel.
Ca urmare, atât cu BIOS-ul tradițional, cât și cu UEFI, rularea grub-install
vă poate actualiza încărcătorul de boot pentru a citi un fișier de configurare GRUB complet diferit pe un disc complet diferit – deși detaliile acestui proces vor fi complet diferite.
Cu UEFI, puteți schimba de fapt selecția dispozitivului de pornire din interiorul sistemului de operare, fie cu efibootmgr
, fie cu grub-install
. Dar grub-install
este o exagerare masivă pentru asta: dacă ambele dvs. instalații sunt UEFI și au propriile partiții ESP separate, ele vor avea propriile variabile de pornire UEFI și selectarea între ele se poate face cu ușurință cu efibootmgr
, sau chiar în setările UEFI BIOS.
Cu BIOS-ul tradițional, este un pic mai complicat: veți dori să vă asigurați că /boot/grub/device.map
al fiecărei instalații identifică discul acelei instalații specifice ca fiind hd0
, iar celălalt ca fiind hd1
. Apoi folosiți grub-install
pentru a scrie încărcătorul de pornire numai pe discul propriu al fiecărei instalații; niciodată pe discul „opus”. În acest fel, ambele discuri vor fi complet autonome și bootabile chiar dacă celălalt disc este complet eliminat. Puteți adăuga un element de meniu în fișierele de configurare ale fiecărui GRUB care să vă permită să porniți instalarea „opusă”, dacă doriți. Sau puteți pur și simplu să folosiți BIOS-ul pentru a selecta discul de pe care să porniți.
Ceea ce trebuie să știți este că selectorul de ordine de pornire al BIOS-urilor tradiționale va funcționa, de obicei, făcând ca discul selectat pentru pornire să fie „primul” disc pentru funcțiile BIOS și, astfel, hd0
din GRUB se va referi întotdeauna la „discul care este selectat în prezent pentru pornire în BIOS”.
Așa că, dacă în prezent porniți de pe /dev/sda
(deci BIOS spune că sda
este hd0
) și doriți ca un element de meniu GRUB de pe acel disc să treacă la meniul de pornire al lui /dev/sdb
, veți folosi ceva de genul:
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}
… și la fel și în configurația GRUB a lui /dev/sdb.