Grub auf zweiter Festplatte installieren (ubuntu)

Moin,

ich habe zwei physische Festplatten (sda und sdb) im PC hängen. Auf der ersten ist XP installiert, auf der zweiten waren bislang nur Backup-Daten, die Linux-Partition war leer.

Darauf habe ich nun das aktuelle Ubuntu 8.04 installiert. Dieses Sch…ding hat nun aber ungefragt auf meiner ersten Festplatte den Bootloader zerschossen, sprich, Grub da draufgelegt.

„Halb so wild“, dachte ich, wählte als Default-Eintrag einfach Windows aus und stellte die Wartezeit auf das Minimum - Ubuntu wird nur ab und zu gestartet.

Aber nun habe ich ein Problem : Die zweite Festplatte ist normalerweise ausgeschaltet, wird also wie eine Wechselplatte betrieben. Wenn die nun aus ist, zeigt mir Grub den Stinkefinger und irgendeinen Fehler (35 oderso). Mit anderen Worten: Um Windows hochfahren zu können, muss die zweite Platte vorhanden sein. Im Nachhinein ist mir das auch klar, weil dort die menu.lst oderso liegt. Aber wer denkt sich denn so einen Mist aus …

Kurze Rede, langer Sinn: Ich habe nun versucht, mittels grub-install /sdb einen eigenen Bootloader auf der zweiten Festplatte zu installieren. Das scheint im Prinzip auch erfolgt zu sein, denn nun erkennt das BIOS diese Platte auch als bootfähig, aber wenn ich von dort zu booten versuche, passiert das gleiche oder was ähnliches wie beim Starten von der ersten Platte ohne die zweite. Also gar nichts.

Nun hatte ich überlegt, die erste Festplatte abzuziehen und den Bootloader dann noch einmal komplett zu installieren. Aber dann heißt die zweite Platte vermutlich plötzlich sda, und wenn die erste dann wieder mit rein kommt, klappt bestimmt wieder nichts.

Frage also: Wie bekomme ich auf die zweite Platte einen eigenständigen Bootloader, und wie bekomme ich den Grub von der ersten wieder runter in einer Weise, dass der normale XP-Bootloader dort wieder erscheint?

Danke vorab für Hinweise,
Kristian

den Stinkefinger und irgendeinen Fehler (35 oderso).

Geht das genauer? Die Gabe der Hellsicht ist mir nicht geschenkt. Wenn es daran liegt, daß der GRUB die Partitionen auf denen die Kernelimages liegen nicht findet (ist geraten) könnte eine boot Partition weiterhelfen.

den Stinkefinger und irgendeinen Fehler (35 oderso).

Geht das genauer? Die Gabe der Hellsicht ist mir nicht geschenkt.

Nicht? Hm. Na dann … :wink: Also ich halte das nicht für so relevant, daher hatte ich mich nicht bemüht, das noch rauszufinden. Außer einer Nummer käme da ohnehin nichts weiter. Aber ich guck nochmal nach beim nächsten (Fehl)Start.

Wenn es daran liegt, daß der GRUB die Partitionen
auf denen die Kernelimages liegen nicht findet (ist geraten)

Das ist ja vermutlich genau das, was ich beschrieben hatte. Der Bootloader selbst befindet sich auf /sda, der ganze „Rest“ offenbar auf /sdb. Was auch immer dieser Rest sein mag - vermutlich sind es auch die Images, ja. Von denen hatte ich auch im man-File gelesen, konnte aber nicht so viel mit anfangen und wollte mir nicht noch mehr zerballern :wink:

könnte eine boot Partition weiterhelfen.

Hm. Das kann ich jetzt nicht kommentieren. Wie gesagt: Der Plan ist ganz einfach: Der PC soll, wenn er von der zweiten physischen Platte bootet, Ubuntu starten und das auch dann, wenn die erste Platte, die dann aus der Sicht von Linux /sda heißt, vorhanden ist. Diese erste Platte hat Linux aber ansonsten nicht zu interessieren :wink:

