PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : GRUB 0.92 will nicht mehr wie ich will


zeckensack
2005-01-19, 19:40:45
Ich hatte vorher schon GRUB installiert. Das ist btw ein Suse 8.1 Pro-Minimalsystem, das ich im Prinzip nur zum hosten meiner GRUB-Dateien und für kleinere Compiler-Experimente brauche. Bitte deswegen nicht schlagen :)

Gestern habe ich dann mal kräftig umpartioniert. Endzustand:
HD0: 120GB 5GB FAT32, primäre Windows 98SE-Systempartition
5GB NTFS, primäre Windows 2000-Systempartition
erweiterte Partition mit folgenden logischen Partitionen: 70GB FAT32, geteilte Arbeitspartition für alle Systeme
30GB FAT32, Tempverzeichnisse/generische Ablage für die Windows-Systeme (Die Win98-Swapdatei liegt auch hier)
100MB ext2, /boot für Linux
10GB ext2, / für Linux
HD1: 200GB erweiterte Partition mit folgenden logischen Partitionen: 199GB NTFS
1GB swap für Linux

Die "eigentlichen" Linux-Partitionen wurden dabei nicht verändert. Sie haben sich nur verschoben -- es gab vorher nur drei logische Laufwerke in der erweiterten Partition auf HD0, jetzt sind es vier, wodurch Linux um eine Nummer nach hinten rutschte. Swap wurde verpflanzt und vergrössert, hat aber die Partitionsnummer beibehalten -- es war vorher "in der Mitte" zwischen zwei logischen Partitionen auf HD1 -- aber das ist a)nicht für die Bootfähigkeit über GRUB relevant und b)habe ich das umgehend in /etc/fstab entsprechend angepasst.

Während ich am Werkeln war, hörte zwischendurch GRUB mit dem funktionieren auf. Kein Problem, dachte ich mir, startete ein Rescue-System von der Installations-DVD (exakt gleicher Kernel, exakt gleiche GRUB-Version!), und tat das, was nach der Erstinsallation von Windows 2000 half:
mount /dev/hde7 /mnt
grub-install --root-directory=/mnt --recheck dev/hde

Ja, /dev/hde ist tatsächlich die erste Platte. Bei meinem Abit-Board sortieren sich die (ungenutzten) SATA-Ports als hda, hdb, hdc, hdd ein.

Half aber nicht. Die Fehlermeldung lautete "/mnt/boot/grub/stage 1 could not correctly read" oä, auf jeden Fall grammatikalisch wie semantisch merkwürdig, denn die Datei lag genau da.

Also den Holzhammer ausgepackt: Linux-System neu installiert, nein, ich will keine Partitionen verändern oder neu anlegen, ja, ich will die Linux-Partitionen formatieren, ja, ich will GRUB auf die Platte installiert haben.
Und dann ging's wieder.
Ich habe dann zuerst mein frisch installiertes Linux gebootet, und meine Bootmenü angepaßt. Funzte problemlos. Dann mein Windows 2000 gebootet. Funzte ebenfalls. Dann die Partitionen mit Daten gefüllt, und wieder runtergefahren, und den Rechner erstmal Rechner sein lassen.

Heute mache ich den Rechner wieder an, und GRUB startet ohne Menü, begrüßt mich stattdessen mit dem Prompt!
Der Versuch, Linux manuell zu booten, scheiterte daran, dass GRUB nicht in der Lage war, die ext2-Partition mit dem Kernel zu raffen. Dh sie wurde gefunden, aber nicht verstanden, sodass ich weder den Kernel noch die initrd wählen konnte.
Ja, die korrekten Pfade und Namen weiß ich auswendig.
Meine Diagnose (spekulativ): stage2.ext2 wurde nicht gefunden, daher kein Zugriff auf menu.lst (deswegen das Prompt statt des Menüs), und ohne Zugriff auf den Kernel logischerweise auch keine Möglichkeit Linux durchzubooten.

Ich habe wirklich nichts mehr verändert, seit es das letzte mal ging. Dh ich habe schon eine Menge Zeug in meine menu.lst reingeschrieben (insbesondere die ext- und NTFS-Partitionen vor Win98 versteckt), aber das System hat damit bereits einmal gebootet (nach Windows 2000).

