BIOS parameter block
In computing, the BIOS parameter block, often shortened to BPB, is a data structure in the volume boot record (VBR) describing the physical layout of a data storage volume. On partitioned devices, such as hard disks, the BPB describes the volume partition, whereas, on unpartitioned devices, such as floppy disks, it describes the entire medium. A basic BPB can appear and be used on any partition, including floppy disks where its presence is often necessary; however, certain filesystems also make use of it in describing basic filesystem structures. Filesystems making use of a BIOS parameter block include FAT12 (except for in DOS 1.x), FAT16, FAT32, HPFS, and NTFS. Due to different types of fields and the amount of data they contain, the length of the BPB is different for FAT16, FAT32, and NTFS boot sectors.[1] (A detailed discussion of the various FAT BPB versions and their entries can be found in the FAT article.) Combined with the 11-byte data structure at the very start of volume boot records immediately preceding the BPB or EBPB, this is also called FDC descriptor or extended FDC descriptor in ECMA-107 or ISO/IEC 9293 (which describes FAT as for flexible/floppy and optical disk cartridges).
FAT12 / FAT16
[edit | edit source]DOS 2.0 BPB
[edit | edit source]Format of standard DOS 2.0 BPB for FAT12 (13 bytes):
| Sector offset | BPB offset | Field length | Description |
|---|---|---|---|
0x00B |
0x00 |
WORD | Bytes per logical sector |
0x00D |
0x02 |
BYTE | Logical sectors per cluster |
0x00E |
0x03 |
WORD | Reserved logical sectors |
0x010 |
0x05 |
BYTE | Number of FATs |
0x011 |
0x06 |
WORD | Root directory entries |
0x013 |
0x08 |
WORD | Total logical sectors |
0x015 |
0x0A |
BYTE | Media descriptor |
0x016 |
0x0B |
WORD | Logical sectors per FAT |
Not all versions of DOS 2.00 conform to this structure. IBM PC-DOS 2.00 has additional, undocumented fields in this space that seems to indicate the bootable drive and the sector from where to start reading. This does not appear in any official IBM documentation but a PC/XT system will not boot without correct values in these bytes.
DOS 3.0 BPB
[edit | edit source]Format of standard DOS 3.0 BPB for FAT12 and FAT16 (19 bytes), already supported by some versions of MS-DOS 2.11:[2]
| Sector offset | BPB offset | Field length | Description |
|---|---|---|---|
0x00B |
0x00 |
13 BYTEs | DOS 2.0 BPB |
0x018 |
0x0D |
WORD | Physical sectors per track |
0x01A |
0x0F |
WORD | Number of heads |
0x01C |
0x11 |
WORD | Hidden sectors (incompatible with DOS 3.31 BPB) |
DOS 3.2 BPB
[edit | edit source]Format of standard DOS 3.2 BPB for FAT12 and FAT16 (21 bytes):
| Sector offset | BPB offset | Field length | Description |
|---|---|---|---|
0x00B |
0x00 |
19 BYTEs | DOS 3.0 BPB |
0x01E |
0x13 |
WORD | Total sectors (incompatible with DOS 3.31 BPB) |
DOS 3.31 BPB
[edit | edit source]Format of standard DOS 3.31 BPB for FAT12, FAT16 and FAT16B (25 bytes):
| Sector offset | BPB offset | Field length | Description |
|---|---|---|---|
0x00B |
0x00 |
13 BYTEs | DOS 2.0 BPB |
0x018 |
0x0D |
WORD | Physical sectors per track (identical to DOS 3.0 BPB) |
0x01A |
0x0F |
WORD | Number of heads (identical to DOS 3.0 BPB) |
0x01C |
0x11 |
DWORD | Hidden sectors (incompatible with DOS 3.0 BPB) |
0x020 |
0x15 |
DWORD | Large total logical sectors |
DOS 3.4 EBPB
[edit | edit source]Format of PC DOS 3.4 and OS/2 1.0-1.1 Extended BPB for FAT12, FAT16 and FAT16B (32 bytes):
| Sector offset | BPB offset | Field length | Description |
|---|---|---|---|
0x00B |
0x00 |
25 BYTEs | DOS 3.31 BPB |
0x024 |
0x19 |
BYTE | Physical drive number |
0x025 |
0x1A |
BYTE | Flags etc. |
0x026 |
0x1B |
BYTE | Extended boot signature (0x28 aka "4.0") (similar to DOS 4.0 EBPB and NTFS EBPB)
|
0x027 |
0x1C |
DWORD | Volume serial number |
FAT12 / FAT16 / HPFS
[edit | edit source]DOS 4.0 EBPB
[edit | edit source]Format of DOS 4.0 and OS/2 1.2 Extended BPB for FAT12, FAT16, FAT16B and HPFS (51 bytes):
| Sector offset | BPB offset | Field length | Description |
|---|---|---|---|
0x00B |
0x00 |
25 BYTEs | DOS 3.31 BPB |
0x024 |
0x19 |
BYTE | Physical drive number (identical to DOS 3.4 EBPB) |
0x025 |
0x1A |
BYTE | Flags etc. (identical to DOS 3.4 EBPB) |
0x026 |
0x1B |
BYTE | Extended boot signature (0x29 aka "4.1") (similar to DOS 3.4 EBPB and NTFS EBPB)
|
0x027 |
0x1C |
DWORD | Volume serial number (identical to DOS 3.4 EBPB) |
0x02B |
0x20 |
11 BYTEs | Volume label |
0x036 |
0x2B |
8 BYTEs | File-system type |
FAT32
[edit | edit source]DOS 7.1 EBPB
[edit | edit source]Format of short DOS 7.1 Extended BIOS Parameter Block (60 bytes) for FAT32:
| Sector offset | BPB offset | Field length | Description |
|---|---|---|---|
0x00B |
0x00 |
25 BYTEs | DOS 3.31 BPB |
0x024 |
0x19 |
DWORD | Logical sectors per FAT |
0x028 |
0x1D |
WORD | Mirroring flags etc. |
0x02A |
0x1F |
WORD | Version |
0x02C |
0x21 |
DWORD | Root directory cluster |
0x030 |
0x25 |
WORD | Location of FS Information Sector |
0x032 |
0x27 |
WORD | Location of backup sector(s) |
0x034 |
0x29 |
12 BYTEs | Reserved (Boot file name) |
0x040 |
0x35 |
BYTE | Physical drive number |
0x041 |
0x36 |
BYTE | Flags etc. |
0x042 |
0x37 |
BYTE | Extended boot signature (0x28)
|
0x043 |
0x38 |
DWORD | Volume serial number |
Format of full DOS 7.1 Extended BIOS Parameter Block (79 bytes) for FAT32:
| Sector offset | BPB offset | Field length | Description |
|---|---|---|---|
0x00B |
0x00 |
25 BYTEs | DOS 3.31 BPB |
0x024 |
0x19 |
DWORD | Logical sectors per FAT |
0x028 |
0x1D |
WORD | Mirroring flags etc. |
0x02A |
0x1F |
WORD | Version |
0x02C |
0x21 |
DWORD | Root directory cluster |
0x030 |
0x25 |
WORD | Location of FS Information Sector |
0x032 |
0x27 |
WORD | Location of backup sector(s) |
0x034 |
0x29 |
12 BYTEs | Reserved (Boot file name) |
0x040 |
0x35 |
BYTE | Physical drive number |
0x041 |
0x36 |
BYTE | Flags etc. |
0x042 |
0x37 |
BYTE | Extended boot signature (0x29)
|
0x043 |
0x38 |
DWORD | Volume serial number |
0x047 |
0x3C |
11 BYTEs | Volume label |
0x052 |
0x47 |
8 BYTEs | File-system type |
NTFS
[edit | edit source]Format of Extended BPB for NTFS (73 bytes):
| Sector offset | BPB offset | Field length | Description |
|---|---|---|---|
0x00B |
0x00 |
25 BYTEs | DOS 3.31 BPB |
0x024 |
0x19 |
BYTE | Physical drive number (identical to DOS 3.4 EBPB) |
0x025 |
0x1A |
BYTE | Flags etc. (identical to DOS 3.4 EBPB) |
0x026 |
0x1B |
BYTE | Extended boot signature (0x80 aka "8.0") (similar to DOS 3.4 EBPB and DOS 4.0 EBPB)
|
0x027 |
0x1C |
BYTE | Reserved |
0x028 |
0x1D |
QWORD | Sectors in volume |
0x030 |
0x25 |
QWORD | MFT first cluster number |
0x038 |
0x2D |
QWORD | MFT mirror first cluster number |
0x040 |
0x35 |
DWORD | MFT record size |
0x044 |
0x39 |
DWORD | Index block size |
0x048 |
0x3D |
QWORD | Volume serial number |
0x050 |
0x45 |
DWORD | Checksum |
exFAT BPB
[edit | edit source]exFAT does not use a BPB in the classic sense. Nevertheless, the volume boot record in sector 0 is organized similarly to BPBs.[3]
| Sector offset | Field length (bytes) | Description |
|---|---|---|
0x000 |
3 | JumpBoot. Must be 0xEB, 0x76, 0x90. |
0x003 |
8 | Filesystem name. Must be "EXFAT ". |
0x00B |
53 | Blank (traditional BPB area). Must be all zero. |
See also
[edit | edit source]References
[edit | edit source]- ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
- ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value). (NB. While the publishers claim this would be MS-DOS 1.1 and 2.0, it actually is SCP MS-DOS 1.25 and a mixture of Altos MS-DOS 2.11 and TeleVideo PC DOS 2.11.)
- ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
Further reading
[edit | edit source]- Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value). — a description of BPBs, from version 2.0 to version 7.0
- Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value). — In the "processing the BIOS parameter block" section the authors describe the evolution of the BIOS parameter block from the MS-DOS version 2.0 BPB to the PC DOS version 4.0 BPB, and label each field with the DOS version that introduced it.
- Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value). — Figure 4.3 contains a diagram of the version 4.0 BPB and states that the layout of BPBs "is not defined by Microsoft and can vary with different vendors". At the time that the book was written, this was true. Microsoft first publicly documented the BPB structure in the OS/2 Developers' Toolkit.
- Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value). — Verstak reverse engineers the BIOS parameter block. The paper contains several errors. One such is its statement that "the presence of the EBPB in FAT32 is not documented by Microsoft". See:
- Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value). — Microsoft documents a version 4.0 BPB and a new "FAT32 BIOS Parameter Block (BPB)" (a version 7.0 BPB) for DOS-Windows 98 that is "larger than a standard BPB", has an "identical structure to a standard BPB", but that also "includes several extra fields".
- Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value). — Microsoft documents extended BPBs on both FAT16 and FAT32 volumes. It also documents BPBs on NTFS volumes.
- Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value). — The table "BPB and Extended BPB Fields on NTFS Volumes" describes BPBs on NTFS volumes. The descriptions of several fields contradict those given in the Windows 2000 Resource Kit.
- Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value). — an issue that affects BPBs
- Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value). [1]
- Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value). — on the misuse of OEM labels and Microsoft's Volume Tracker
- Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
- Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
- Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
- Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
- Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
- Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).