Volume Boot Record

(c) Shmuel Csaba Otto Traian, CC BY-SA 3.0
Rechte Bildhälfte: Schematische Darstellung eines Volume Boot Record (Partitionierung gemäß den MBR-Spezifikationen. Links ein Master Boot Record)

Der Volume Boot Record[1][2] umfasst die ersten Sektoren eines Volumes bei den Dateisystemen FAT (inklusive FAT32 und exFAT), HPFS und NTFS von Microsoft. Da ein Volume sehr oft eine Partition einer Festplatte oder eines anderen Speichermediums ist, wird der erste Sektor auch mit Partition Boot Sector[1][3][4] bezeichnet, bzw. als Teil des VBR auch als Volume Boot Sector[1][5]. Bei einem bootfähigen Medium wird der Bootcode im VBR dazu verwendet, auf einem BIOS-basierten Computer mit einer oder mehreren MBR-Partitionen im Chain-Loading-Prinzip das auf dem jeweiligen Dateisystem gespeicherte Betriebssystem zu starten.

Startprogramm

Historisch gesehen hatten die ersten IBM-PCs keine Partitionen. Das Betriebssystem PC DOS bzw. MS-DOS oder CP/M startete von einer Diskette, die einen Bootsektor in der Größe von 512 Bytes aufwies. Das entspricht der Größe von einem Sektor bzw. der ersten Spur (Spur 0). Erst mit der Einführung variabler Geometrien, also unterschiedlicher Medien, wurde in den Bootsektor eine Möglichkeit eingefügt, auf geänderte Bedingungen Rücksicht zu nehmen: Der BIOS Parameter Block (kurz BPB).

Bei den Dateisystemen FAT12 und FAT16 ist der VBR genau einen Sektor groß. In ihm finden sich alle Informationen, die nötig sind, um das Betriebssystem zu starten, sowie ein Bootloader, dessen Programmcode mithilfe dieser Informationen die Startdateien auf dem Dateisystem lokalisiert und im Chainloading-Prinzip ausführt. Für MS-DOS ist dies z. B. die Datei IO.SYS.

Für den Bootloader macht es jedoch keinen Unterschied, ob der VBR tatsächlich der Bootsektor ist, oder selbst bereits im Chainloading-Prinzip geladen wurde – das ist immer dann der Fall, wenn sich das Dateisystem innerhalb einer Partition auf dem Speichermedium befindet. Der Standard-Fall ist dann ein Master Boot Record als Bootsektor, dessen Programmcode die aktive Partition findet und den dort enthaltenen Partitions-Bootsektor (englisch partition boot sector) lädt. Für das darauf enthaltene Dateisystem ist der erste Sektor somit nicht frei nutzbar, er ist allerdings als volume boot sector ein reservierter Teil davon. Die Bezeichnungen sind daher Synonyme für den VBR, wenn dieser tatsächlich nur den ersten Sektor umfasst.

Bei den Dateisystemen HPFS, NTFS, FAT32 und exFAT reicht allerdings die Größe eines Sektors, 512 Bytes, nicht mehr für den Programmcode aus, sodass diese Dateisysteme mehrere Sektoren verwenden. Das liegt u. a. auch daran, dass der BPB bei FAT32 größer ausfällt[6] und somit weniger Platz für den Bootloader übrig bleibt. Die Bezeichnung englisch volume boot sector beschränkt sich weiterhin auf den ersten Sektor, während volume boot record (VBR) für alle verwendeten Sektoren steht.

Für PCs, die kein BIOS verwenden, ist kein Startprogramm notwendig und somit wird auch der Programmcode im VBR nicht ausgeführt. Das ist z. B. bei PCs, die UEFI als Firmware nutzen, der Fall.[7] Auch wird der Programmcode nicht verwendet, wenn ein Betriebssystem bereits gestartet ist und auf ein Dateisystem zugreift. Jedoch wird, je nach Betriebssystem und Dateisystem-Treiber, unter Umständen der BIOS Parameter Block ausgewertet.

Aufbau eines VBR

Der folgende Absatz beschreibt einen FAT32-VBR, der (ohne Kopie) 3 Sektoren à 512 Bytes groß ist. Bei NTFS umfasst der VBR üblicherweise 16 Sektoren.

Sektor 0 des VBR

Die folgende Tabelle stellt den Aufbau des Sektors 0 eines VBR dar. Dabei werden die einzelnen Funktionsbytes als Offset vom Beginn des VBR gezählt.