Nicht 35, sondern 21.

GRUB Loading stage1.5.

GRUB loading, please wait...
Error 21
\_

Eventuelle Antworten bitte auf den anderen Thread, nicht hier. Danke.

Starte Windows oder eine Windows CD und geb in der Eingabeaufforderung/Rettungskonsole

fixmbr

ein, das sollte den Win-Bootloader wieder herstellen.
Vorher, kannst du Ubuntu starten, öffnest eine Konsole und gibst

sudo grub

ein.
Dann musst du erstmal GRUB sagen, auf welcher Partition Ubuntu zu finden ist. Dabei bennent GRUB die Festplatten etwas merkwürdig.

(hd1,4)

Die erste Zahl gibt die Platte an und fängt dabei bei 0 an zu zählen (hd0) ist also primary-master, (hd1) ist primary-slave, …
Die zweite Zahl gibt die Partitionnummer an, auch hier fängt er bei 0 an zu zählen.
(hd0,0) ist die erste Partition der ersten Platte
(hd0,4) ist die fünfte Partition der ersten Platte
(hd1,0) ist die erste Partition der der zweiten Platte
(hd1,3) ist die vierte Partition der zweiten Platte.

Prinzip verstanden? Wenn nicht frag noch mal nach, ansonsten musst du ihm jetzt deine Ubuntu Partition nennen, ist Ubuntu auf der 7 Partition der zweiten Platte installiert, gibst du folgendes ein:

root (hd1,6)

(hd1,6) musst du dann halt ersetzten.
Danach musst du ihm sagen, wohin er GRUB installieren soll, das ist ja der springende Punkt:

setup (hd1)

Damit installiert er GRUB in die MBR der zweiten Festplatte.

Soweit so gut. Ich schätze dann solltest du in der Lage sein, Ubuntu zu starten, in dem du die zweite Platte anschließt und im BIOS in der Bootreihenfolge die zweite Platte wählst.
Ich hab das noch nie selber gemacht, es könnte sein, dass durch das Ändern der Bootreihenfolge auch die Plattenreihenfolge in GRUB geändert wird. Also eventuell sind für ihn dann die Platten vertauscht und er findet Ubuntu wieder nicht. Wenn dem so ist, reicht es vielleicht die Datei /boot/grub/device.map anzupassen (da steht welche Platte welche GRUB-Bezeichnung hat).

Es gibt aber zwei Alternativen. Entweder du legst dir auf der ersten Platte eine kleine Partition (ca 500MB), dort wird dann GRUB mit allen wichtigen Daten installiert oder du installierst GRUB auf eine Diskette (oder auch USB-Stick, falls dein BIOS von USB booten kann).

Solange du eine LiveCD wie die von Ubuntu hast, ist nichts verloren, da kannst du immer bisschen rumspielen (wenn es um GRUB geht).

Gruß

Das probier ich aus …

fixmbr

Das vermutete ich auch. Allerdings wollte ich natürlich erst die Ubuntu-Geschichte klären. Und vor allem: Ich habe bestimmt 2 Jahre lang immer von Diskette booten müssen, weil es mir bei meinem alten Rechner nicht mehr gelungen war, den Bootloader auf der Festplatte wieder hinzubekommen (mit allen möglichen Tools), nachdem eine damals Ubuntu-7-Installation ein ähnliches Chaos veranstaltet hatte. Daher bin ich etwas übervorsichtig diesmal. Zumal das Mainboard das Floppy nicht erkennt … :wink:

sudo grub
root (hd1,6)
setup (hd1)

Aha. Das ist genau das, was ich brauche, glaube ich. Das Prinzip mit den Partitionen-Namen undso ist mir geläufig, ich hatte aber zur Sicherheit nochmal in der menu.lst nachgeschaut. Mich wundert ein bisschen, dass der grub „hd“ statt „sd“ verwendet, aber das soll mir wurscht sein :wink:

