Forum: PC-Programmierung Partitionierung: MBR und VBR unterscheiden, wie?


von Martin (Gast)


Lesenswert?

Hallo zusammen,

Ich werfe die Frage einfach mal direkt in den Raum:

Allgemain gefragt:
"Worann erkennt das Betriebssysten (zB das BIOS) ob der Datenträger 
partitioniert ist oder nicht?"

Etwas spezieller:
Wenn man ein unpartitionierten Datenträger hat findet man im 1. Sektor 
des physikalischen Datenträgers einen VBR(nicht MBR denn der MBR enthält 
auch die Partitionstabellen) vor.

Der Anfang des VBR sieht im Hex Editor immer so ähnlich aus
EB 58 90 4D 53 44 4F .... ëXMSDOS5.0....h


Hat man aber einen partitionierten Datenträger steht im 1. Sektor der 
MBR dieser beschreibt die Aufteilung des Datenträgers mit 
Partitionstabellen.
In der Partitionstabelle wird auf die einzelnen Partitionen verwiesen, 
bzw auf den 1.Sektor der jeweiligen Partition. Der 1. Sektor einer 
Partition enthält einen VBR.

In einem Programm muss ich einen physikalischen Datenträger ansprechen 
können. Dieser kann unpartitioniert sein oder bis zu 4 primäre 
Partitionen enthalten. Wie erkenne ich dass ein Datenträger 
Partitioniert ist? Gibt es ein spezielles Muster an dem man einen MBR 
oder einen VBR eindeutig identifizieren kann?

Habe selbst dazu nicht viel im Internet gefunden bzw nichts was so tief 
in die Materie geht.

von Raphael B. (helli7)


Lesenswert?

Unterscheiden ist schwierig (Höchstens an der Partitionstabelle (Offset 
0x1BE)).

Ein Bios unterscheidet da gar nichts. Das Bios lädt den 1. Sektor nach 
0x7C00 ins RAM und startet dann. Geprüft wird lediglich, dass die 
letzten 2 Bytes die Kennung 0x55AA enthalten. Dann wird der Sktor für 
bootbar gehalten.

von Jens G. (jensig)


Lesenswert?

>Worann erkennt das Betriebssysten (zB das BIOS)

Seit wann wird das BIOS als Betriebssystem bezeichnet?

von Martin (Gast)


Lesenswert?

@Raphael Baum
Daran dachte ich auch schon, weil diese nur MBR vorkommt aber 
irgendwelche zufälligen bytes ab 0x1BE könnte man möglicherweise 
fehlinterpretieren. Im VBR steht an der stelle oftmals ein String zb 
"NTLDR  Datenträgerfehler...."
Man müsste vielleicht noch schauen ob die Einträge der Partitionstabelle 
wirklich auf eine gültige Partition zeigen... aber das kommt mir alles 
nicht ganz richtig vor(ich denke das muss einfacher gehen)... deshalb 
frag ich :)

man findet halt leider kaum etwas daruber im internet oder ich suche mit 
den falschen begriffen. :)



@Jens G.
"Ein Betriebssystem ist eine Software, die Grundfunktionen für die 
Verwendung (den Betrieb) eines Computers bereitstellt. Es verwaltet 
Betriebsmittel wie Speicher, Ein- und Ausgabegeräte und steuert die 
Ausführung von Programmen." - Wikipedia ;)..

Genau das macht das BIOS nur einfach sehr Hardwarenahe. Das BIOS ist nur 
nicht so komfortabel wie moderne Betriebssysteme.. Aber wenn mans darauf 
anlegt kann man alleine mit den vom BIOS bereitgestellten Routinen einen 
Brief schreiben und ihn auch ausdrucken. ;)

Ich war mir aber zu 99% sicher das sich in dem Thread irgendwann jemand 
daran aufhängen wird.. deshalb hab ichs so gelassen :P

von Zwie B. (zwieblum)


Lesenswert?

Jens G. schrieb:
>>Worann erkennt das Betriebssysten (zB das BIOS)
>
> Seit wann wird das BIOS als Betriebssystem bezeichnet?

Coreboot, ehemals LinuxBIOS, kommt in verschiedenen Varianten:
http://www.coreboot.org/Welcome_to_coreboot

von Frank K. (fchk)


Lesenswert?

Schau, ob der Bootsektor gültig ist. Z.B. Dateisystemsignatur Offset 36h 
(Fat12/16) bzw 52h (Fat32) oder Media Descriptor Offset 15h oder Bytes 
pro Sektor Offset 0Bh (immer 512). Wenn Du hier kein gültiges 
Fat-Dateisystem findest, gehst Du von einem Partitionssektor aus.

fchk

von Robert L. (lrlr)


Lesenswert?

>Bytes pro Sektor Offset 0Bh (immer 512)

auch bei Festplatten mit 4kByte Sektoren?

von Jens G. (jensig)


Lesenswert?

>"Ein Betriebssystem ist eine Software, die Grundfunktionen für die
>Verwendung (den Betrieb) eines Computers bereitstellt. Es verwaltet
>Betriebsmittel wie Speicher, Ein- und Ausgabegeräte und steuert die
>Ausführung von Programmen." - Wikipedia ;)..

>Genau das macht das BIOS nur einfach sehr Hardwarenahe. Das BIOS ist nur

Speicherverwaltung, Programmsteuerung, ... sind nicht Aufgaben des BIOS. 
Das BIOS soll nur initialisieren, und den Bootvorgang anstarten, und 
bietet noch paar Grundfunktionen für die weitere Laufzeit. Viel mehr 
macht es dann nicht mehr, wenn einmal das Betriebssystem (wie 
Linux/windows) die Kontrolle hat.

