[grub2]grub2-install will nicht installieren

Hallo,
ich habe, ich weis, soll man nicht, ging aber hier nicht anders, die grub.cfg editiert. Dabei habe ich ein nur noch in Trümmern vorhandenes Knoppix (wurd ulkigerweise als Ubuntu eingebaut) aus dem Boot-Menü gelöscht und eine DOS-Partition dazugesetzt. In einem Forum habe ich den Eintrag dazu gefunden:


menuentry "DOS" {insmod part_msdos
insmod fat
setroot='(hd1,msdos2)'
chainloader +1
}


Bevor jemand fragt: Ja, die Partition is als klasische FAT formatiert (500 MB so ungefähr)
Ja, die Partition liegt auf /dev/sdb2
Ja, ich will wirklich DOS benutzen. Ein grafisches Programm für spezielle Zwecke geht nur so, da es seinen eigenen Bildschirmtreiber mitbringt.
Ja, die Platte hat eine klasische MBR-Partitionstabelle.
Ja, das Mainboard hat ein normales BIOS.
Ach ja, in einem Forum stand, dass DOS und search nicht immer funktionieren und da Yast die bei der SuSE-Installation bereits vorhandene und fertig bespielte und installierte DOS-Version komplett ignoriert hatte, nahm ich an, dass das hier tatsächlich nicht klappt. Zudem ist es nicht MS-DOS, soindern ein Klon (MS-DOS ist inzwischen praktisch nicht mehr zu bekommen und meine Installationsdisketten haben geklemmt … wohl zu alt). Also habe ich ohne search gearbeitet.

Das Problem nun: grub2-install zeigt ein paar Warnungen an (unter anderem etwas über Blocklisten und das Einbettungen nicht funktioneren würden). An den genauen Wortlaut erinnere ich mich nicht mehr und ich bin im Moment in Windows, kann’s also nicht nachlesen. Auf jeden Fall hat er am Ende eine Fehlermeldung angezeigt, die besagte, dass er den Vorgang mit Blocklisten abbbrechen würde.

In einem anderen Forum war eine kleine Zusammenfassung zu finden, die besagt, dass derartige Fehlermeldungen darauf hindeuten würden, das grub2 zu groß für den entsprechenden Bereich auf der Festplatte sei. Es müsse also zusätzlicher Platz geschaffen werden.

  1. Frage: Stimmt das?
  2. Frage: Wenn ja, wie kann ich da reagieren, ohne meine ganze Platte umzuformatieren oder anders zu partitionieren?
  3. Frage: Wenn nein, was könnte es sonst sein?

Zum System: ASUS-MB mit BIOS und Dual-Core Athlon XP 64 3800+
Mehrere Festplatten verschiedener Kapazität, teils IDE, teils S-ATA, teils auch SCSI
Windows 7/32 SP1 Pro (32 Bit wegen der SCSI-Treiber; die gibt’s nicht in 64 Bit)
Erste Platte mit Windows (Boot-Partition und System-Partition C:) Eigenständig bootbar über MBR (so läuft es im Moment, da grub2 ja nicht geht)
Zweite Platte mit DOS und OpenSuSE-Linux sdb1 ist /boot sdb5 ist /, sdb2 ist für DOS
grub auf sdb1, sdb1 ist in der Tabelle als bootbar markiert. Installation des grub in sdb1 (Bootsektor), MBR generisch.
Auswahl durch BIOS (Plattenreihenfolge). Soll auf grub2 umgestellt werden (Windows konnte er booten, keine Probleme). Jetzt grub2 komplett funktionsuntüchtig, da Installation misslungen.

Zuerst mal, grub2-install aufrufen ist eigentlich gar nicht notwendig wenn du die grub.cfg änderst.
Die wird nämlich von grub2 sowieso zur Laufzeit vom Dateisystem geladen.

Außerdem solltest du die grub.cfg nicht direkt ändern, da sie automatisch generiert wird.
Deine eigenen Menüpunkte kannst du in die Datei /boot/grub2/custom.cfg schreiben.