Ich habe den Kram mal eingegeben, und er scheint auch einiges gemacht zu haben. Mal gucken, was jetzt beim Neustart passiert :wink:

Solange du eine LiveCD wie die von Ubuntu hast, ist nichts
verloren, da kannst du immer bisschen rumspielen (wenn es um
GRUB geht).

Jupp, das stimmt. Zumal ich ohnehin erstmal nur die Basis-Installation drauf habe und noch keine großartigen Daten unter Linux entstanden sind.

Danke für die ausführliche Antwort! Ich bin da mal zuversichtlich. Sollte ich mich in den nächsten Wochen nicht mehr melden, hat’s aber vermutlich nicht geklappt … :wink:

KRistian

Ich habe den Kram mal eingegeben, und er scheint auch einiges
gemacht zu haben. Mal gucken, was jetzt beim Neustart passiert :wink:

Hm. Es passiert folgendes:

Error 17: Cannot mount selected partition
Error 13: Invalid or unsupported executable format

Ersteres kommt beim Versuch, Ubunto zu starten, letzteres bei XP. Nach Key Press geht´s immer wieder zurück zur Liste. Diese ist übrigens identisch mit der vorherigen (also beim Booten von Platte 1). Im Prinzip ist das ja auch richtig, weil sich an den Installationen nichts verändert hat. Allerdings nehme ich an, dass es trotzdem noch die alte ist (dasselbe menu.lst) und die Namen irgendwie nicht mehr hinhauen - möglicherweise genau so, wie Du es gesagt hast: hd1 und hd2 sind nun vielleicht vertauscht.

Ich habe eben XP hochgefahren und weiß daher nicht, ob das Ubuntu-Booten von der ersten Platte aus noch klappt. Ich nehme aber an, dass es geht. Sollte ich nichts gegenteiliges schreiben, ist es so.

Hm. Also mit dem Booten von Platte 2 bin ich ein Stück weiter, aber noch nicht weit genug :wink:

Schließ mal die zweite Platte an und starte den Rechner.
Wenn GRUB erscheint drückst du ESC und danach ‚c‘ um in die GRUB-Konsole zu kommen.
Gib da mal folgendes ein:

find /boot/grub/stage2

Was gibt er dir da aus?
Das ist dann nämlich deine Ubuntu Platte.
wahrscheinlich steht dann dann eben
(hd0,x)

Dann, währe die Reihenfolge umgedreht.
Dann müsstest du die menu.lst dem entsprechend anpassen.
Für Linux selbst, dürfte das keine Auswirkungen haben.

Gruß

1 Like

find /boot/grub/stage2

Das werde ich mal probieren. Wenn ich in diese Konsole reinkommt, heißt das :wink: Ansonsten lege ich mir einfach mal eine Kopie von der menu.lst in das Verzeichnis, in der ich alle Bezeichnungen ausgetauscht habe und probiere es ohne die von Dir angeregte vorherige Prüfung.

Ehm … ich sehe gerade, dass in /boot/grub auch noch eine device.map liegt, die genau die von mir vermisste Zuordnung vornimmt:

(hd0) /dev/sda
(hd1) /dev/sdb

Die ist auch noch unverändert. Was passiert denn, wenn ich die menu.lst „umdrehe“ und die device.map nicht? Oder umgekehrt?

Ich lasse das erstmal und versuche doch erst, in die Konsole zu gucken :wink:

Die ist auch noch unverändert. Was passiert denn, wenn ich die
menu.lst „umdrehe“ und die device.map nicht? Oder umgekehrt?

Wenn du beides änderst, ist es doppelt gemoppelt und hast die gleiche Situation wie jetzt.
Allerdings weiß ich nicht genau, ob die device.map nur eine Infodatei ist oder tatsächlich die Zuordnung festlegt. Ich würde sagen probiers aus. Veränder die device.map, wenns klappt ist es gut. Wenn das nicht klappt, dann änder die menu.lst ab.

