Re: Bootsector nach Partitionierung herstellen
Thomas Michalka <[email protected]> Sat, 09 Apr 2011 23:04:11 +0200
| Newsgroups | gmane.linux.suse.programming |
|---|---|
| Message-ID | <[email protected]> |
Hallo David,
David Haller schrieb:
> Hallo,
>=20
> 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 BIO=
S
>> starten lassen kann, indem man das Aktiv-Flag der Partition, in der de=
r
>> BS-GRUB installiert ist, setzt? Also ohne Boot-Code im MBR?
>=20
> Nein. Das BIOS liest immer schlicht den ersten Sektor des Ger=C3=A4tes,=
das
> in der Bootreihenfolge "vorne" ist (abh=C3=A4ngig von den BIOS
> Einstellungen und evtl. manueller Wahl via Boot-Men=C3=BC), in den Spei=
cher
> und startet den Code dann.
Wenn dann aber erst noch ein Boot-Men=C3=BC kommt, wird i.Ggs. zu Deinem
folgenden Text das ausgew=C3=A4hlte gebootet.
> Der generische MBR-Bootsektor macht dann
> das gleiche mit dem ersten Sektor der aktiven Partition der ersten
> Platte.
Wenn man nichts im Boot-Men=C3=BC ausw=C3=A4hlt und kein Eintrag als "def=
ault"
markiert ist?
Startet GRUB ohne Auswahl dann nicht das System, das im ersten Eintrag
steht (muss vielleicht nochmal nachlesen, aber ich glaube mich daran zu
erinnern)?
>> Noch eine Frage, ankn=C3=BCpfend an die Diskussion, die wir k=C3=BCrzl=
ich hatten,
>> mit einer kurzen Vorbemerkung:
>> Es scheint wirklich so zu sein, dass mein BIOS meine eSATA-Platte imme=
r
>> an die zweite Stelle hinter der Boot-Platte setzt, obwohl sie eindeuti=
g
>> 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=C3=A4ter eingeschoben w=
urde:
>>
>> # 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=C3=A4ten sogar das erste, hat aber nichts mir der Einreihu=
ng
>> durch das BIOS zu tun), mal als /dev/sdg (ins laufende System eingeste=
ckt).
>=20
> Das h=C3=A4ngt 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=C3=A4=
ngt,
> erst beim Anschlie=C3=9Fen erkannt wird. Wenn du mit angeschlossener WD
> bootest wird der Controller wohl vor den anderen erkannt.
So ist es:
Booten mit eSATA =3D=3D> [3:0:0:0] ... ... WDC ... /dev/sda
^
eSATA nachtr=C3=A4gl. =3D=3D> [3:0:0:0] ... ... WDC ... /dev/sdg
^
Wenn auch sehr interessant, ist das wohl etwas akademisch, denn da wurde
ja schon gebootet. Bei mir war aber immer die Frage, warum beim Booten
mit eingesteckter eSATA-Platte die Systeme der zweiten internen Platte
nicht mehr startf=C3=A4hig sind. Die Erkl=C3=A4rung, zugegebenerma=C3=9Fe=
n nicht in
ersch=C3=B6pfender Tiefe, scheint zu sein, was ich oben in meiner
"Vorbemerkung" schrieb.
> Guck mal,
> welcher Treiber f=C3=BCr den zust=C3=A4ndig ist, wenn das nicht der gle=
iche ist
> wie f=C3=BCr den Onboard, dann kannst du das Problem l=C3=B6sen in dem =
du das
> Modul generell nach dem f=C3=BCr Onboard l=C3=A4dst.
name@rechner> lsmod | grep "ata\|ahci\|micron"
pata_amd 33284 0
sata_nv 46860 13
ahci 51080 1
pata_jmicron 23808 0
libata 195232 4 pata_amd,sata_nv,ahci,pata_jmicron
scsi_mod 195160 5 sr_mod,usb_storage,sg,sd_mod,libata
dock 29344 1 libata
Sind jetzt sata_nv f=C3=BCr die eSATA-Platte (WDC) und ahci f=C3=BCr die =
anderen
(internen) SATA-Ger=C3=A4te zust=C3=A4ndig? Und pata_jmicron scheint f=C3=
=BCr den
IDE-Port zust=C3=A4ndig zu sein.
name@rechner> uname -r
2.6.25.20-0.1-default
N.B. War da ahci auch schon im Kernel?
>> Nun die Frage: kann es sein, dass ein Aktiv-Flag in einer Partition au=
f
>> der eSATA-Platte dazu f=C3=BChrt, dass sie vom BIOS an die zweite Stel=
le
>> eingereiht wird?
>=20
> N=C3=B6.
Kann das BIOS nicht das zust=C3=A4ndige Byte lesen, bzw. tut es das siche=
r
nicht? Das k=C3=B6nnte eine ersch=C3=B6pfende Erkl=C3=A4rung f=C3=BCr das=
Ph=C3=A4nomen sein,
dass bei eingeschobener eSATA-Platte beim Booten selbige immer an die
zweite Stelle in der Reihenfolge tritt, anstatt sich an die von mir
vorgegebene Reihenfolge zu halten (also an dritter Stelle zu bleiben).
>> # 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, is=
t
>> doch =C3=BCberfl=C3=BCssig.
>=20
> =C3=84ndere es eben. Bei mir ist gar keine Partition aktiv ;P
Genau, schon um meine obige Vermutung zu pr=C3=BCfen. Allerdings eine akt=
ive
brauche ich (wirklich?), um ab und zu ein Windows zu starten :-(
>>> # grub
>>> grub> setup --stage2=3D/boot/grub/stage2 (hd0) (hd0,0)
>>> grub> quit
>>>
>>> grub> help setup =20
>>> setup: setup [--prefix=3DDIR] [--stage2=3DSTAGE2_FILE] [--force-lba[=3D=
off]] 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".
>>>
>>> -> Das "IMAGE_DEVICE" ist, wo GRUB dann stage2 und die menu.lst sucht=
.
>>>
>>> Du kannst nat=C3=BCrlich auch weiter in die /-Partition installieren:
>>>
>>> grub> setup --stage2=3D/boot/grub/stage2 (hd0,0) (hd0,0)
>>>
>>> Wobei da die /boot/grub/device.map den passenden Eintrag haben mu=C3=9F=
,
>>> da=C3=9F (hd0) =3D=3D CF-Karte.
>> Wieso, Du verwendest doch auch f=C3=BCr die Root-Partition nur
>> GRUB-Ger=C3=A4tebezeichner.
>>
>> Ich war bisher der Meinung, dass die device.map nur von
>> grub-install[.unsupported] gebraucht wird, weil als Argumente f=C3=BCr=
dieses
>> Skript Linux-Ger=C3=A4tebezeichner (/dev/sdXy) =C3=BCbergeben werden k=
=C3=B6nnen.
>=20
> Und was meinst du, woher Grub wei=C3=9F, as hd0 und was hd1 .. sein sol=
l?
Das BIOS l=C3=A4dt den MBR mit GRUB darin und =C3=BCbergibt die Reihenfol=
ge der
Platten, und GRUB nimmt die Zuordnung vor:
die erste (Bootplatte) --> (hd0)
die zweite --> (hd1)
die dritte --> (hd2)
...
Wenn GRUB aber doch die device.map nach seinem Start durch das BIOS
auswertet, dann w=C3=A4re das _die_ L=C3=B6sung f=C3=BCr mich. Aber ich h=
abe keinerlei
Hinweis darauf. Im Gegenteil: wenn ich mit "F8" das BIOS-Boot-Men=C3=BC (=
noch
vor GRUB) aufrufe, dann kann ich alles starten, obwohl die device.map
f=C3=BCr den MBR-GRUB derzeit v=C3=B6llig 'gaga' ist:
name@rechner> cat /grub/boot/grub/device.map
(fd0) /dev/fd0
(hd0) /dev/sde
(hd1) /dev/sdf
Das galt f=C3=BCr ein Rettungssystem, in dem die SSD eben /dev/sde und di=
e
HDD /dev/sdf (hier ohne eSATA-Platte) war.
>> Den Versuch, die Zuordnung zwischen Linux- und GRUB-Ger=C3=A4tebezeich=
nern
>> f=C3=BCr die device.map mit der Option --recheck 'erraten' zu lassen, =
halte
>> ich inzwischen sogar nur dann f=C3=BCr sinnvoll, wenn man das genau in=
dem
>> laufenden System macht, f=C3=BCr das man GRUB gerade installieren m=C3=
=B6chte.
>=20
> 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=C3=BC die Pl=
atte
> ausgew=C3=A4hlt hab) war sie dann /dev/sdg und Grub fand sich nicht wei=
l's
> eben nimmer hd0 sondern hd6 oder so war.
Bei mir ist das genau nicht so: Wenn ich im BIOS-Boot-Men=C3=BC meine zwe=
ite
Platte (HDD) als Boot-Ger=C3=A4t ausw=C3=A4hle, dann kann ich im MBR-Boot=
-Men=C3=BC
(ja, auch bei der HDD habe ich f=C3=BCr diesen Fall den MBR mit einem GRU=
B
ausgestattet) alle mit (hd0,x) eingetragenen Boot-Sektor-GRUBs starten.
Wenn diese mir dann bei einer Distri die verschiedenen Kernel anbieten,
dann muss ich nach der Auswahl sogar (hd1,x) auf (hd0,x) umeditieren,
weil (hd1,x) nur gilt f=C3=BCr die HDD als zweite Platte (der Normalfall)=
,
wenn ich von der SSD (dann hd0) gebootet habe! Jetzt war ausnahmsweise
aber die HDD die erste, so dass f=C3=BCr jeden Kernel einer Distri ein "r=
oot
(hd0,x)" f=C3=BCr erfolgreiches Finden durch GRUB eingetragen sein m=C3=BC=
sste.
Dieses (sehr seltene) umeditieren k=C3=B6nnte ich mir wahrscheinlich spar=
en,
wenn ich in der menu.lst des HDD-MBR-GRUB in jedem Eintrag (hd0) <-->
(hd1) ummappen w=C3=BCrde, was ja dann nur vork=C3=A4me, wenn ich von der=
HDD
gebootet habe.
> Ich mu=C3=9Fte dann auch per find
> die richtige Platte finden. Und im neuen System an Onboard SATA0
> geh=C3=A4ngt war sie dann eben /dev/sda.
Da werde ich deshalb nicht schlau daraus, weil die Zuteilung der
Linux-Ger=C3=A4tebezeichner doch erst durch den Kernel nach dem Laden der
Treiber-Module erfolgt, wenn ich Dich weiter oben richtig verstanden habe=
.
>> Installiert man GRUB aus einem z.B. von DVD gestarteten externen Syste=
m
>> f=C3=BCr 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 =C3=BCber die Reihenfolge der Laufwerke sein, =
die das
>> BIOS an den GRUB das gerade laufenden Systems gemeldet hat.
>=20
> Vielmehr: melden wird, wenn man von der Platte startet.
N=C3=B6, das ist ja immer das erste Ger=C3=A4t, also f=C3=BCr GRUB immer =
(hd0). Zum
Zeitpunkt der GRUB-Installation (des setup-Kommandos) muss setup dem
Kommando install das GRUB-Device mitteilen, wo install den GRUB-CODE
hinschreiben soll, nicht welches GRUB-Device es beim sp=C3=A4teren Start =
sein
wird.
> Aber dann mu=C3=9Ft
> du AFAIK explizit '--stage2=3D' angeben, sonst wird das nicht klappen.
Ja, das muss der Pfad sein, wo stage2 zum Zeitpunkt der
GRUB-Installation zu finden ist. Ich glaube, man kann sogar
grub> setup --stage2=3D(hd1)/boot/grub/stage2 (hd1)
schreiben, also GRUB-Notation und Pfad-Notation mischen.
Wenn die jetzige (hd1) sp=C3=A4ter als Boot-Platte die (hd0) werden soll,
k=C3=B6nnte so eine explizite Angabe n=C3=B6tig sein.
Auch von mir nochmal ein gro=C3=9Fes Dankesch=C3=B6n f=C3=BCr Deine gro=C3=
=9Fe Beitrags- und
Hilfsbereitschaft!
Gru=C3=9F, Tom
P.S.: Hier sind wir ja doch schon ganz sch=C3=B6n vom "programming"
abgekommen, aber mei, wenn's hilft -- und man muss ja nicht p=C3=A4pstlic=
her
als der Papst sein ;-)
--=20
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]=
g