Andere Möglichkeiten:

  • erzeuge ein eigenes Script in /etc/grub.d/ das den Eintrag erzeugt
  • schreib den Eintrag nach /etc/grub.d/41_custom
  • wenn schon grub.cfg, dann schreib in zwischen diese zwei Zeilen:

### BEGIN /etc/grub.d/90_persistent ###
### END /etc/grub.d/90_persistent ###

Andererseits wird bei der Bootloaderinstallation durch os-prober sowieso nach anderen Betriebssystemen gesucht und diese ins Menü mitaufgenommen (falls diese Option nicht deaktiviert ist)
Allerdings kann ich jetzt nicht sagen ob da ein MSDOS erkannt wird… (FreeDOS schon)

Kann sein, allerdings sollte das normalerweise (bei einer default Installation) kein Problem sein da der Bootloader in die Root-Partition geschrieben wird.
Zumindest ext4 und btrfs beinhalten einen eigenen Bereich für den Bootloader.

Wenn du allerdings versuchst den Bootloader in den MBR zu schreiben, muss nach dem MBR (und vor der ersten Partition) genug Platz sein.

  1. Frage: Wenn ja, wie kann ich da reagieren, ohne meine ganze Platte umzuformatieren oder anders zu partitionieren?

Wenn das das Problem ist, musst du umpartitionieren.
Oder du schreibst den Bootloader in die Root-Partition anstatt dem MBR (die muss dann natürlich auch “aktiv” sein)
Das ist sowieso besser bei Multibootsystemen, damit dir das Windows nicht den grub2 überschreibt.

Um das sagen zu können, wäre es hilfreich die genaue Partitionierung zu kennen, also z.B. die Ausgabe von “fdisk -l”.
Und die genaue Fehlermeldung wäre vielleicht auch nicht schlecht…

Allerdings solltest du sowieso nicht grub2-install verwenden um den Bootloader zu installieren.
Der ignoriert nämlich die openSUSE Einstellungen.
Besser ist “update-bootloader --refresh” bzw. “update-bootloader --reinit”. Oder gehe nach YaST->Bootloader und klicke einfach auf OK, das sollte den Bootloader auch neu schreiben.

O.k. das wusste ich nicht (also die Tatsache schon, den Pfad aber nicht). Allerdings hatte ich, denke ich, erwähnt, dass ich auch Teile des automatischen Krams gelöscht hatte, weil die Installation, die Yast da gefunden hatte (dieses Ubuntu) gar nicht mehr funktioniert (sind nur noch Trümmer davon).

Andere Möglichkeiten:

  • erzeuge ein eigenes Script in /etc/grub.d/ das den Eintrag erzeugt
  • schreib den Eintrag nach /etc/grub.d/41_custom

Ich konnte in der grub.cfg keinen Aufruf dieser Dateien entdecken. Wie werden die denn eingebunden? Und schreibt man das genauso wie in der grub.cfg, oder braucht man da noch weitere Kommandos (damit das richtig im Menü landet)?

  • wenn schon grub.cfg, dann schreib zwischen diese zwei Zeilen:

BEGIN /etc/grub.d/90_persistent

END /etc/grub.d/90_persistent

Landet das dann im Menü? Kann jetzt nicht nachsehen, aber ich meine, das stünde nicht zwischen den 'menuentry’s.

Andererseits wird bei der Bootloaderinstallation durch os-prober sowieso nach anderen Betriebssystemen gesucht und diese ins Menü mitaufgenommen (falls diese Option nicht deaktiviert ist)
Allerdings kann ich jetzt nicht sagen ob da ein MSDOS erkannt wird… (FreeDOS schon)

Dieses DOS auf jeden Fall nicht.

Kann sein, allerdings sollte das normalerweise (bei einer default Installation) kein Problem sein da der Bootloader in die Root-Partition geschrieben wird.
Zumindest ext4 und btrfs beinhalten einen eigenen Bereich für den Bootloader.

Ich hatte erwähnt, dass der grub in der /boot ist?