Gruß

Hat geklappt.

Wenn du beides änderst, ist es doppelt gemoppelt
und hast die gleiche Situation wie jetzt.

Ich bin jetzt zu faul, mir das durch den Kopf gehen zu lassen, aber wenn die Bezeichnungen /sda und /sdb sozusagen vom Bios vorgegeben werden, also unabhängig vom Betriebssystem, dann hast Du recht.

Ich hatte es trotzdem mal mit umgedreht, und nun funktioniert es.

Allerdings weiß ich nicht genau, ob die device.map nur eine
Infodatei ist oder tatsächlich die Zuordnung festlegt.

Sieht fast so aus.

Jetzt muss ich nur noch den fixmbr drüberlaufen lassen und hoffe inständig, dass ich danach XP noch hoch kriege :wink: Allerdings … selbst wenn nicht, müsste es vielleicht über den Grub von der zweiten Platte noch funktionieren - zumindest geht das zur Zeit. Sicher bin ich mir da aber nicht, weil ich nicht genau weiß, wie sich Bios-, Windows- und Linux-Bootloader untereinander organisieren. Aber ich werd´s ja merken :wink:

Danke zunächst für die Tipps, die ich oben mal mit einem Sternchen versehen werde.

Viele Grüße,
Kristian

BIOS ließt die MBR (ersten 512 bytes) des Bootgerätes (und zwar des gesamten Gerätes, nicht etwa der ersten Partition) aus, also CD-ROM, Festplatte, Floppy, von was auch immer gebootet werden soll.
Da befindet sich der Bootloader drin. Hast du nur Windows installiert steht in der MBR nur eine Art Verweis auf die MBR der Partition auf der Windows installiert ist. Dort steht dann alles weitere drin um Windows zu starten.
GRUB ist wesentlich komplexer und größer als der Windows-Bootloader. Zu groß um komplett in die 512 Bytes zu passen). Deswegen besteht GRUB aus mehreren Stufen (Stages): Stage 1 und Stage 2 (genau genommen gibt es nur Stage 1.5 das ist aber nicht so wichtig).
Stage 1 steckt in der MBR da steht im Prinzip nur drin, wo sich die Stage 2 (mit menu.lst, device.map, …) befindet. Die befinden sich ja alle auf der Linux-Partition. Startest du deinen Rechner also ohne Linux Festplatte, verweist Stage 1 ins Leere.
Um Windows zu booten, macht GRUB nicht mehr als der Windows Bootloader.

title Windows
root (hd0,1)
chainloader +1

root sagt wo Windows installiert ist.
chainloader ließt den ersten Sektor (die MBR) dieser Partition aus (+1= ersten 512 Bytes, +2=die ersten beiden 512 Bytes, …).
Um Linux zu booten hast du prinzipiell zwei Möglichkeiten.
Entweder genauso wie Windows, du verweist einfach auf den ersten Sektor der Linux-Partition, dazu muss allerdings ein weiteres GRUB auch in den ersten Sektor der Partition installiert (das kann man bei der Installation angeben, oder eben mit ‚setup (hd1,3)‘ nachträglich machen).
Oder aber du bootest es direkt, ohne den Umweg über ein zweites GRUB.
Zum Booten braucht es einen Kernel und ein Initrd-Images (dort befinden sich die zum Starten wichtigen Treiber drin).

title Linux
kernel (hd1,3)/boot/vmlinuz root=/dev/sdb4
initrd (hd1,3)/boot/initrd.img

Genau genommen gibt es nur eine Möglichkeit, denn die erste verweist ja nur auf ein weiteres GRUB, dass dann den Kernel und das Image bootet.

So, das soll mal ein grober Einstieg in die Bootloader sein.

Gruß

