PBRの構造

PBR[Partition Boot Record]の構造

PBR[Partition Boot Record]は、Partition内にあるOS本体をロードおよび実行させるための、512byteで構成された小さなデータです。PBRは各パーティションの先頭セクターに存在し、MBRと同じように若干のプログラムとパーティションに関する情報から構成されています。PBRの構成はOSに依存するので、NetBSDのようにOEM Name,BPB,EBPBがないものもありますが、OpenBSDのPBRはWindowsのPBRと同じ構成を取っているようです。

OpenBSDのPBR
OpenBSDのPBR

Jump instruction

Bootstrap codeに移るための、ジャンプ命令が書かれています。

OEM NAME

このパーティションにインストールされているOSのOEM NAMEが入るようです。

BPB[BIOS Parameter Block]

BPB[BIOS Parameter Block]とはWindowsが標準で利用しているFATファイルシステムで使われるディスク管理用データのエリアであり、このエリアには、1クラスタあたりのセクタ数など、ディスクの物理的な属性が記述されています。

BPBの構造
offset size BPB詳細
0x000B 2 Byte Bytes per Sector
0x000D 1 Byte Sectors Per Cluster
0x000E 2 Byte Reserved Sectors
0x0010 1 Byte file allocation table数
0x0011 2 Byte Root Entrie
0x0013 2 Byte Small Sector
0x0015 1 Byte Media Type
0x0016 2 Byte Sectors per file allocation table
0x0018 2 Byte Sectors per Track
0x001A 2 Byte Number of Heads

EBPB[Extended BIOS Parameter Block]

またBPBの後ろにはEBPB[Extended BIOS Parameter Block]があり、次の情報から構成されています。

EBPBの構造
offset size EBPB詳細
0x001C 4 Byte Hidden Sectors
0x0020 4 Byte Large Sectors
0x0024 1 Byte Physical Disk Number
0x0025 1 Byte Current Head
0x0026 1 Byte Signature
0x0027 4 Byte Volume Serial Number
0x002B 10 Byte Volume Label
0x0035 9 Byte System ID

Bootstrap code

OSをディスクからロードして実行させるプログラムです。

Signature

MBRのBOOT Signatureとほぼ同じ意味を持ちます。

OpenBSDのBoot Sector

PBRはOpenBSDのインストール時に(もちろん、運用後にも)、installbootコマンドによって変更・書込みを行う事ができます。

・PBRの抜き出し方
MBRの抜出し方と同じであるがdevice名の指定が異なる。
suでスーパーユーザーになり、次のコマンドを実行する事により、openbsd.pbrと言うファイルにPBRが出力されます。
# dd if=/dev/wd0a of=openbsd.pbr bs=512 count=1
	

下記の表は、私が使用している環境のPBRをダンプしたものです。