Wenn du allerdings versuchst den Bootloader in den MBR zu schreiben, muss nach dem MBR (und vor der ersten Partition) genug Platz sein.

Wenn das das Problem ist, musst du umpartitionieren.
Oder du schreibst den Bootloader in die Root-Partition anstatt dem MBR (die muss dann natürlich auch “aktiv” sein)
Das ist sowieso besser bei Multibootsystemen, damit dir das Windows nicht den grub2 überschreibt.

Eben, deshalb. Hier aber würde das noch nicht einmal gelten, denn Windows hat ja seine eigene Platte. Ich muss nur im BIOS die Plattenreihenfolge ändern, und schon ist der MBR der Linux-Platte ohne Bedeutung. Genau so mache ich es ja auch im Moment, da ich mir ja die Grub-Installation zerschossen habe.

Um das sagen zu können, wäre es hilfreich die genaue Partitionierung zu kennen, also z.B. die Ausgabe von “fdisk -l”.
Und die genaue Fehlermeldung wäre vielleicht auch nicht schlecht…

Habe inzwischen den Fehlertext abgerufen. Er lautet:


>grub2-install /dev/sdb1
Installing for i386pc-platform
grub2-install: Warnung: Dateisystem »ext2« unterstützt keine Einbettungen
grub2-install: Warnung: Einbettung ist nicht möglich. GRUB kann in dieser Konfiguration nur mittels Blocklisten installiert werden. Blocklisten sind allerdings und deren Verwendung wird daher nicht empfohlen ...
grub2-install: Fehler: mit Blocklisten wird nicht fortgesetzt. 

Klingt einigermaßen merkwürdig. Wieso versucht er eine Methode anzuwenden, die ausgerechnet bei ext2 (dem Haus-Dateisystem von Linux. ext3 und ext4 gleichen dem ja bis auf die Journale, da dürfte das also auch gelten) nicht funktioniert?
Wieso schreibt er erst eine Warnung, dass das nicht empfohlen wird und dann weigert er sich, weiterzumachen (so klingt das für mich zumindest)?

Allerdings solltest du sowieso nicht grub2-install verwenden um den Bootloader zu installieren.
Der ignoriert nämlich die openSUSE Einstellungen.
Besser ist “update-bootloader --refresh” bzw. “update-bootloader --reinit”. Oder gehe nach YaST->Bootloader und klicke einfach auf OK, das sollte den Bootloader auch neu schreiben.

Da bin ich schlicht nicht drauf gekommen. Allerdings: Wird er dann nicht versuchen, die gelöschten Einträge wieder einzubauen?

Und was genau hast du gelöscht?

Die grub.cfg wird generiert indem alle Scripts in /etc/grub.d/ der Reihe nach aufgerufen werden, und deren Ausgabe dann in die Datei geschrieben wird.
Wenn du diese Dateien löschst, werden natürlich die entsprechenden Teile nicht in die grub.cfg geschrieben.

Ich bin mir jetzt aber nicht sicher wie das Verhalten wäre wenn du alle Scripts löschst. Kann sein dass dan die grub.cfg nicht verändert wird, könnte aber auch sein dass sie einfach mit einer leeren Datei überschrieben wird.

Du kannst natürlich wie gesagt auch eigene Dateien/Scripts in /etc/grub.d/ schreiben, die dann die grub.cfg nach deinen Wünschen erzeugen.

Ist aber vorläufig egal, die grub.cfg wird ja nur neu generiert wenn du grub2-mkconfig aufrufst bzw. bestimmte Updates installierst (Kernel z.B.).

Zum “Experimentieren” ists sicher einfacher die grub.cfg direkt zu ändern (oder custom.cfg), und wie gesagt, ein Neuschreiben des Bootloaders ist danach nicht notwendig.

Ich konnte in der grub.cfg keinen Aufruf dieser Dateien entdecken. Wie werden die denn eingebunden?

Normalerweise enthält die grub.cfg folgendes, das lädt die custom.cfg nach:

