Re: Bootsector nach Partitionierung herstellen

David Haller <[email protected]> Sat, 9 Apr 2011 02:26:38 +0200
Newsgroups gmane.linux.suse.programming
Organization What?
Message-ID <[email protected]>
Hallo,

Am Thu, 07 Apr 2011, Thomas Michalka schrieb:
>David Haller schrieb:
>> Lies auch mal 'info grub' ;) Da steht genau drin, was wie gebooted
>> wird. Und -- wenn du nicht per "aktiver Partition" zur FAT umschalten
>> willst: schreib GRUB einfach in den MBR.
>
>Bedeutet das, dass man einen Boot-Sektor-GRUB (BS-GRUB) direkt vom BIOS
>starten lassen kann, indem man das Aktiv-Flag der Partition, in der der
>BS-GRUB installiert ist, setzt? Also ohne Boot-Code im MBR?

Nein. Das BIOS liest immer schlicht den ersten Sektor des Ger=E4tes, das
in der Bootreihenfolge "vorne" ist (abh=E4ngig von den BIOS
Einstellungen und evtl. manueller Wahl via Boot-Men=FC), in den Speicher
und startet den Code dann. Der generische MBR-Bootsektor macht dann
das gleiche mit dem ersten Sektor der aktiven Partition der ersten
Platte.

>Noch eine Frage, ankn=FCpfend an die Diskussion, die wir k=FCrzlich hatten,
>mit einer kurzen Vorbemerkung:
>Es scheint wirklich so zu sein, dass mein BIOS meine eSATA-Platte immer
>an die zweite Stelle hinter der Boot-Platte setzt, obwohl sie eindeutig
>als dritte Platte im BIOS-Setup eingereiht ist. Durch lsscsi im selben
>System wird die Platte auch immer an der selben Stelle angezeigt, egal
>ob sie schon beim Booten drin war oder erst sp=E4ter eingeschoben wurde:
>
># lsscsi
>[3:0:0:0]    disk    ATA      WDC WD5000BEVT-0 01.0  /dev/sdg
>[4:0:0:0]    disk    ATA      OCZ-VERTEX2 3.5  1.22  /dev/sda
>[5:0:0:0]    disk    ATA      ST3500630AS      3.AA  /dev/sdb
>
>Also immer [3:0:0:0], mal als /dev/sda (beim Booten schon drin; unter
>den ATA-Ger=E4ten sogar das erste, hat aber nichts mir der Einreihung
>durch das BIOS zu tun), mal als /dev/sdg (ins laufende System eingesteckt).

Das h=E4ngt davon ab, in welcher Reihenfolge die SATA-Controller vom
Kernel erkannt werden. Guck dir mal deine /var/log/boot.msg an. Dort
wirst du in dem Fall den Controller, an der die Western Digital h=E4ngt,
erst beim Anschlie=DFen erkannt wird. Wenn du mit angeschlossener WD
bootest wird der Controller wohl vor den anderen erkannt. Guck mal,
welcher Treiber f=FCr den zust=E4ndig ist, wenn das nicht der gleiche ist
wie f=FCr den Onboard, dann kannst du das Problem l=F6sen in dem du das
Modul generell nach dem f=FCr Onboard l=E4dst.

>Nun die Frage: kann es sein, dass ein Aktiv-Flag in einer Partition auf
>der eSATA-Platte dazu f=FChrt, dass sie vom BIOS an die zweite Stelle
>eingereiht wird?

N=F6.

># fdisk -l /dev/sdg
>
>Disk /dev/sdg: 500.1 GB, 500107862016 bytes
>255 heads, 63 sectors/track, 60801 cylinders
>Units =3D cylinders of 16065 * 512 =3D 8225280 bytes
>Disk identifier: 0x0005df91
>
>   Device Boot      Start         End      Blocks   Id  System
>/dev/sdg1   *           1         523     4200966   82  Linux swap / ...
>/dev/sdg2             524         536      104422+  83  Linux
>/dev/sdg3             537        3147    20972857+  83  Linux
>/dev/sdg4            3148       60801   463105755   83  Linux
>
>Verstehe eh nicht, wieso die Swap-Partition als aktiv markiert ist, ist
>doch =FCberfl=FCssig.

