Update-Grub vs. Grub-Installation?

Einige online gefundene Beispiele besagen, dass update-grub NACH der grub-Installation ausgeführt werden sollte. Andere kehren die Reihenfolge um. Was ist richtig?

Wenn ich zwei Linux-Installationen habe (eine auf sda und eine auf sdb), wenn ich update-grub auf der sda-Installation ausführe, wird die sda-Installation oben im Boot platziert Speisekarte. Wenn ich update-grub für die SDB-Installation ausführe, wird die SDB-Installation oben im Menü platziert.

Unter der Annahme von DEFAULT = 0 sollte es mir theoretisch ermöglichen, mein Betriebssystem durch Auswahl von auszuwählen Boot-Gerät im BIOS. Ändert „grub-install / dev / sda“ das sda-Startmenü so, dass es dem letzten „update-grub“ entspricht, unabhängig davon, ob es von der sda- oder sdb-Version von Linux ausgeführt wurde?

Antwort

update-grub, zumindest in Debian und seinen Verwandten wie Ubuntu, ist im Grunde nur ein Wrapper um grub-mkconfig. Daher wird die GRUB -Konfiguration erstellt / aktualisiert / neu generiert, nicht der eigentliche Bootloader selbst.

Was die grub-install tatsächlich tut, hängt davon ab, welche Version von GRUB, die Sie ausführen: traditionelles BIOS GRUB oder UEFI GRUB?

Mit dem herkömmlichen BIOS-GRUB schreibt grub-install den im Master Boot Record eingebetteten Teil des GRUB (neu) und codiert den physischen Festplattenblock darin Zahlen, von denen aus der nächste Teil von GRUB gelesen werden kann. Außerdem wird festgelegt, von welcher Partition die eigentliche GRUB-Konfigurationsdatei (/boot/grub/grub.cfg) gelesen wird. Ein wichtiger Faktor hierbei ist die Datei /boot/grub/device.map, die GRUB mitteilt, wie die Gerätenummerierung des BIOS (und damit von GRUB) Linux-Festplattengeräten zugeordnet ist.

Mit Der UEFI GRUB, der Hauptteil des GRUB-Bootloaders, befindet sich als Datei in der EFI-Systempartition, normalerweise als /boot/efi/EFI/<name of distribution>/grubx64.efi oder ähnlich. Dieser Bootloader-Pfadname wird im System-NVRAM (= dem Ort, an dem die BIOS-Einstellungen gespeichert sind) in den UEFI-Bootvariablen gespeichert. Der Hauptteil von GRUB ist möglicherweise vollständig in sich geschlossen (und muss vorhanden sein, wenn Secure Boot verwendet wird!) Oder es werden zusätzliche Funktionen als GRUB-Module geladen, normalerweise aus dem Verzeichnis /boot/grub von Die Linux-Distribution, zu der es gehört.

Die UEFI-Startvariablen identifizieren die Festplatte, auf der das System nach der EFI-Systempartition und der darin enthaltenen Bootloader-Datei suchen soll. Sie können diese Variablen mithilfe von anzeigen efibootmgr -v Befehl. Der Befehl grub-install aktualisiert diese Variablen, es sei denn, Sie verwenden die Option --no-nvram Andernfalls kann

Wenn Sie sowohl mit dem herkömmlichen BIOS als auch mit UEFI grub-install ausführen, kann Ihr Bootloader aktualisiert werden, um eine völlig andere GRUB-Konfigurationsdatei auf einer vollständig zu lesen andere Festplatte – obwohl die Details dieses Prozesses völlig unterschiedlich sein werden.

Mit UEFI können Sie die Auswahl Ihrer Startgeräte innerhalb des Betriebssystems ändern efibootmgr oder grub-install. Aber grub-install ist ein gewaltiger Overkill dafür: Wenn beide Installationen UEFI sind und ihre eigenen separaten ESP-Partitionen haben, haben sie ihre eigenen UEFI-Bootvariablen, und die Auswahl zwischen ihnen kann leicht erfolgen mit efibootmgr oder in den UEFI-BIOS-Einstellungen.

Mit herkömmlichem BIOS ist es etwas chaotischer: Sie möchten sicherstellen, dass jede Installation ausgeführt wird /boot/grub/device.map identifiziert die Festplatte dieser bestimmten Installation als hd0 und die andere als hd1 Verwenden Sie dann grub-install, um den Bootloader nur auf die eigene Festplatte jeder Installation zu schreiben. niemals auf die „gegenüberliegende“ Platte. Auf diese Weise sind beide Festplatten vollständig eigenständig und bootfähig, selbst wenn die andere Festplatte vollständig entfernt wird. Sie können den Konfigurationsdateien jedes GRUB einen Menüpunkt hinzufügen, mit dem Sie bei Bedarf die „entgegengesetzte“ Installation starten können. Oder Sie können einfach das BIOS verwenden, um die Festplatte auszuwählen, von der gestartet werden soll.

Sie müssen wissen, dass die Auswahl der Startreihenfolge herkömmlicher BIOS normalerweise funktioniert, indem die Festplatte zum Booten der „ersten“ Festplatte ausgewählt wird Für BIOS-Funktionen bezieht sich GRUBs hd0 immer auf „die Festplatte, die derzeit zum Booten im BIOS ausgewählt ist“.

Wenn ja Derzeit wird von /dev/sda gebootet (das BIOS sagt also, dass sda hd0 ist), und Sie möchten eine Wenn Sie den GRUB-Menüpunkt auf dieser Festplatte verwenden, um zum Startmenü von /dev/sdb zu wechseln, verwenden Sie Folgendes:

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 } 

… und ebenso in der GRUB-Konfiguration von / dev / sdb.

Kommentare

  • Führen Sie also update-grub aus, bevor Sie grub installieren (nicht, dass es einen Unterschied machen sollte, aber für UEFI) oder das Gegenteil?
  • grub-install installiert die Binärteile von GRUB, update-grub erzeugt nur die Konfigurationsdatei. Wenn Sie Ihren GRUB vollständig neu installieren müssen, würde ich ' zuerst grub-install ausführen. Möglicherweise wird update-grub für Sie als Teil des Jobs ausgeführt. Wenn dies nicht ' t ist, können Sie es anschließend selbst ausführen.
  • " eigene UEFI-Bootvariable s " – > Wenn ich also in einem UEFI-Setup richtig verstanden habe, sind die UEFI-Startvariablen im NVRAM wie ein Array, das die Startdiskette angibt? Was passiert, wenn eine Festplatte ausfällt? Kann man einen Fallback / mehrere Werte dieses Arrays angeben? Wenn ich das verstehe, kann der Benutzer die UEFI-Startvariable immer umgehen, indem er lediglich die Startdiskette manuell angibt (effektiv, was die UEFI-Startvariable tut). Vielen Dank.
  • @ninjagecko Ihr Verständnis ist korrekt, aber möglicherweise unvollständig. Die UEFI-Startvariablen geben nicht nur die Partitions-UUID an, von der gebootet werden soll, sondern auch den Pfadnamen der Bootloader-Datei, einen für Menschen lesbaren Namen und ein optionales Parameterfeld. Und ja, Sie können mehrere (Sätze von) Werten angeben, die Reihenfolge angeben, in der sie versucht werden sollen, und das System sogar anweisen, eine bestimmte Option nur einmal aus der normalen Reihenfolge heraus zu starten und dann mit der normalen Reihenfolge fortzufahren. Dies sind alles Standardfunktionen der UEFI-Spezifikation. Die Firmware-Autoren können noch mehr Optionen bereitstellen, wenn sie möchten.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.