Re: Devices II

From: Joerg Wunsch <j(at)uriah.heep.sax.de>
Date: Tue, 19 Feb 2002 20:36:24 +0100

As User Oli Kuemmel wrote:

> Das müsste dann ja bedeuten, dass unsere Werte 'richtiger' sind?

Gewissermaßen. :)

> Ist es nun wirklich dasselbe, oder ist die Platte jetzt falsch
> partitioniert?

Wenn Dein Windows damit auch klarkommt, isses egal.

Hintergrund ist: fdisk ist einfach mal bescheuert konzipiert (wie so
manches am PeeCee). Jede Slice besitzt Werte für Anfang und Ende
bzw. Länge, die doppelt (und damit über-)spezifiziert sind. Wie das
bei überspezifzierten Dingen so ist: sie können schnell in einen
Zustand geraten, wo sich die Werte auch widersprechen...

Einerseits ist der Anfang und die Länge jeder fdisk-Slice durch einen
Offset vom Anfang der Platte (in Blöcken) und die Zahl der Blöcke
gegeben. Zum Glück hat man hier wenigstens 32-bit Zahlen spendiert,
offenbar waren die 32 MB, die man mit 16-bit Zahlen hätte maximal
beschreiben können, schon damals eine am Horizont sichtbare
Größenordnung.

Da aber das BIOS zu beknackt implementiert ist und nicht etwa (was
vernünftig wäre und z. B. dem entspricht, was ein Unix in seinen
syscalls anbietet) ebenfalls auf der ebene logischer Blöcke arbeitet
und die Physis der Plattenaufteilung dann komplett intern abhandelt,
muß man selbigem (in den Int 0x13 Aufrufen) den exakten Standort auf
der Platte angeben, in Zylinder, Kopf und Sektor (C/H/S). Aufgrund
der Registerarmut der iNtel-Architektur wurden dabei nicht etwa jedem
der Werte ein 16-bit Register spendiert, sondern sie wurden noch prima
limitiert auf ein 8-bit Register für die Kopfnummer und einem 16-bit
Register für Zylinder- und Sektornummer. Da 256 Zylinder schon damals
etwas wenig war, hat man von den 8 Bit der Sektornummer zwei
weggenommen und diese der Zylindernummer zugeordnet, so daß dort 10
Bit zur Verfügung standen. Das ursprüngliche MFM-Interface konnte
dazu dann nur 4 Bit der Kopfnummer benutzen (was ganz realistisch
selbst heute eigentlich noch genügt, wenn man sich physische Parameter
der Platten ansieht), so daß der gesamte Wertebereich eingeschränkt
worden ist auf 1024 Zylinder zu maximal 16 Köpfen und 63 Sektoren
(dieweil die Sektornumerierung aus historischen Gründen nicht bei 0,
sondern bei 1 beginnt). Das war die berühmte 504 MB Grenze.

Die Platten werden mittlerweile auf Interfaceebene schon lange nicht
mehr mit physischen Parametern angesprochen, sie haben auch schon seit
vielen Jahren unterschiedliche Sektorzahlen pro Spur. Das BIOS tut
aber immer noch so, als müsse es C/H/S benutzen. Dadurch, daß die
Platten letztlich logische Blocknummern nehmen, konnte man wenigstens
den möglichen Wertebereich der obigen Felder (unabhängig von der
tatsächlichen Geometrie der Platte, die keinen Menschen mehr
interessiert) ausnutzen.

Da es der Platte aber egal ist, über welche vermeintliche C/H/S-Werte
Du einen bestimmten logischen Block ansprichst (sie ermittelt die Idee
des BIOS, wie viele Köpfe und Sektoren sie hat, anhand des ersten
Aufrufes nach einem Reset, der versucht, den letzten Block der Platte
aus BIOS-Sicht anzusprechen), kannst Du nun beliebig viele Varianten
erfinden, welche C/H/S-Aufteilung Du für die BIOS-Sicht Deiner Platte
benutzt, solange Du nicht versuchst, hinter das physische Ende der
Platte zuzugreifen (also die durch Deine Aufteilung angesprochene
Kapazität der Platte <= der tatsächlichen Kapazität ist).

> > Aber FreeBSD ist das natürlich alles egal, die C/H/S-Werte
> > interessieren es herzlich wenig, solange sie plausibel zu den
> > offset/size Werten passen ...

> Windows scheint es auch egal zu sein, es bootet und zeigt keine
> Anzeichen der Verwirrung (im Gegensatz zu mir).

Interessant. Zumindest manchen BIOSen ist sowas nicht egal, da aus
hysterischen Gründen dort Restriktionen bestehen, daß eine Slice immer
auf einer ,,Zylinder''grenze anzufangen hätte (mit Ausnahme der
allerersten, die auch einen ,,Kopf'' nach dem Beginn der Platte
anfangen darf, so daß man nicht den kompletten ersten Zylinder
verschwenden muß nur wegen der fdisk-Tabelle). Auf jeden Fall werden
fdisk-Slices von den entsprechenden Tools nach wie vor in dieser Form
angelegt.

-- 
cheers, J"org               .-.-.   --... ...--   -.. .  DL8DTL
http://www.sax.de/~joerg/                        NIC: JW11-RIPE
Never trust an operating system you don't have sources for. ;-)
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Tue 19 Feb 2002 - 20:40:08 CET

search this site