Grub komplett neu schreiben

Du kommst mit der Installation nicht voran oder willst noch was nachfragen? Schau auch in den "Tipps und Tricks"-Bereich.
Antworten
Benutzeravatar
smutbert
Moderator
Beiträge: 8331
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: Grub komplett neu schreiben

Beitrag von smutbert » 17.09.2017 13:44:36

Woher die Überbleibsel kommen, kann man auf die Entfernung schlecht sagen - möglicherweise hat os-prober sie tatsächlich aus einer der alten grub.cfg übernommen.

Mit deiner Problembeschreibung lieferst du aber selbst die Erklärung für das von mir bevorzugte Vorgehen mit den symbolischen Links.
Ein weiterer Grund ist, dass es mit den automatisch erstellten Booteinträgen zB typischerweise so abläuft:
Angenommen man hat zwei Systeme (A und B) mit jeweils eigenem grub und gebootet wird mit dem grub von A. Macht man in B ein Kernelupdate, wird nur dessen grub.cfg neu geschrieben, aber der grub von A erhält erst einen Booteintrag für den neueren Kernel, wenn man dort ebenfalls update-grub ausführt, etwa mit Rahmen eines Kernelupdates oder manuell. Richtig lästig wird das Verhalten, wenn man in B den alten Kernel deinstallieren, weil es dann in A keinen funktionierenden Booteintrag für B mehr gibt.


Nun könnte man einfach selbst einen Booteintrag in A erstellen, der nicht direkt den Kernel von B startet sondern nur auf die grub.cfg von B verweist, aber dann hat man immer noch das Problem, dass sich die Grubs von A und B bei Updates von grub selbst um die "Pole-Position" im MBR streiten. Dagegen kann man zwar mit

Code: Alles auswählen

# dpkg-reconfigure -p low grub-pc
etwas unternehmen, indem man auf allen Systemen bis auf eines verhindert, dass grub in den MBR geschrieben wird, aber mir gefällt trotzdem die Variante mit den symbolischen Links besser.


Die symbolischen Links haben den Vorteil, dass sie immer auf den aktuellen und die mit .old hintendran auf den vorigen Kernel (samt initrd) zeigen und man so Booteinträge schreiben kann, die nicht mit update-grub aktualisiert bzw. neu geschrieben werden müssen sondern immer aktuell sind.
Man erspart sich also nicht nur das fehlerträchtige Erkennen der anderen Installationen mit os-prober und damit eventuell fehlende oder überflüssige Einträge sondern startet die Systeme, die über keinen eigenen grub verfügen (weil man ihn dort deinstalliert hat) automatisch mit dem aktuellen Kernel.

Auf Hardware die beim Booten gerne Probleme verursacht, habe ich das auch schon auf die Spitze getrieben, indem ich auf keinem der installierten Systeme grub installiert habe, sondern nur, zB von einem Livesystem aus, einen von den Systemen unabhängigen Grub auf einer eigenen Partition installiert und dessen Konfigurationsdatei selbst die nötigen Booteinträge geschrieben habe, die nur auf die Symlinks zu aktuellen Kernel+initrd des jeweiligen Systems verweisen.
Damit erspart man sich nicht nur das update-grub und bei grub-efi-... das ständige Neuschreiben der Booteinträge im nvram sondern auch ganz grundsätzlich die (automatische) Neuinstallation von grub bei Updates von grub.


@stage1, stage1_5, stage2
Soweit ich weiß kann oder konnte man bei grub-pc auch unter gewissen Umständen auf einen stage1_5 verzichten und grub-efi-... und weitere grub-Varianten wie grub-ieee1275 kommen ohnehin ohne stage1_5 aus - eventuell ein weiterer Grund weshalb man diesem stage keine eigene ganze Zahl gegönnt hat.

Richard
Beiträge: 639
Registriert: 11.10.2012 14:18:37
Lizenz eigener Beiträge: GNU General Public License

Re: Grub komplett neu schreiben

Beitrag von Richard » 18.09.2017 19:30:14