OffsetLänge
(Bytes)
Beschreibung
0x003Sprungbefehl zum Bootloader (EB xx 90 oder E9 xx xx, außer bei Atari)
0x038OEM|System Name
0x0B2Bytes pro Sektor (üblicherweise 512; 1024, 2048 oder 4096 erlaubt)
0x0D1Sektoren pro Cluster (2n mit n={1..64}. n=128 sollte nicht benutzt werden)
0x0E2Anzahl der reservierten Sektoren (inkl. Boot-Sektor). 1 für FAT12/16*, 32 für FAT32.
0x101Anzahl der FATs (sollte immer 2 sein).
0x112Maximale Anzahl der Einträge im Hauptverzeichnis. Sollte 0 für FAT32 (unbegrenzt), 512 für FAT16, anderenfalls multipliziert mit 32 ein Vielfaches der Bytes pro Sektor sein.
0x132Anzahl aller Sektoren der Partition. Wenn 0, dann steht der Wert an 0x20. Muß für FAT32 == 0 sein, anderenfalls nur 0, wenn Anzahl >= 64 K.
0x151Medienbezeichner. Erlaubt sind 0xF8 (Festplatte) .. 0xFF.
0x162Anzahl der Sektoren pro FAT. Bei FAT32 == 0 (steht an 0x24).
0x182Anzahl der Sektoren pro Track für BIOS INT13. Normalerweise nur relevant für Medien mit einer Geometrie – Zylinder/Kopf/Sektor (C/H/S) Adressierung.
0x1A2Anzahl der Köpfe für BIOS INT13. Normalerweise nur relevant für Medien mit einer Geometrie – C/H/S-Adressierung.
0x1C4Anzahl von Sektoren, die sich vor dieser Partition befinden (auch als "hidden sectors" bezeichnet). Bei Medien ohne MBR (z. B. Floppy) 0. OS spezifisch. Normalerweise nur relevant für Medien, die via BIOS INT13 sichtbar sind.
0x204Anzahl aller Sektoren der Partition. Wenn 0, dann steht der Wert an 0x13. Muß für FAT32 != 0 sein, anderenfalls nur != 0, wenn >= 64K.
0x244nur FAT32: Anzahl der Sektoren pro FAT.
0x241nur FAT12/16: Physische Laufwerksnummer für BIOS INT13 (0+n ... Floppy n, 0x80+n .. Festplatte n). OS spezifisch.
0x251nur FAT12/16: reserviert (durch NT genutzt).
0x261nur FAT12/16: erweiterte Bootsignatur: Wenn == 0x29 dann sind die folgenden 3 Felder präsent.
0x274nur FAT12/16: Volume ID (i. d. R. Kombination aus Datum und Zeit).
0x2B11nur FAT12/16: Volume Name (mit Leerzeichen aufgefüllt, z. B. 'NO NAME ').
0x368nur FAT12/16: Dateisystem ID (mit Leerzeichen aufgefüllt: 'FAT ', 'FAT12 ' oder 'FAT16 '). Hat nur informellen Charakter, d. h. sollte nicht zur Bestimmung des FAT-Typs genutzt werden!
0x244nur FAT32: Anzahl der Sektoren pro FAT.
0x282nur FAT32: FAT-Bitschalter:

15:8 .. reserviert
7 .. 0 => FAT wird zur Laufzeit in alle anderen FATs gespiegelt. 1 => nur eine FAT ist aktiv.
6:4 .. reserviert.
3:0 .. Nummer der aktiven FAT (0 basiert), wenn Spiegelung deaktiviert ist (siehe Bit 7).

0x2A2nur FAT32: Dateisystem-Version (HI-Byte: major, LO-Byte: minor)
0x2C4nur FAT32: Startcluster des Hauptverzeichnisses (a priori 2).
0x302nur FAT32: Sektornummer des Dateisystem-Informationssektors innerhalb des reservierten Bereichs (bei Microsoft-Betriebssystemen immer == 1).
0x322nur FAT32: Wenn != 0, Beginn (Sektornummer) der Kopie der VBRs innerhalb des reservierten Bereichs (a priori 6).
0x3412nur FAT32: Reserviert.
0x401nur FAT32: Physische Laufwerksnummer für BIOS INT13 (0+n ... Floppy n, 0x80+n .. Festplatte n). OS spezifisch.
0x411nur FAT32: Reserviert (durch NT genutzt).
0x421nur FAT32: Erweiterte Bootsignatur: Wenn == 0x29 dann sind die folgenden 3 Felder präsent.
0x434nur FAT32: Volume ID (i. d. R. Kombination aus Datum und Zeit).
0x4711nur FAT32: Volume Name (mit Leerzeichen aufgefüllt, z. B. 'NO NAME ').
0x528nur FAT32: Dateisystem ID (mit Leerzeichen aufgefüllt: 'FAT32 '). Hat nur informellen Charakter, d. h. sollte nicht zur Bestimmung des FAT-Typs genutzt werden!
0x5A324MSDOS5.0: Bootloader-Programmcode. Fängt oftmals nach dem BIOS Parameter Block an (BPB: FAT12/16 0x0B..0x3D, FAT32 0xB..0x59 inklusive) und kann Teile im VBR[2] haben, im normalen Datenbereich des Dateisystems oder sogar in normalerweise nicht sichtbaren/ungenutzten Sektoren der Platte (z. B. Viren). Auch Position, Inhalt und Größe der beispielhaft für MSDOS5.0 angegebenen 3 folgenden Felder kann je nach Bootloader-Version und Sprache variieren.
0x19E67MSDOS5.0: Bootloader-Fehlermeldungen
0x1E611MSDOS5.0: Betriebssystem-Kernel-Name ('IO SYS')
0x1F111MSDOS5.0: Systemdatei-Name ('MSDOS SYS')
0x1FC2Reserviert: 0x00 0x00
0x1FE2Bootsignatur 0x55 0xAA

