Master Boot Recordを読む
GPTディスクにもMBRがあるのでそれを読み出すプログラムを書いてみた。
実行。
$ gcc -o readmbr readmbr.c
$ sudo ./readmbr
Boot strap loader
0001: 33 C0 8E D0 BC 00 7C 8E C0 8E D8 BE 00 7C BF 00
0002: 06 B9 00 02 FC F3 A4 50 68 1C 06 CB FB B9 04 00
0003: BD BE 07 80 7E 00 00 7C 0B 0F 85 0E 01 83 C5 10
0004: E2 F1 CD 18 88 56 00 55 C6 46 11 05 C6 46 10 00
0005: B4 41 BB AA 55 CD 13 5D 72 0F 81 FB 55 AA 75 09
0006: F7 C1 01 00 74 03 FE 46 10 66 60 80 7E 10 00 74
0007: 26 66 68 00 00 00 00 66 FF 76 08 68 00 00 68 00
0008: 7C 68 01 00 68 10 00 B4 42 8A 56 00 8B F4 CD 13
0009: 9F 83 C4 10 9E EB 14 B8 01 02 BB 00 7C 8A 56 00
0010: 8A 76 01 8A 4E 02 8A 6E 03 CD 13 66 61 73 1C FE
0011: 4E 11 75 0C 80 7E 00 80 0F 84 8A 00 B2 80 EB 84
0012: 55 32 E4 8A 56 00 CD 13 5D EB 9E 81 3E FE 7D 55
0013: AA 75 6E FF 76 00 E8 8D 00 75 17 FA B0 D1 E6 64
0014: E8 83 00 B0 DF E6 60 E8 7C 00 B0 FF E6 64 E8 75
0015: 00 FB B8 00 BB CD 1A 66 23 C0 75 3B 66 81 FB 54
0016: 43 50 41 75 32 81 F9 02 01 72 2C 66 68 07 BB 00
0017: 00 66 68 00 02 00 00 66 68 08 00 00 00 66 53 66
0018: 53 66 55 66 68 00 00 00 00 66 68 00 7C 00 00 66
0019: 61 68 00 00 07 CD 1A 5A 32 F6 EA 00 7C 00 00 CD
0020: 18 A0 B7 07 EB 08 A0 B6 07 EB 03 A0 B5 07 32 E4
0021: 05 00 07 8B F0 AC 3C 00 74 09 BB 07 00 B4 0E CD
0022: 10 EB F2 F4 EB FD 2B C9 E4 64 EB 00 24 02 E0 F8
0023: 24 02 C3 49 6E 76 61 6C 69 64 20 70 61 72 74 69
0024: 74 69 6F 6E 20 74 61 62 6C 65 00 45 72 72 6F 72
0025: 20 6C 6F 61 64 69 6E 67 20 6F 70 65 72 61 74 69
0026: 6E 67 20 73 79 73 74 65 6D 00 4D 69 73 73 69 6E
0027: 67 20 6F 70 65 72 61 74 69 6E 67 20 73 79 73 74
0028: 65 6D 00 00 00 63 7B 9A 00 00 00 00 00 00
Partition table entry [0]
Flag: 00
First sector(CHS): Cylinder=0,Head=0,Sector=1
Type: EE
Last sector(CHS): Cylinder=1023,Head=254,Sector=63
First sector(LBA): 1
Sector num: 1953525167
Partition table entry [1]
Flag: 00
First sector(CHS): Cylinder=0,Head=0,Sector=0
Type: 00
Last sector(CHS): Cylinder=0,Head=0,Sector=0
First sector(LBA): 0
Sector num: 0
Partition table entry [2]
Flag: 00
First sector(CHS): Cylinder=0,Head=0,Sector=0
Type: 00
Last sector(CHS): Cylinder=0,Head=0,Sector=0
First sector(LBA): 0
Sector num: 0
Partition table entry [3]
Flag: 00
First sector(CHS): Cylinder=0,Head=0,Sector=0
Type: 00
Last sector(CHS): Cylinder=0,Head=0,Sector=0
First sector(LBA): 0
Sector num: 0
Boot signiture: AA55
ブートストラップローダにはプログラムが埋め込まれている様子なので割愛。
パーティションテーブルを見てみる。
- GPTディスクのため全体が1つのパーティションとして登録される。したがって先頭のエントリにのみ書き込まれている。
- フラグは0x00。0x80=ブート可, 0x00=ブート不可なのでブート不可ということみたい。
- セクタ(CHS方式)は最小値と最大値が書き込まれている。
- パーティション識別子は0xEE。0xEEは「Indication that this legacy MBR is followed by an EFI header」らしい。GPTなので納得。
- セクタ(LBA方式)は先頭のセクタをあらわす1。
- セクタ数は1953525167。1セクタあたりのサイズが512Bなので512を掛けてみると1.000204886×10¹²。1TBのディスクなので納得。