Některé online příklady ukazují, že update-grub by měl být spuštěn PO grub-install. Ostatní mění pořadí. Co je správné?
Pokud mám dvě instalace Linuxu (jednu na sda a druhou na sdb), pokud spustím update-grub na instalaci sda, umístí instalaci sda do horní části bootování Jídelní lístek. Pokud spustím update-grub na instalaci sdb, umístí instalaci sdb do horní části nabídky.
Za předpokladu DEFAULT = 0 by mi to teoreticky mělo umožnit vybrat můj OS výběrem zaváděcí zařízení v systému BIOS. Mění „grub-install / dev / sda“ bootovací nabídku sda tak, aby odpovídala poslední „update-grub“, bez ohledu na to, zda byla spuštěna z verze sda nebo sdb Linuxu?
Odpověď
update-grub
, přinejmenším v Debianu a jeho příbuzných, jako je Ubuntu, je v podstatě jen obalem grub-mkconfig
. Vytváří tedy / aktualizuje / regeneruje GRUB konfiguraci , nikoli samotný bootloader.
To, co vlastně grub-install
dělá, závisí na tom, které verzi GRUBu, kterou používáte: tradiční BIOS GRUB nebo UEFI GRUB?
S tradičním systémem BIOS GRUB grub-install
zapíše (znovu) část GRUBu vloženou do hlavního bootovacího záznamu a zakóduje do něj blok fyzického disku. čísla, odkud číst další část GRUBu. Rovněž určí, ze které oblasti se načte skutečný konfigurační soubor GRUB (/boot/grub/grub.cfg
). Důležitým faktorem je zde soubor /boot/grub/device.map
, který sděluje GRUBu, jak se číslování zařízení BIOS (a tedy GRUB) mapuje na disková zařízení Linux.
S UEFI GRUB, hlavní část zavaděče GRUB bude umístěna jako soubor v systémovém oddílu EFI, obvykle jako /boot/efi/EFI/<name of distribution>/grubx64.efi
nebo podobný. Tato cesta bootloaderu je uložena v systémovém NVRAM (= místo, kde je uloženo nastavení BIOSu) v zaváděcích proměnných UEFI. Hlavní část GRUBu může být zcela samostatná (a musí být, pokud se používá Secure Boot!) Nebo může načítat další funkce jako moduly GRUB, obvykle z adresáře /boot/grub
distribuce Linuxu, jejíž je součástí.
Zaváděcí proměnné UEFI identifikují disk, který by měl systém použít k vyhledání systémového oddílu EFI a souboru bootloaderu v něm. Tyto proměnné můžete zobrazit sami pomocí Příkaz efibootmgr -v
. Příkaz grub-install
tyto proměnné aktualizuje, pokud nepoužijete možnost --no-nvram
jinak specifikovat.
Výsledkem je, že jak v tradičním BIOSu, tak v UEFI může spuštění grub-install
aktualizovat váš bootloader tak, aby na zcela kompletním konfiguračním souboru GRUB mohl číst jiný disk – ačkoli podrobnosti tohoto procesu budou zcela odlišné.
S UEFI můžete ve skutečnosti změnit výběr zaváděcího zařízení z operačního systému, buď efibootmgr
nebo grub-install
. Ale grub-install
je na to obrovský přehnaně: pokud jsou obě vaše instalace UEFI a mají své vlastní samostatné oddíly ESP, budou mít své vlastní spouštěcí proměnné UEFI a lze mezi nimi snadno vybírat s efibootmgr
, nebo dokonce v nastavení systému UEFI BIOS.
S tradičním BIOSem je to trochu messier: budete se chtít ujistit, že každá instalace /boot/grub/device.map
identifikuje disk konkrétní instalace jako hd0
a druhý jako hd1
Poté použijte grub-install
k zápisu bootloaderu pouze na vlastní disk každé instalace; nikdy na „opačný“ disk. Tímto způsobem budou oba disky zcela samostatné a zaváděcí, i když bude druhý disk zcela odebrán. Do konfiguračních souborů každého GRUBu můžete přidat položku nabídky, která vám umožní spustit „opačnou“ instalaci, pokud chcete. Nebo můžete jednoduše použít systém BIOS k výběru disku, ze kterého se má spustit.
Věc, kterou musíte vědět, že volič pořadí zavádění tradičních BIOSů bude obvykle fungovat tak, že bude vybrán disk ke spuštění „prvního“ disku pro funkce systému BIOS, takže GRUB „s hd0
bude vždy odkazovat na„ disk, který je aktuálně vybrán pro zavedení v systému BIOS “.
Takže pokud jste aktuálně se zavádí z /dev/sda
(BIOS tedy říká, že sda
je hd0
) a chcete Položka nabídky GRUB na daném disku pro přepnutí do spouštěcí nabídky /dev/sdb
, můžete použít něco jako:
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 }
… a podobně také na konfiguraci GRUBu / dev / sdb.
grub-install
nainstaluje binární části GRUBu,update-grub
vytvoří pouze konfigurační soubor. Pokud potřebujete zcela přeinstalovat svůj GRUB, řeknu ' nejprve spustitgrub-install
. Může to ve skutečnosti běžetupdate-grub
jako součást úlohy – pokud tomu tak není ' t, můžete jej poté spustit sami.