smutbert hat geschrieben: ↑ zum Beitrag ↑
17.09.2017 13:44:36
Woher die Überbleibsel kommen, kann man auf die Entfernung schlecht sagen - möglicherweise hat os-prober sie tatsächlich aus einer der alten grub.cfg übernommen.
Ich hab hier https://ubuntuforums.org/showthread.php?t=1664134 was gefunden wie man die Konfiguration des GC rückgängig macht. Da die alten Einträge bei mir auch die Namen enthalten die ich einst mal im GC eingestellt habe, könnte das der Grund sein. Ich werde hier nochmal die ganzen GC-Dateien löschen. Vielleicht auch mal das Skript os_prober deaktivieren (also Ausführungsrechte entfernen)? Das sollte, wenn alle verfügbaren Systeme schon im Grub bekannt sind keine Probleme machen, oder?

smutbert hat geschrieben: ↑ zum Beitrag ↑
17.09.2017 13:44:36
@stage1, stage1_5, stage2
Soweit ich weiß kann oder konnte man bei grub-pc auch unter gewissen Umständen auf einen stage1_5 verzichten und grub-efi-... und weitere grub-Varianten wie grub-ieee1275 kommen ohnehin ohne stage1_5 aus - eventuell ein weiterer Grund weshalb man diesem stage keine eigene ganze Zahl gegönnt hat.
Meinst du mit grub-pc Grub Legacy?

Es klingt so als hätte Grub2 zu Beginn keine Stage 1.5 gehabt. Da stellt sich aber die Frage, wie auf den Stage 2 (der ja auf der Systempartition liegt, also meist einer ext2/3/4-Partition) zugreifen konnte. In den 446 Bytes des MBR in dem Stage 1 liegt wird ja wohl kaum genug Platz für die Module für die Ext-Partition(en) gewesen sein. Daher stellt sich die Frage wie das geht ohne Stage 1.5. In Foren habe ich auch gelesen, dass bei den Users nichts im verborgenen Bereich liegt und Stage 1 würde direkt auf Stage 2 zugreifen. Rückfragen nach dieser Unlogik blieben aber ohne (schlüssige) Antwort.
______

Ohne den GC fehlt mir natürlich eine brauchbare Möglichkeit die Reihenfolge im Menü zu ändern. Es geht wohl über die Reihenfolge der Skripte in /etc/grub.d. Das Linux in dem Grub liegt wird über die 10_linux gesteuert, andere OS vermutlich über die 30_os-prober. Das heißt aber, dass ich den Eintrag für das aktuelle OS inkl. dem Punkt Erweiterte Optionen nur "im Block" verschieben kann. Genauso alles was über 30_os-prober gefunden wurde. Wenn dort
  • Linux Mint
  • Erweiterte Optionen für Linux Mint
  • Windows
gefunden wurde, kann ich nur diesen ganzen Block vor das System mit Grub verschieben.

So märchenhaft schön wie die Ausgabe z. B. von 10_linux hier https://wiki.ubuntuusers.de/GRUB_2/Konf ... t-10-linux dargestellt wird ist das Skript nicht. Da steig ich absolut nicht durch.

Ich habe schon versucht einfach den Menueintrag aus der /boot/grub/grub.cfg in 09_custom zu kopieren, aber update-grub bringt eine Fehlermeldung von wegen Sytax Error.

Benutzeravatar
smutbert
Moderator
Beiträge: 8331
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: Grub komplett neu schreiben

Beitrag von smutbert » 18.09.2017 21:38:36

Richard hat geschrieben: ↑ zum Beitrag ↑
18.09.2017 19:30:14
[…]Das sollte, wenn alle verfügbaren Systeme schon im Grub bekannt sind keine Probleme machen, oder?
Grundsätzlich nicht, aber ohne os-prober werden nach dem nächsten update-grub auch die die automatisch erstellten Booteinträge für andere Systeme fehlen.
Richard hat geschrieben: ↑ zum Beitrag ↑
18.09.2017 19:30:14
[…]
Meinst du mit grub-pc Grub Legacy?
Nein, grub-legacy ist grub Version 1.

