update-grub
, przynajmniej w Debianie i jego krewnych jak Ubuntu, jest w zasadzie tylko opakowaniem wokół grub-mkconfig
. Tak więc tworzy/aktualizuje/regeneruje konfigurację GRUB-a, a nie sam bootloader.
Co właściwie robi grub-install
zależy od tego, jaką wersję GRUB-a używasz: tradycyjnego GRUB-a BIOS-owego czy GRUB-a UEFI?
W przypadku tradycyjnego GRUB-a BIOS-u, grub-install
zapisze (ponownie) część GRUB-a osadzoną w Master Boot Record i zakoduje w nim numery bloków dysku fizycznego, z których należy odczytać następną część GRUB-a. To także określi, z której partycji zostanie odczytany właściwy plik konfiguracyjny GRUB (/boot/grub/grub.cfg
). Ważnym czynnikiem jest plik /boot/grub/device.map
, który mówi GRUBowi jak numeracja urządzeń BIOSu (a więc i GRUBa) mapuje urządzenia dyskowe Linuksa.
W przypadku UEFI GRUB, główna część GRUB bootloadera będzie zlokalizowana jako plik w partycji systemowej EFI, zazwyczaj jako /boot/efi/EFI/<name of distribution>/grubx64.efi
lub podobnej. Ta ścieżka bootloadera jest przechowywana w systemowej NVRAM (= miejsce, gdzie przechowywane są ustawienia BIOSu) w zmiennych startowych UEFI. Główna część GRUB-a może być całkowicie samodzielna (i musi być, jeśli Secure Boot jest używany!) lub może ładować dodatkowe funkcje jako moduły GRUB-a, zazwyczaj z katalogu /boot/grub
dystrybucji Linuksa, której jest częścią.
Zmienne startowe UEFI zidentyfikują dysk, którego system powinien użyć do szukania partycji systemowej EFI i pliku bootloadera wewnątrz niej. Możesz samodzielnie wyświetlić te zmienne, używając polecenia efibootmgr -v
. Polecenie grub-install
zaktualizuje te zmienne, chyba że użyjesz opcji --no-nvram
, aby określić inaczej.
W rezultacie, zarówno w tradycyjnym BIOS-ie, jak i UEFI, uruchomienie grub-install
może zaktualizować twój bootloader, aby odczytał zupełnie inny plik konfiguracyjny GRUB-a na zupełnie innym dysku – chociaż szczegóły tego procesu będą zupełnie inne.
W przypadku UEFI można faktycznie zmienić wybór urządzenia rozruchowego z poziomu systemu operacyjnego, za pomocą efibootmgr
lub grub-install
. Ale grub-install
to ogromna przesada: jeśli obie instalacje są UEFI i mają swoje oddzielne partycje ESP, będą miały swoje własne zmienne rozruchowe UEFI i wybór między nimi można łatwo wykonać za pomocą efibootmgr
, a nawet w ustawieniach BIOS-u UEFI.
W przypadku tradycyjnego BIOS-u jest to trochę bardziej skomplikowane: będziesz chciał się upewnić, że /boot/grub/device.map
każdej instalacji identyfikuje dysk tej konkretnej instalacji jako hd0
, a drugiej jako hd1
. Następnie użyj grub-install
, aby zapisać bootloader tylko na własnym dysku każdej instalacji; nigdy na dysku „przeciwległym”. W ten sposób oba dyski będą całkowicie niezależne i bootowalne, nawet jeśli drugi dysk zostanie całkowicie usunięty. Możesz dodać element menu w plikach konfiguracyjnych każdego GRUB-a, który pozwoli Ci na uruchomienie „przeciwnej” instalacji, jeśli chcesz. Albo możesz po prostu użyć BIOS-u do wybrania dysku, z którego chcesz uruchomić system.
Musisz wiedzieć, że selektor kolejności bootowania w tradycyjnych BIOS-ach zazwyczaj działa w ten sposób, że dysk wybrany do bootowania jest „pierwszym” dyskiem dla funkcji BIOS-u, więc hd0
GRUB-a zawsze będzie odnosić się do „dysku, który jest aktualnie wybrany do bootowania w BIOS-ie”.
Więc, jeśli aktualnie startujesz z /dev/sda
(więc BIOS mówi, że sda
jest hd0
), i chcesz, aby pozycja menu GRUB na tym dysku przełączyła się na menu startowe /dev/sdb
, użyjesz czegoś takiego:
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 podobnie w konfiguracji GRUB dla /dev/sdb.