update-grub vs. grub-install?

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.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.