自宅マシンのOpenBSD Boot Sector
_OFFSET_  0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
00000000: EB 3C 90 4F 70 65 6E 42 53 44 00 00 02 02 00 00 .<.OpenBSD......
00000010: 00 00 00 00 00 F8 00 00 00 00 00 00 10 00 00 00 ................
00000020: 00 00 00 00 00 00 29 00 00 00 00 55 4E 49 58 20 ......)....UNIX
00000030: 4C 41 42 45 4C 55 46 53 20 34 2E 34 00 00 EA 48  LABELUFS 4.4...H
00000040: 00 C0 07 B0 58 E9 37 01 31 C0 8E D0 BC FC 7B 0E ....X.7.1.....{.
00000050: 1F BE E4 01 88 D6 B4 02 CD 16 0C 00 A8 03 74 03 ..............t.
00000060: 4E 30 F6 E8 56 01 F6 C6 80 74 1E 52 BB AA 55 B4 N0..V....t.R..U.
00000070: 41 CD 13 5A 72 13 81 FB 55 AA 75 0D F6 C1 01 74 A..Zr...U.u....t
00000080: 08 C7 06 D1 01 84 01 EB 1A 52 B4 08 CD 13 72 B3 .........R....r.    
00000090: 88 36 55 01 80 E1 3F 74 AA 88 0E 4C 01 B0 3B E8 .6U...?t...L..;.
000000A0: 25 01 5A 66 B8 88 00 00 00 BB E0 07 FF 16 D1 01 %.Zf............
000000B0: 66 BE 28 3D 00 00 BF 03 00 89 F9 83 F9 0C 72 03 f.(=..........r.
000000C0: B9 0C 00 BB 00 40 B0 2E E8 FC 00 FC 66 AD 66 60 .....@......f.f`
000000D0: FF 16 D1 01 66 61 81 C3 00 04 4F E2 E9 09 FF 74 ....fa....O....t
000000E0: 22 B8 49 00 08 E4 0F 85 95 00 FE 06 E3 00 66 AD ".I...........f.
000000F0: 53 BB E0 07 FF 16 D1 01 5B 66 BE 00 02 00 00 89 S.......[f......
00000100: F9 EB C3 BE F3 01 E8 B3 00 B8 00 40 8E C0 26 81 ...........@..&.
00000110: 3E 02 00 4C 46 74 0F B0 4D BE EE 01 A2 F2 01 E8 >..LFt..M.......
00000120: 9A 00 FB F4 EB FC 51 88 D1 51 66 68 0D D0 01 C0 ......Q..Qfh....
00000130: EA 00 00 12 40 E8 5D 00 66 A1 DB 01 8B 0E D5 01 ....@.].f.......
00000140: 66 60 8E C3 52 66 31 D2 66 89 D1 B1 90 66 F7 F1 f`..Rf1.f....f..
00000150: 52 66 31 D2 B1 90 41 66 F7 F1 88 C5 C0 E4 06 88 Rf1...Af........
00000160: E1 5B FE C3 08 D9 58 88 D6 88 C2 31 DB B8 01 02 .[....X....1....
00000170: E8 1D 00 66 61 66 40 83 C3 20 E2 C4 C3 B0 52 BE ...faf@.. ....R.
00000180: EC 01 EB 98 E8 0E 00 89 1E D9 01 BE D3 01 B4 42 ...............B
00000190: CD 13 72 E9 C3 B9 20 02 66 50 28 E9 66 D3 E8 66 ..r... .fP(.f..f
000001A0: A3 DF 01 66 58 88 E9 66 D3 E0 66 05 3F 00 00 00 ...fX..f..f.?...
000001B0: 66 A3 DB 01 73 05 66 FF 06 DF 01 C3 FC AC 08 C0 f...s.f.........
000001C0: 74 0E E8 02 00 EB F6 53 B4 0E 31 DB 43 CD 10 5B t......S..1.C..[
000001D0: C3 35 01 10 00 20 00 00 00 00 00 00 00 00 00 00 .5... ..........
000001E0: 00 00 00 21 4C 6F 61 64 69 6E 67 00 0D 0A 45 52 ...!Loading...ER
000001F0: 52 20 3F 0D 0A 00 00 00 00 00 00 00 00 00 55 AA R ?...........U.

	          00h-02h JMP Instraction       03h-0Ah OEM ID = OpenBSD
		  0Bh-1BH BIOS Parameters Block 1CH-3Dh Extended BIOS Parameters Block
		  3Eh-1FDh BootStrap code       1FEh-1FFh Signature

BPB,EBPBの値などをセットしているのは、Windows NT側のディスク管理ツールからOpenBSDのパーティションを認識させる為だと思われる。よって、最小限度の値しかセットされていない。

OpenBSD Boot SectorのBPB/EBPB値
offset詳細
0x00Jump instructionjmp 3e
0x03OEM Name"OpenBSD"
BIOS Parameter Block(BPB)
0x0bBytes per Sector512
0x0dSectors Per Cluster2
0x0eReserved Sectors0
0x10file allocation table数0
0x11Root Entrie0
0x13Small Sector 0
0x15Media Type0xF8
0x16Sectors per file allocation table0
0x18Sectors per Track0
0x1aNumber of Heads0
Extended BIOS Parameter Block(EBPB)
0x1cHidden Sectors16
0x20Large Sectors0
0x24Physical Disk Number0
0x25Current Head0
0x26Signature0x29
0x27Volume Serial Number00000000
0x2BVolume Label"UNIX LABEL"
0x36System ID"UFS 4.4"
0x3eBootstrap code----
0x1fesignature0xAA55

参考資料

MBR and Windows Boot Sectors
Last modified: Wed Jan 23 17:50:29 2008 JST