### BEGIN /etc/grub.d/41_custom ###
if  -f  ${config_directory}/custom.cfg ]; then
  source ${config_directory}/custom.cfg
elif  -z "${config_directory}" -a -f  $prefix/custom.cfg ]; then
  source $prefix/custom.cfg;
fi
### END /etc/grub.d/41_custom ###

Das wird von /etc/grub.d/41_custom generiert, wenn du dieses Script gelöscht hast wirds natürlich fehlen…
Genauso für die anderen Sachen die ich erwähnt habe (40_custom, 90_persistent).

Und schreibt man das genauso wie in der grub.cfg, oder braucht man da noch weitere Kommandos (damit das richtig im Menü landet)?

Das “menuentry” Schnipsel sollte reichen.

Landet das dann im Menü? Kann jetzt nicht nachsehen, aber ich meine, das stünde nicht zwischen den 'menuentry’s.

Es braucht nicht zwischen den menuentry’s stehen weils ja selbst ein menuentry ist…

Ich hatte erwähnt, dass der grub in der /boot ist?

Ja, richtig.

Habe inzwischen den Fehlertext abgerufen. Er lautet:

grub2-install /dev/sdb1
Installing for i386pc-platform
grub2-install: Warnung: Dateisystem »ext2« unterstützt keine Einbettungen
grub2-install: Warnung: Einbettung ist nicht möglich. GRUB kann in dieser Konfiguration nur mittels Blocklisten installiert werden. Blocklisten sind allerdings und deren Verwendung wird daher nicht empfohlen …
grub2-install: Fehler: mit Blocklisten wird nicht fortgesetzt.

Klingt einigermaßen merkwürdig. Wieso versucht er eine Methode anzuwenden, die ausgerechnet bei ext2 (dem Haus-Dateisystem von Linux. ext3 und ext4 gleichen dem ja bis auf die Journale, da dürfte das also auch gelten) nicht funktioniert?
Wieso schreibt er erst eine Warnung, dass das nicht empfohlen wird und dann weigert er sich, weiterzumachen (so klingt das für mich zumindest)?

Tja, scheinbar hat das ext2 Dateisystem keinen Bereich für den Bootloader.
Warum probierst du nicht die root Partition? Wie gesagt, sowohl ext4 als auch btrfs sollten die Einbettungen unterstützen.

Ansonsten bleibt noch der MBR (also /dev/sda), vorausgesetzt da ist genug Platz.
Da das Windows sowieso auf der anderen Platte ist, wär das auch nicht so problematisch.

Wieso schreibt er erst eine Warnung, dass das nicht empfohlen wird und dann weigert er sich, weiterzumachen (so klingt das für mich zumindest)?

Er weigert sich genau deswegen weil das nicht empfohlen wird.
Allerdings, man sollte mit der “–force” Option grub2-install aber auch dazu zwingen können, Blocklisten zu benutzen.

Da bin ich schlicht nicht drauf gekommen. Allerdings: Wird er dann nicht versuchen, die gelöschten Einträge wieder einzubauen?

Das generiert dir grub.cfg neu und überschreibt sie, ja.
Wie die neue ausschauen wird hängt dann eben davon ab welche Scripts jetzt in /etc/grub.d/ vorhanden sind oder nicht.

Prinzipiell kannst du schon grub2-install verwenden, aber das könnte dann Probleme bei Updates geben (weil da ja update-bootloader aufgerufen wird).

Andererseits könntest du ja die aktuelle grub.cfg sichern und dann nach Aufruf von update-bootloader wieder zurückschreiben. Wie gesagt, die Datei wird beim Booten vom Dateisystem geladen, man kann sie einfach so ändern ohne den Bootloader neu zu schreiben. Das war bei grub schon immer so, lilo musste man neu schreiben damit Konfigurations-/Menü-änderungen erkannt wurden.

PS: das Suchen nach und Hinzufügen von “fremden” Betriebssystemen kann man auch abschalten.
Entweder in YaST->System->Bootloader oder die GRUB_DISABLE_OS_PROBER Option on /etc/default/grub.