Nun stehe ich da. Ich habe jetzt mein Windows 2000 händisch hochgefahren, indem ich das hier eingab:
root (hd0,1)
chainloader +1
boot

Funzt tadellos, aber das ist natürlich kein Dauerzustand. Und ich verstehe nicht mal ansatzweise, was da eigentlich schiefgelaufen ist.

Hümmel hülf!

zeckensack
2005-01-19, 20:30:04
Und nun des Rätsels Lösung:Ich habe dann zuerst mein frisch installiertes Linux gebootet, und mein Bootmenü angepaßt. Funzte problemlos. Dann mein Windows 2000 gebootet. Funzte ebenfalls. Dann die Partitionen mit Daten gefüllt, und wieder runtergefahren, und den Rechner erstmal Rechner sein lassen.

<schnipp>
Ich habe wirklich nichts mehr verändert, seit es das letzte mal ging. Dh ich habe schon eine Menge Zeug in meine menu.lst reingeschrieben (insbesondere die ext- und NTFS-Partitionen vor Win98 versteckt), aber das System hat damit bereits einmal gebootet (nach Windows 2000).Niemals darf man eine ext2-Partition verstecken, denn GRUB versteckt sie, indem der Partitionstyp geändert wird. Der wird dann zB duch cat /proc/partitions als "Amoeba" angezeigt, und nicht mehr als "Linux native".

Das dumme daran ist, dass GRUB selbst diese Partition nicht mehr als ext2 erkennt, obwohl es selbst diese Modifikation macht, also darüber Bescheid wissen sollte, dass "Amoeba" manchmal auch "Linux native" sein kann.

Ein bereits hochgefahrenes Linux hat damit iÜ überhaupt kein Problem. Man kann eine "Amoeba"-Partition völlig normal mounten.

Örks!

klutob
2005-01-19, 21:19:14
Hi,
Info oder Frage?
ein

grub
root (hd0,bootpartionsnummer-1)
setup (hd0)
quit

funktioniert nicht, weil grub die "/boot" Patition nicht erkennt?

zeckensack
2005-01-19, 22:05:18
Hi,
Info oder Frage?
ein

grub
root (hd0,bootpartionsnummer-1)
setup (hd0)
quit

funktioniert nicht, weil grub die "/boot" Patition nicht erkennt?Bringt nichts. Zwei Szenarien:
Wenn grub als bootloader gestartet ist, aber keine ext2-Partitionen lesen kann (mein Problem), dann bringt setup keine Verbesserung. Grub nochmal in den Bootsektor zu schreiben ist völlig redundant, denn es ist ja schon da.

Wenn grub aus einem laufenden Linux heraus aufgerufen wird, greift wieder das Problem: (mittels grub selbst!) versteckte /boot-Partitionen werden nicht als ext2 erkannt, selbst wenn sie wirklich ext2 sind, und sich vom Linux-System mounten lassen.
Das führt dann dazu, dass grub /boot/stage2 nicht findet. Grub muss aber wissen wo stage2 liegt, denn in den Bootblock passt das komplette Grub garnicht hinein, dort wird nur die Information hinterlegt wo stage2 aufzufinden ist. Aufgrund dieses Fehlers wird die Installation nicht ausgeführt (sie wäre aber genauso redundant wie im ersten Szenario btw).

__
Man kann grub also installieren bevor man /boot versteckt, dann /boot verstecken, und grub startet immer noch (es liest stage2 als rohe Sektoren, unabhängig vom Partitionstyp). Nur alles was auf Dateisystem-Support angewiesen ist, wie die Menüauswahl, oder das booten von Linux, funktioniert dann nicht mehr. Man kriegt dieses Prompt mit voller Funktionalität, nur muss man dann auch wissen wie es weiter geht.

klutob
2005-01-19, 23:53:50
Nun, ich möchte dir nicht mit unbeholfenen Meldungen auf den Keks gehen, aber ein (im Rescue Linux):