Sektor 1: FSInfo-Sektor (nur bei FAT32)

Der FSInfo-Sektor soll dem Betriebssystem helfen schneller das nächste freie Cluster zu finden. Gespeichert werden die momentan freien Cluster der Partition und welches Cluster als nächstes frei ist bzw. sein könnte. Die Informationen sollen lediglich als Hinweis für das Betriebssystem dienen und müssen nicht stimmen!

Byte 0 – 3FSInfo-Signatur 0x52 0x52 0x61 0x41 (RRaA)
Byte 4 – 483reserviert
Byte 484 – 487zweite Signatur 0x72 0x72 0x41 0x61 (rrAa)
Byte 488 – 491freie Cluster (muss nicht stimmen!)
Byte 492 – 495nächstes freies Cluster (muss nicht stimmen!)
Byte 496 – 507reserviert
Byte 510 – 5110x55 0xAA

Der FSInfo-Sektor ist für einen reibungslosen Betrieb der FAT32 nicht notwendig.

Sektor 2 des VBR

Sektor 2 des VBR hat erstmal keine Verwendung. Er stellt zusätzlichen Speicher für Bootcode zur Verfügung für den Fall, dass Sektor 0 nicht ausreichend Speicherplatz für den Bootcode hatte. Steht der komplette Bootcode schon in Sektor 0, bleibt Sektor 2 leer bis auf die letzten beiden Bytes in Offset 0x5FE und 0x5FF, die wiederum die Magic Number 0x55 0xAA enthalten.

Kopie des VBR

Unter dem Dateisystem FAT32 wird von allen 3 Sektoren des VBR eine Sicherungskopie in den Sektoren 6 bis 8 angelegt. Diese können bei einer eventuellen Beschädigung des VBR zur Wiederherstellung genutzt werden. Gängige Formatierungsprogramme überschreiben diese Sicherungskopie in der Regel nicht, sodass ein reines Formatieren einer Partition und das damit verbundene neue Anlegen einer FAT noch lange nicht ein sicheres Entfernen aller auf der Partition vorhandenen Daten gewährleistet.

Andere Dateisysteme

Der Volume Boot Record ist prinzipiell unabhängig vom verwendeten Dateisystem. Allerdings fehlt im BIOS Parameter Block (BPB) ein Datenfeld, das das verwendete Dateisystem angeben würde. In der Praxis wurde der VBR daher nicht von anderen Dateisystemen verwendet, jedoch ist der Bootsektor bzw. die Spur 0 eines Volumes bei fast allen Dateisystemen reserviert. Beispielsweise verwenden weder ext2 noch ReFS[8] einen VBR.

Weblinks

Einzelnachweise

  1. a b c Technopedia - Volume Boot Record (VBR). Abgerufen am 11. Juni 2020.
  2. Christopher C. Yang et al.: Intelligence and Security Informatics: IEEE ISI 2008 International Workshops: PAISI, PACCF, and SOCO 2008. 2008, S. 306 (englisch).
  3. NTFS Partition Boot Sector. Abgerufen am 11. Juni 2020.
  4. Sean K. Daily: Optimizing Windows NT. 1998, S. 719.
  5. Steve Bunting: EnCase® Computer Forensics: The Official EnCE®: EnCase® Certified Examiner Study Guide. 2008, S. 36 (englisch).
  6. http://www.ntfs.com/fat-boot-modif.htm
  7. https://www.incibe-cert.es/en/blog/bootkits-en
  8. http://www.resilientfilesystem.co.uk/refs-volume-boot-record

Auf dieser Seite verwendete Medien

MBR (Master Boot Record) Anatomy.svg
(c) Shmuel Csaba Otto Traian, CC BY-SA 3.0
Der MBR