Zurück zum MBR/VBR:
Das Bios muß den unterschied nicht kennen, denn es startet einfach den 
Code im ersten Sektor , wenn die Signatur am Ende gültig ist.
Der Code in diesem BR weis dann schon selbst, was er zu tun hat. Wenn es 
ein MBR ist, liest er die Partitionstabelle, und started dann 
entsprechend den Br der jeweiligen Partition.
Ein VBR wird nicht nach einer Partitionstabelle fragen. Er startet dann 
den weiteren Code, der im jeweiligen Filesystem liegt.

wenn Du selbst das unterscheiden willst, dann wurde ja eigentlich schon 
alles gesagt. Da jedes Betriebssystem aber seinen eigenen VBR mitbringt, 
und deren fdsik-Programme auch unterschiedlichen MBR-Code in denersten 
Sektor schreiben, gibt's eigentlich keine allgemeingültige Regel, wie 
man beides auseinanderhalten kann. Bei NTFS/HPFS und FAT sieht man 
anhand der der Filesystemsignatur, was für ein Filesystem es sein 
dürfte. Bei Linux dagegen erkennt man eigentlich gar nix richtiges mehr, 
wenn ich mich noch richtig erinnere (keine Filesystemsignatur oder 
andere Strings).
Den MBR auf gültige Werte zu prüfen ist vielleicht so das einfachste 
(die Werte zeigen üblicherweise auf die jeweils ersten/letzten Sektoren 
einer Spur bzw Head/Cylinder, was man als Indiz für einen gültigen MBR 
deuten kann).

von Martin (Gast)


Lesenswert?

Vielen Dank! Das war schonmal sehr hilfreich. Werde noch ein wenig 
recherche betreiben... aber vermutlich werd ichs dann so realisieren.

PS.: Was die speicherverwaltung angeht hast du recht ;) Und BIOS war in 
diesem fall ein schlechtes beispiel jetzt da ich weiß das der boot code 
im 1. sektor den aufruf der VBRs selbst regelt ;) thx

von Frank K. (fchk)


Lesenswert?

Jens G. schrieb:

> Den MBR auf gültige Werte zu prüfen ist vielleicht so das einfachste
> (die Werte zeigen üblicherweise auf die jeweils ersten/letzten Sektoren
> einer Spur bzw Head/Cylinder, was man als Indiz für einen gültigen MBR
> deuten kann).

Das stimmt seit Windows Vista/7 nicht mehr! Dort wird die erste 
Partition auf LBA 2048 gelegt. Der Grund ist, dass die alte, von Dir 
beschriebene Methode für Platten mit 4k Sektoren extrem ungünstig ist 
und daher allgemein nicht mehr empfohlen wird.

fchk

von Frank K. (fchk)


Lesenswert?

Robert L. schrieb:
>>Bytes pro Sektor Offset 0Bh (immer 512)
>
> auch bei Festplatten mit 4kByte Sektoren?

Auch für die. Die arbeiten nach außen mit 512b Sektoren, nur intern sind 
es 4k-Sektoren.

fchk

von Masl (Gast)


Lesenswert?

Nur aus Interesse:

Hast du irgendwo vernünftige Quellen zum VBR gefunden?
Mich interresiert die ganze Thematik zur Zeit auch :)
Also der Aufbau und so

Zum MBR findet man ja recht viel.

von Jens G. (jensig)


Lesenswert?

@Frank K. (fchk)

>Das stimmt seit Windows Vista/7 nicht mehr! Dort wird die erste
>Partition auf LBA 2048 gelegt. Der Grund ist, dass die alte, von Dir
>beschriebene Methode für Platten mit 4k Sektoren extrem ungünstig ist
>und daher allgemein nicht mehr empfohlen wird.

Ich gebe zu, das von mir ist nur noch bißchen Altwissen, was zumindest 
bis XP noch gültig ist. Mit den Vista/Win7-Strukturen habe ich mich 
nicht mehr befaßt.

von Jens G. (jensig)


Lesenswert?

@Masl

Vielleicht fängste da mal an: 
http://en.wikipedia.org/wiki/Volume_boot_record

von Martin (Gast)


Lesenswert?

Hi,..

@Masl
Ein guter Hex-Editor in dem man Datenträger physikalisch öffen und 
bearbeiten lassen:

WinHex
(muss unter win7 als admin ausgeführt werden da er sonst keine 
physikalischen zugriffe machen kann)

Sehr schön an dem Editor sind die Schablonen für den Bootsektor / 
Partitionstabellen..., in denen alle Werte direkt leserlich mit 
Beschreibung als Dezimalzahlen / Strings etc angezeigt werden.
So lässt sich mit Partitionen spielen zB in dem man bestimmte Werte 
ändert und nachschaut ob Windows die Partitionen noch erkennt. Oder man 
nimmt den Taschenrechner her und versucht Offsetadressen der Partitionen 
zu bestimmen..
Das hat mir sehr viel geholfen die Thematik besser zu verstehen.

Für eine Testumgebung hab ich mir unter Windowes 7 im Datenträgermanager 
ein Virtual Hard Disk angelegt und partitioniert. Jede Partition habe 
ich mit verschiedenen Dateisystemen formatiert.

Ein Datenbalatt zu Fat16/32 von Microsoft kann da auch hilfreich sein.
Da stehen zB Formeln drin wie man aus den Werten im VBR Offsetadressen 
zu Filetable Filename Entries usw berechnet.
http://staff.washington.edu/dittrich/misc/fatgen103.pdf

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.