grub
root ( [<TAB>-completion] zeigt welche Laufwerke an?

Ist bei den oben von Grub erkannten angezeigten LW deine "Bootpartition" dabei (Ich glaube immer noch an einen trivialen Typo ;D )?

Läßt es sich den mit dem beschriebenen

grub
root (hdx,y)
setup (hdx)
quit

in Betrieb nehmen?

zeckensack
2005-01-20, 01:17:46
Nun, ich möchte dir nicht mit unbeholfenen Meldungen auf den Keks gehen, aber ein (im Rescue Linux):

grub
root ( [<TAB>-completion] zeigt welche Laufwerke an?

Ist bei den oben von Grub erkannten angezeigten LW deine "Bootpartition" dabei (Ich glaube immer noch an einen trivialen Typo ;D )?Ich habe keine "Bootpartition". Ich habe stage1 im MBR, stage1.5 für ext2 in irgendwelchen gottlob ungenutzten Sektoren und stage2 in einer regulären mit ext2 formatierten "Linux native"-Partition.

Dh booten tue ich immer von /dev/hde ohne Zahlensuffix respektive (hd0) ohne Komma. Und das klappte ja auch immer!

"Chainload" von Bootsektoren anderer Partitionen funzt, deswegen konnte ich auch Windows starten. Aber (auf die Gefahr hin, das offensichtliche zu schreiben): auf keiner meiner Linux-Partitionen ist ein Bootsektor, deswegen kein chainload von Linux, deswegen keine Bootfähigkeit von Linux.

Trotzdem die Antwort: grub erkennt in jeder Lebenslage völlig korrekt folgende Paritionen:
(hd0,0)
(hd0,1)
(hd0,4)
(hd0,5)
(hd0,6)
(hd0,7)
(hd1,4)
(hd1,5)

Läßt es sich den mit dem beschriebenen

grub
root (hdx,y)
setup (hdx)
quit

in Betrieb nehmen?Von wo aus soll ich das denn eingeben?
Im "kaputten", von Platte gebooteten grub-Prompt?
Oder aus dem von DVD gebooteten Rescue-System?

Eigentlich habe ich wenig Böcke, das jetzt nochmal kaputt zu machen, nur um zu sehen ob es damit reparierbar ist.

Als root-Partition soll ich die angeben, auf der die grub-images liegen, oder?
ZB habe ich die stages, menu.list und device.map in /dev/hde7/boot/grub/ respektive (hd0,6)/boot/grub/. Dann wäre dein Vorschlag konkret:
root (hd0,6)
setup (hd0)
Richtig?

Nun die Gegenfrage. Ist das nicht exakt das gleiche wie
mount /dev/hde7 /mnt
grub-install --root-directory=/mnt /dev/hde
(was nicht funktionierte)
?

klutob
2005-01-20, 09:03:21
Hi,



Von wo aus soll ich das denn eingeben?
Im "kaputten", von Platte gebooteten grub-Prompt?
Oder aus dem von DVD gebooteten Rescue-System?

Eigentlich habe ich wenig Böcke, das jetzt nochmal kaputt zu machen, nur um zu sehen ob es damit reparierbar ist.

Als root-Partition soll ich die angeben, auf der die grub-images liegen, oder?
ZB habe ich die stages, menu.list und device.map in /dev/hde7/boot/grub/ respektive (hd0,6)/boot/grub/. Dann wäre dein Vorschlag konkret:
root (hd0,6)
setup (hd0)
Richtig?

Nun die Gegenfrage. Ist das nicht exakt das gleiche wie
mount /dev/hde7 /mnt
grub-install --root-directory=/mnt /dev/hde
(was nicht funktionierte)
?

A)
Ich mach das gewohnheitsmäßig aus dem Rescuesys, k.A. inwieweit Grub all diese Optionen in der "Startkonsole" kennt.

B)
Verstehe ich nicht ganz, bisher mußt du doch alles zu Fuß laden, irgendeine Funktionalität bietet dir Grub doch im Moment überhaupt nicht an.
C)
Denke schon.

Ich finde halt das Grub etwas auskunftsfreudiger wird mit:


klutob~ #grub
GNU GRUB version 0.94 (640K lower / 3072K upper memory)

[ Minimal BASH-like line editing is supported. For the first word, TAB
lists possible command completions. Anywhere else TAB lists the possible
completions of a device/filename. ]

