Maerchenstunde III Muenchhausen zieht sich aus dem Sumpf

29/05/2008 - 20:05 von Holger Petersen | Report spam
[Es muss nicht alles untere auf die letzte Zahl genau
stimmen; deshalb auch der Titel "Màrchenstunde". Es
kommt vor allem auf das Prinzip an...]

Es kam das Jahr 1984. Alle Welt redete von Orwell - und
vom IBM-AT. Endlich ein 32-Bit-fàhiger Microcomputer mit
sagenhaften 1 Megabyte RAM auf dem Motherboard und einer
groooossen Floppy-Kapazitàt von 1,2 Megabyte.
Ausserdem konnte man (auch per Zusatzkarte) bequem eine
Harddisk anschliessen.

Diese musste auf vor der Benutzung meist formatiert und
auf jeden Fall *partitioniert* werden. Seit (mindestens)
damals gibt es den MBR.

! Für andere Betriebs-Systeme gelten folgende Ausführungen
! ausdrücklich *nicht*.

Auf dem IBM-AT waren die ersten Harddisken grundsàtzlich
mit 27 Sektoren pro Spur, 'wenigen' Spuren (deutlich unter
1024 :-) und 'wenigen' Platten eingeteilt. Auf den aller-
ersten ATs gab es auch *keine* Funktionen im BIOS um die
Grösse der Harddisk irgendwie in das sogenannte CMOS-RAM
einzuprogrammieren. Der 'freundliche' Hàndler hatte eine
'Service'-Floppy mit der das möglich war[*].
Die Boot-Reihenfolge war auch festgelegt: Zuerst die HD,
dann die Floppy.

! Ein im BIOS einprogrammiertes "Setup" kam erst ein
! paar Monate (Jahre?) spàter vor allem von Fremdher-
! stellern auf.

Aus dieser Zeit stammt folgende Einteilung der Harddisk:

a) Die Platten werden ab _eins_ gezàhlt.
b) Die Spuren ab _null_ und
c) Die 27 (fest) Sektoren pro Spur ab _eins_.

Egal wie gross (oder klein in heutigen Massstàben :-) die
Platte auch war:

Es gibt immer "Platte 1, Spur 0, Sektor 1"

Ob man nun den gesammten Sektor "Master Boot Record" nennt
(wie ich das meist und im folgenden mache) oder diesen
Begriffa uf die (siehe unetn) ersten 446 Bytes reduziert
(wie Henning das macht) sei vorerst egal).

Die dort befindlichen 512 Bytes werden nun (auch heute) beim
PC-Start in den Speicher geladen. Es folgt eine (oberflàch-
liche Prüfung: magische Bytes "55" und "AA" am Ende) und dann
wird der am Anfang der geladenen Byte sstehende Code ausgeführt.

Das sind als maximal 512 - 2 ==> 510 Bytes. Manche Virus war
darin bequem unterzubringen...

Aber der PC sollte ja etwas sinnvolles tun. Und man hatte sich
ausgedacht, dass man die 'riesige' Harddisk im (maximal) *vier*
Teile aufteilen konnte; sogenannte *Partitionen*.
Zur Festlegung von solchen Partitionen musste man die Abgrenzun-
gen zu den jeweils anderen irgendwo speichern; man hat siech die
vor-letzten Bytes des oben erwàhnten Sektors ausgeguckt. Pro mög-
licher Partition investierte man 16 Bytes zur Beschreibung. Ganz
grob stand da drin: "Start-Platte, Start-Spur und Start-Sektor".

Diese Tabelle ist also 16*4 == 64 Bytes gross.
Von den 512 Bytes des MBRs verbleiben also 512 - 2 - 64 => 446
Bytes mit (möglichst) sinnvollem Inhalt.

Weil eines der möglichen Betriebssysteme von damals nicht mit
"angefangenen Teilen" von Spuren zurechtkommen konnte musste
man (mindestens dafür) die Partition auf einer kompletten Spur
beginnen lassen. "Damals" war das nicht soo tragisch; von den
27 Sektoren war einer sowieso vom MBR belegt und 26 frezulas-
sende Sektoren konnte man verkraften...
Heuet ist eine Spur (fast) ein Megabyte gross; aber diese Ver-
schwendung wegen DOS ist gegenüber den gesamt-Kapazitàten zu
vernachlàssigen.

Der MBR ist also:

Immer der erste Sektor auf der nullten Spur der ersten Platte

Niemals "Teil einer Partition"

Im MBR ist:

a) ein fabrikfrischer Inhalt (ohne 55/aa am Ende)

b) ein korrekter Inhalt

c) ein veralteter Inhalt

Die Möglichkeit (a) führt (heute meist) zu einem 'schwarzem
Bildschirm'; früher habe ich mal eien (BIOS-) Fehlermeldung
gesehen.