grub Version 2 dagegen existiert für unterschiedliche Architekturen bzw. BIOSse und Firmware-Varianten - gemeint ist gleich das erste
- Debiangrub-pc für das althergebrachte Booten auf BIOS Systemen und im Legacy-Modus auf UEFI-Hardware
- Debiangrub-efi-amd64 und Debiangrub-efi-ia32 für das Booten auf Systemen mit 32 Bit und 64 Bit UEFI - unabhängig davon ob die CPU nun über die amd64-Erweiterung verfügt oder nicht und auch für ältere EFI-Systeme, zB die ersten Intel Macs
- Debiangrub-ieee1275 für Systeme mit Open Firmware (zB die späteren "New World" PowerPC-Macs)
- grub-uboot für arm-Rechner bei dem sich grub von uboot laden lässt
....
Richard hat geschrieben: ↑ zum Beitrag ↑
18.09.2017 19:30:14
[…]
Es klingt so als hätte Grub2 zu Beginn keine Stage 1.5 gehabt. Da stellt sich aber die Frage, wie auf den Stage 2 (der ja auf der Systempartition liegt, also meist einer ext2/3/4-Partition) zugreifen konnte. […] Daher stellt sich die Frage wie das geht ohne Stage 1.5.
[…]
Ich glaube (das heißt wissen tu ich gar nix), dass grub zumindest früher unter widrigen Umständen (kein Platz nach dem MBR frei, blödes Dateisystem,...) stage 2 auch mittels Blocklisten laden konnte - ähnlich wie lilo Linux geladen hat. Jetzt macht grub das aber glaube ich gar nicht mehr oder nur mehr unter Protest...
Es wäre trotzdem imho insofern unter normalen Umständen kein Problem als man bei einem Update grub ohnehin neu installieren muss und ohne Update ändert sich nichts an der Position von stage2.

Übrigens verwendet grub meines Wissens für ext2, ext3 und ext4 denselben ext2-Dateisystemtreiber - das journal kann ihm beim Lesen ja egal sein.
Richard hat geschrieben: ↑ zum Beitrag ↑
18.09.2017 19:30:14
[…]
Ohne den GC fehlt mir natürlich eine brauchbare Möglichkeit die Reihenfolge im Menü zu ändern.[…]
Ja, ich wüsste auch nicht wie man die Reihenfolge anders als blockweise ändern könnte ohne so invasiv einzugreifen wie der grub-costumizer es tut.

(Da könnte man sich aber mit meiner Methode behelfen grub unabhängig von allen installierten Distributionen zu pflegen. Man installiert also von irgendeinem System aus grub auf eine eigens dafür eingerichtete Partition - auf uefi-Systemen kann man die EFI System Partition dazu verwenden - und schreibt selbst die grub.cfg.
Auf allen installierten Distributionen deinstalliert man grub oder installiert ihn gleich von vornherein gar nicht und erhält so ein Bootmenü nach den eigenen Vorstellungen - wenn man will inklusive grub-theme oder ähnlichem. Das Vorgehen wäre im Grunde dasselbe wie in diesem Wiki-Artikel: https://wiki.debianforum.de/Ein_Notfall ... Bootloader nur dass man eben nur eine grub-Variante benötigt und ich bis jetzt noch daran gescheitert bin die gewünschten Sprach- und Tastatureinstellungen bereits in grub zu laden.
Das ganze hat aber natürlich Vor- und Nachteile.)
Richard hat geschrieben: ↑ zum Beitrag ↑
18.09.2017 19:30:14
[…]
Ich habe schon versucht einfach den Menueintrag aus der /boot/grub/grub.cfg in 09_custom zu kopieren, aber update-grub bringt eine Fehlermeldung von wegen Sytax Error.
Dass es nicht genügt nur den Booteintrag in eine Datei zu kopieren, hast du bedacht?
in grub.d werden ausführbare Skripte erwartet, die dann entsprechende ein Stückchen grub.cfg auf der Standardausgabe ausgeben. Wie man das machen kann sieht man zB in der dafür vorbereiteten »/etc/grub.d/40_custom« - wichtig ist es die ersten beiden Zeilen beizubehalten und die eigenen Menüeinträge hinten dranzuhängen:

Code: Alles auswählen

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.

# hier folgen die eigenen Menüeinträge
#....

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: Grub komplett neu schreiben

Beitrag von rendegast » 18.09.2017 23:57:14

Ich bevorzuge statt der 40_custom die Pflege einer /boot/grub/custom.cfg,
selber Syntax wie die grub.cfg.

Weiterhin referenziere ich per Link
/etc/grub.d/09_custom -> 41_custom,
dadurch tauchen meine Menüeinträge aus custom.cfg vor denen aus zBsp. 10_linux auf.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Antworten