grub> root (hd
Possible disks are: hd0 hd1

grub> root (hd0,
Possible partitions are:
Partition num: 0, Filesystem type is fat, partition type 0xb
Partition num: 1, Filesystem type unknown, partition type 0x7
Partition num: 2, Filesystem type is ext2fs, partition type 0x83
Partition num: 4, Filesystem type unknown, partition type 0x82

grub> root (hd0,2)
Filesystem type is ext2fs, partition type 0x83

grub> setup (hd
Possible disks are: hd0 hd1

grub> setup (hd0)
Checking if "/boot/grub/stage1" exists... yes
Checking if "/boot/grub/stage2" exists... yes
Checking if "/boot/grub/e2fs_stage1_5" exists... yes
Running "embed /boot/grub/e2fs_stage1_5 (hd0)"... 22 sectors are embedded.
succeeded
Running "install /boot/grub/stage1 (hd0) (hd0)1+22 p (hd0,2)/boot/grub/stage2 /boot/grub/menu.lst"... succeeded
Done.

quit
klutob~ #




, als ein einfaches "grub-install". Die Stage1 (kennt keine Dateisysteme) muß ja wiederholt in den MBR geschrieben werden, da sie die phys. Lokalität des ersten Blocks der Stage1.5/Stage2 (kennen Dateisysteme) kennen muß.

zeckensack
2005-01-20, 14:34:14
Hi,
A)
Ich mach das gewohnheitsmäßig aus dem Rescuesys, k.A. inwieweit Grub all diese Optionen in der "Startkonsole" kennt.

B)
Verstehe ich nicht ganz, bisher mußt du doch alles zu Fuß laden, irgendeine Funktionalität bietet dir Grub doch im Moment überhaupt nicht an.
C)
Denke schon.A)Grub kann als Bootloader exakt das gleiche wie als Applikation, bzw eher mehr (nämlich booten)
B)*hrmpf*
Grub funktionierte die ganze Zeit 100%ig, rundum, konnte alles was grub können musste, ja, auch ein OS booten. Es verstand sogar ext2-Partitionen. Es hat nur die ext2-Partition nicht gesehen, weil diese den geänderten (versteckten) Partitionstyp hatte.
C)Eben.
Ich finde halt das Grub etwas auskunftsfreudiger wird mit:


klutob~ #grub
GNU GRUB version 0.94
<schnipp>Meine Grub-Version ist 0.92 (siehe Threadtitel), und deutlich weniger redselig. Wenn zB ein Kommando problemlos ausgeführt wurde, kriegt man garkeine Rückmeldung. Ich bin mir nichtmal sicher, ob TAB-Completion funzt. Zumindest fehlt dieser "Minimal BASH-like line editing is supported [...]"-Passus, was übles ahnen lässt.
Die Stage1 (kennt keine Dateisysteme) muß ja wiederholt in den MBR geschrieben werden, da sie die phys. Lokalität des ersten Blocks der Stage1.5/Stage2 (kennen Dateisysteme) kennen muß.Ich weiß. Nicht wirklich "immer wieder", sondern nur wenn
a)das Stage1.5-Image sich verschoben hat. Passiert bei "normaler" GRUB-Installation eigentlich nie, weil stage1.5 in reservierten Sektoren vor der ersten Partition geparkt wird.
b)die Partition auf der stage2 liegt mit einem anderen Dateisystem formatiert wurde (erfordert andere stage1.5)
c)stage2 auf eine andere Partition ausgewandert ist

War aber alles richtig. Ich weiß wie es aussieht, wenn stage2 nicht geladen werden kann, und das war bei mir definitiv nicht der Fall. Dann kriegt man erst garkein Prompt, sondern nur eine relativ aussagekräftige Fehlermeldung ("Could not load stage2" oä). Und das war's dann.

Irgendwie reden wir hier wohl auch gewaltig aneinander vorbei :redface:

Ich würde jetzt gerne einfach mal für die Akten festhalten wollen, dass man mit dem Verstecken von Partitionen sehr sparsam umgehen solllte, wenn man GRUB nutzt. Keinesfalls die /boot-Partition verstecken.

Windows-Systeme können mit ext2 sowieso nichts anfangen, und vergeben auch keinen Laufwerksbuchstaben, was ja im Prinzip der einzige vernünftige Grund ist, solche Partitionen überhaupt verstecken zu wollen.

klutob
2005-01-20, 15:08:29
Hi,

Irgendwie reden wir hier wohl auch gewaltig aneinander vorbei :redface:


Würde ich auch so stehen lassen. =)