Niektóre przykłady znalezione w Internecie mówią, że update-grub powinien być uruchamiany PO instalacji grub. Inni odwracają kolejność. Która jest poprawna?
Jeśli mam dwie instalacje Linuksa (jedną na sda i jedną na sdb), jeśli uruchomię update-grub na instalacji sda, instalacja sda zostanie umieszczona na górze bootowania menu. Jeśli uruchomię update-grub na instalacji sdb, instalacja sdb zostanie umieszczona na górze menu.
Zakładając DEFAULT = 0, teoretycznie powinno to pozwolić mi wybrać mój system operacyjny poprzez wybranie urządzenie rozruchowe w systemie BIOS. Czy „grub-install / dev / sda” zmienia menu startowe sda tak, aby odpowiadało ostatniemu „update-grub”, niezależnie od tego, czy zostało uruchomione z wersji Linuksa sda czy sdb?
Odpowiedź
update-grub
, przynajmniej w Debianie i jego krewnych, takich jak Ubuntu, jest po prostu opakowaniem wokół grub-mkconfig
. Więc tworzy / aktualizuje / regeneruje konfigurację GRUB-a, a nie sam program ładujący.
To, co faktycznie robi grub-install
, zależy od tego wersja GRUB, której używasz: tradycyjny BIOS GRUB czy UEFI GRUB?
W tradycyjnym BIOS-ie GRUB, grub-install
zapisze (ponownie) część GRUB-a osadzoną w głównym rekordzie rozruchowym i zakoduje do niego fizyczny blok dysku numery skąd czytać następną część GRUB. Określa również, z której partycji zostanie odczytany rzeczywisty plik konfiguracyjny GRUB (/boot/grub/grub.cfg
). Ważnym czynnikiem jest tutaj plik /boot/grub/device.map
, który informuje GRUB o tym, w jaki sposób numeracja urządzeń w systemie BIOS (a tym samym i GRUBie) jest mapowana na urządzenia dyskowe Linuksa.
Z UEFI GRUB, główna część programu ładującego GRUB zostanie umieszczona jako plik na partycji systemowej EFI, zwykle jako /boot/efi/EFI/<name of distribution>/grubx64.efi
lub podobnie. Ta nazwa ścieżki programu ładującego jest przechowywana w systemowej pamięci NVRAM (= miejsce, w którym przechowywane są ustawienia systemu BIOS) w zmiennych rozruchowych UEFI. Główna część GRUB-a może być całkowicie niezależna (i musi być, jeśli używany jest Bezpieczny rozruch!) Lub może ładować dodatkowe funkcje jako moduły GRUB, zazwyczaj z katalogu /boot/grub
w dystrybucja Linuksa, której jest częścią.
Zmienne rozruchowe UEFI zidentyfikują dysk, którego system powinien użyć do wyszukania partycji systemowej EFI i znajdującego się w niej pliku bootloadera. Możesz wyświetlić te zmienne samodzielnie, używając Polecenie efibootmgr -v
. Polecenie grub-install
zaktualizuje te zmienne, chyba że użyjesz opcji --no-nvram
aby określić inaczej.
W rezultacie, zarówno w przypadku tradycyjnego systemu BIOS, jak i UEFI, uruchomienie grub-install
może zaktualizować program ładujący, aby odczytywał zupełnie inny plik konfiguracyjny GRUB na całkowicie inny dysk – chociaż szczegóły tego procesu będą zupełnie inne.
Dzięki UEFI możesz w rzeczywistości zmienić wybór urządzenia rozruchowego z poziomu systemu operacyjnego, efibootmgr
lub grub-install
. Ale grub-install
to ogromna przesada: jeśli obie Twoje instalacje są w systemie UEFI i mają własne oddzielne partycje ESP, będą miały własne zmienne rozruchowe UEFI i można łatwo dokonać wyboru między nimi z efibootmgr
, a nawet w ustawieniach systemu UEFI BIOS.
Z tradycyjnym BIOS-em jest to trochę bardziej skomplikowane: będziesz chciał mieć pewność, że każda instalacja /boot/grub/device.map
określa dysk tej konkretnej instalacji jako hd0
, a drugi jako hd1
. Następnie użyj grub-install
, aby zapisać program ładujący tylko na własnym dysku każdej instalacji; nigdy na „przeciwny” dysk. W ten sposób oba dyski będą całkowicie samodzielne i rozruchowe, nawet jeśli drugi dysk zostanie całkowicie usunięty. Możesz dodać pozycję menu do plików konfiguracyjnych każdego GRUB-a, która pozwoli ci uruchomić „przeciwną” instalację, jeśli chcesz. Lub możesz po prostu użyć BIOS-u, aby wybrać dysk do rozruchu.
Rzecz, którą musisz wiedzieć, że selektor kolejności rozruchu tradycyjnych BIOS-ów będzie zwykle działał, wybierając dysk wybrany do uruchomienia „pierwszego” dysku dla funkcji BIOS-u, a więc hd0
GRUB zawsze będzie odnosić się do „dysku, który jest aktualnie wybrany do startu w BIOSie”.
Jeśli więc obecnie uruchamiam z /dev/sda
(więc BIOS mówi, że sda
to hd0
), a chcesz Element menu GRUB na tym dysku, aby przełączyć się na menu startowe /dev/sdb
„, użyłbyś czegoś takiego jak:
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 / dev / sdb „.
Komentarze
- więc uruchom update-grub przed grub-install (nie żeby to miało znaczenie, ale dla UEFI) czy odwrotnie?
-
grub-install
instaluje binarne części GRUB-a,update-grub
tworzy tylko plik konfiguracyjny. Jeśli chcesz całkowicie ponownie zainstalować GRUB, ' powiem, że najpierw uruchomgrub-install
. W rzeczywistości może on działaćupdate-grub
jako część zadania – jeśli nie ' t, możesz później uruchomić go samodzielnie. - " własna zmienna rozruchowa UEFI s " – > Więc jeśli dobrze zrozumiałem w konfiguracji UEFI, zmienne rozruchowe UEFI w NVRAM są jak tablica, która określa dysk rozruchowy? Co się stanie, jeśli jeden dysk ulegnie awarii; czy można określić rezerwową / wiele wartości tej tablicy? Co więcej, jeśli zrozumiałem, użytkownik zawsze może ominąć boot var UEFI, po prostu ręcznie określając dysk startowy (właściwie to, co robi boot var UEFI)? Dziękuję.
- @ninjagecko Twoje rozumienie jest poprawne, ale być może niekompletne. Zmienne rozruchowe UEFI określają nie tylko identyfikator UUID partycji, z której ma zostać przeprowadzony rozruch, ale także ścieżkę do pliku programu ładującego, nazwę czytelną dla człowieka i opcjonalne pole parametru. I tak, możesz określić wiele (zestawów) wartości, określić kolejność ich wprowadzania, a nawet powiedzieć systemowi, aby tylko raz uruchomił określoną opcję z normalnej kolejności, a następnie wznowić w normalnej kolejności. To są wszystkie standardowe funkcje specyfikacji UEFI; autorzy oprogramowania mogą, jeśli chcą, zapewnić jeszcze więcej opcji.