Bei (b) startet der PC wie gewünscht.

Und bei (c) gibt es jede mögliche (und un-mögliche) Art von
(Fehler-) Meldungen.

Für (b) gibt es klarerweise mehrere verschiedene Möglichkeiten
je nach dem (oder den mehreren) installiertem(n) Betriebssys-
tem(en):

1) MS/DOS (und Windows bis 98/ME)

Es wird in diesen 446 Bytes ein Programm installiert, welches
die dahinterliegende Tabelle nach *einem* als Aktiv gekennzeich-
netem Eintrag durchsucht. Wenn einer (oder der erste?) gefunden
ist, wird der *erste* Sektor der so definierten Partition ins
RAM geladen und (nach eventueller weiterer Prüfung auf 55/aa)
zur Ausführung gebracht.

In Yast kann man das mit:

"Installieren in den Boot-Sektor der Linux-Partition"

erreichen. Die Auswahl welches Betriebssytem beim Booten startet
wird dann (unbequem :-) über die Änderung des 'Aktiv'-Flags in
der Partitions-Tabelle erreicht [mit FDISK im *noch* laufenden
alten System :-) ]

Mit Windows-NT und Nachfolgern (Viste ???) wurde hier ein anderes
Programm installiert, welches in der Lage ist (ob direkt oder mit
einer Art 'Stage-2' weiss ich nicht) einen im NT-Dateisystem be-
findliches Programm zu starten ("NT-Loader") welches einerseits
eine im dortigen Dateisystem liegende Tabellein Text-Form ein-
liesst um dann eine Art Boot-Manager zu starten. Dieser startet
dann seinerseits ein 512 Byte 'kleines' Programm welches weiter
'bootet'.


WENN man den (per Yast) in den boot-Sektor der Linux-Partition
geschriebenen Code als Datei dem NT-Loader zur Verfügung stellt
(und einen Eintarg in der Text-Datei macht) kann man auch auf
diesem Wege ein LINUX starten.

Ganz in der Anfangszeit von Linux gab es noch ein LoadLinux.com
genanntes Programm, welches *unter MS/DOS* in der Lage war, ein
auf einer anderen Partition liegendes (oder in einer DOS-Datei
verstecktes) Linux zu starten.

Normalerweise haben frühere Linux-Installationen das Programm
LILO installiert. Das hat sich auch in den o.a. 446 Bytes des
MBRs eingenistet und konnte anhand einer darin befindlichen
Tabelle der absoluten Disk-Positionen für den Linux-Kernel sel-
bigen in den Speicher laden und starten.
Es gab dabei auch ein minimales Boot-Manager-Menue.

Heutzutage wird meist GRUB installiert. Auch dieses Programm
benutzt die schon mehrfach angesprochenen 446 Bytes um sein
Werk zu vollenden. Dabei wird (nicht immer, aber immer öfter :-)
zuerst der berühmte "Stage-1.5" Programmteil aus dem 'Niemands'-
Land des Bereiches zwischen dem MBR (auf Spur 0) und der ersten
Partition (auf Spur 1) in den Speicher geladen und ausgeführt.

Wenn man (als root) folgendes eingibt:

" dd if=/dev/sda bsQ2 count=1 | hexdump -C "

bekommt man die Hex-Bytes des (gesamten) MBRs zu sehen.

Bei (m)einer GRUB-Installation sehe ich folgende Texte:

00000180 [...] |þGRUB.Geom.Hard|
00000190 [...] | Disk.Read.Erro|

00000300 [...] |.ëþLoading stage|
00000310 [...] |1.5..Geom.Re|
00000320 [...] |ad.Error.»...´.Í|

Der (Fehler-) Text kann schon wàhrend des bootens auf den
Schirm geraten.

Mit:

dd if=/dev/sda bsQ2 count0 | hexdump -C | less

kann ich etwa bei Adresse 00410 die (Such-) Texte zu den
weiteren Lade-Dateien "/boot/grub/stage2" und auch noch
"/boot/grub/menu.lst" finden.

Das soll für heute erstmal reichen...

Gruss, Holger


[*] Die hat offiziell ca. 250 DM gekostet. Als es die ein
paar Jahre spàter bei Bühler/Baden-Baden als Ramsch-
Angebot für 5 DM gab habe ich sie mir aus pàdagogischen
Gründen geleistet...
 

Lesen sie die antworten

#1 Martin Schnitkemper
29/05/2008 - 22:18 | Warnen spam
· Holger Petersen schrieb:

paar Jahre spàter bei Bühler/Baden-Baden als Ramsch-



Was ist aus Bühler eigentlich geworden? Gibt es die noch, evtl. woanders?

Martin.
Compilers are like women, miss a period and they go crazy.

Ähnliche fragen