=C4ndere es eben. Bei mir ist gar keine Partition aktiv ;P

>> # grub
>> grub> setup --stage2=3D/boot/grub/stage2 (hd0) (hd0,0)
>> grub> quit
>>=20
>> grub> help setup =20
>> setup: setup [--prefix=3DDIR] [--stage2=3DSTAGE2_FILE] [--force-lba[=3Do=
ff]] INSTALL_
>> DEVICE [IMAGE_DEVICE]
>>     Set up the installation of GRUB automatically. This command uses
>>     the more flexible command "install" in the backend and installs
>>     GRUB into the device INSTALL_DEVICE. If IMAGE_DEVICE is
>>     specified, then find the GRUB images in the device IMAGE_DEVICE,
>>     otherwise use the current "root device", which can be set by the
>>     command "root".
>>=20
>> -> Das "IMAGE_DEVICE" ist, wo GRUB dann stage2 und die menu.lst sucht.
>>=20
>> Du kannst nat=FCrlich auch weiter in die /-Partition installieren:
>>=20
>> grub> setup --stage2=3D/boot/grub/stage2 (hd0,0) (hd0,0)
>>=20
>> Wobei da die /boot/grub/device.map den passenden Eintrag haben mu=DF,
>> da=DF (hd0) =3D=3D CF-Karte.
>
>Wieso, Du verwendest doch auch f=FCr die Root-Partition nur
>GRUB-Ger=E4tebezeichner.
>
>Ich war bisher der Meinung, dass die device.map nur von
>grub-install[.unsupported] gebraucht wird, weil als Argumente f=FCr dieses
>Skript Linux-Ger=E4tebezeichner (/dev/sdXy) =FCbergeben werden k=F6nnen.

Und was meinst du, woher Grub wei=DF, as hd0 und was hd1 .. sein soll?

>Den Versuch, die Zuordnung zwischen Linux- und GRUB-Ger=E4tebezeichnern
>f=FCr die device.map mit der Option --recheck 'erraten' zu lassen, halte
>ich inzwischen sogar nur dann f=FCr sinnvoll, wenn man das genau in dem
>laufenden System macht, f=FCr das man GRUB gerade installieren m=F6chte.

Sowieso. Ich hab das System hier im neuen Rechner vorinstalliert --
und zwar auf ne externe Platte am anderen. Dort war meine jetztige
/dev/sda eben /dev/sdk. Und wenn ich dann (im BIOS-Bootmen=FC die Platte
ausgew=E4hlt hab) war sie dann /dev/sdg und Grub fand sich nicht weil's
eben nimmer hd0 sondern hd6 oder so war. Ich mu=DFte dann auch per find
die richtige Platte finden. Und im neuen System an Onboard SATA0
geh=E4ngt war sie dann eben /dev/sda.

>Installiert man GRUB aus einem z.B. von DVD gestarteten externen System
>f=FCr ein auf Platte installiertes System, dann sollte man das IMHO am
>besten in einer GRUB-shell, wie Du es oben gezeigt hast, machen. Man
>muss sich dann nur klar =FCber die Reihenfolge der Laufwerke sein, die das
>BIOS an den GRUB das gerade laufenden Systems gemeldet hat.

Vielmehr: melden wird, wenn man von der Platte startet. Aber dann mu=DFt
du AFAIK explizit '--stage2=3D' angeben, sonst wird das nicht klappen.

>> Wenn's dann klemmt mu=DFt du gucken, als was das device im Grub von
>> CF-gebootet auftaucht (da hilft dann z.B. 'find /boot/grub/menu.lst'
>> am grub-Prompt.
>
>Wenn man mehrere Platten bzw. Partitionen mit GRUB drauf hat, kann man
>so leider das Ger=E4t nicht identifizieren, weil find mehrere hd(x,y)
>findet :-(

Mach das mal wie ich mit 11 Platten (10 intern, 1 extern), aber
immerhin nur 3 Systemen (oder waren's 4?).

-dnh

--=20
"Sorry, I'm currently working with simpler life forms. Nothing with a
backbone."                               -- "Winston Scudder Thurmad"
"Oh. Can I have a middle manager then?"                    -- "Helix"
     [from "Freefall" [http://freefall.purrsia.com/ff600/fv00507.htm]