Jetzt muss ich nur noch den fixmbr drüberlaufen lassen und
hoffe inständig, dass ich danach XP noch hoch kriege :wink:
Allerdings … selbst wenn nicht, müsste es vielleicht über
den Grub von der zweiten Platte noch funktionieren - zumindest
geht das zur Zeit. Sicher bin ich mir da aber nicht, weil ich
nicht genau weiß, wie sich Bios-, Windows- und
Linux-Bootloader untereinander organisieren. Aber ich werd´s
ja merken :wink:

2 Like

Alles klar, vielen Dank :smile: • o.w.T.
o.w.T.

mbrfix half: Bootloader wieder okay (statt fixmbr)

Starte Windows oder eine Windows CD und geb in der
Eingabeaufforderung/Rettungskonsole

fixmbr

Moin,

ich habe gerade den Bootloader wieder vom Grub bereinigt. Nun kann ich von der ersten Platte wieder unabhängig von der zweiten XP booten und von der zweiten wahlweise das darauf befindliche Ubuntu oder von da aus das XP auf der ersten. Wunderbar :smile:

Das Problem war, fixmbr zu finden. Ich habe nur eine Recovery-CD ohne Konsole, und unter XP selbst scheint es den Befehl nicht zu geben in der Eingabeaufforderung. Eine alte Disk-Tools-Not-Boot-CD hatte das offenbar auch nicht drauf, und so suchte ich nochmal im Netz. Und siehe da: Es geht ganz einfach:

http://blog.second-hype.de/archiv/32/bootsektor-ohne…

Innerhalb von Sekunden war die Sache von XP aus erledigt. Ich würde mir am liebsten selbst ein Sternchen geben dafür :wink: Nicht für mich natürlich, sondern zur Hälfte für den besagten Blog-Eintrag und zur anderen für das Tool selbst :wink:

Kristian

Einige Installationsmedien von Linux besitzen eine Rettungskonsole.
Oftmals findet man dort auch einen Punkt zur Wiederherstellung des Windows Bootloaders.
Das einzige Beispiel was mir einfällt, bei dem ich mir auch sicher bin, ist die Mandriva DVD (Free nicht One). Aber bei den anderen großen ist das sicherlich ähnlich.

Gruß und glückwunsch, dass es jetzt läuft!
TeaAge

Hallo Leute,


Ehm … ich sehe gerade, dass in /boot/grub auch noch eine
device.map liegt, die genau die von mir vermisste Zuordnung
vornimmt:

(hd0) /dev/sda
(hd1) /dev/sdb

M.w. geschieht die Zuordnung der hdX durch das BIOS und die dort eingestellte Boot-Reihenfolge.
Das führt dazu, daß eine SCSI-Platte hd0 ist, wenn - in einem Mischsystem - „SCSI vor IDE“ eingestellt ist und umgekehrt die IDE-Platte die hd0, wenn „IDE vor SCSI“.

Das gleiche gilt, wenn man eine deaktivierte IDE-Wechselplatte als Bootmedium einstellt.

Da der Kernel die Zuordnung /dev/sdX (bzw /dev/hdX) nach NICHT nach dem BIOS vornimmt, könnten sich da Probleme ergeben.
Die könnte man nur lösen, wenn man ‚Try next‘ oder so in die menu.lst einbaut, was prinzipiell möglich, aber nicht trivial ist.

Alternativ könnte man eine Liste mit den möglichen Wechselplatten in der menu.lst erstellen und beim Booten diese auswählen.

Besser halte ich aber, wie hier auch angesprochen, daß man JEDER Platte einen Grub spendiert, der *genau* auf diese Platte zugeschnitten ist. Der Master-Grub ist dann auf der jeweiligen Boot-Platte und wählt die anderen Platten aus.

Nebenbei: ich habe festgestellt, das hd0 IMMER die Platte ist, welche man im Bios als Startmedium wählt.

Wenn man den Problemen mit /dev/hdX ausweichen will, sollte man die Partitionen in der /etc/fstab mit dem Identifier mounten.
Habe das erfolgreich praktiziert. Für die Ermittlung der ID gibt es Tools, oder man macht das bei Suse über Yast.

Günter