Extended Boot Record (EBR)

Ref

扩展分区和逻辑分区的概念: https://en.wikipedia.org/wiki/Extended_boot_record

Overview

  • MBR中有4个partition record entry,为了支持多于4个分区,就需要用到扩展分区的概念。此时,
  • MBR中的一个partition record entry定义extended partition。(最多只能有一个这种entry)
  • primary partition和extended partition的区分,是用partition record entry中的一个字段(分区类型)。
  • extended partition又会划分成多个logical partition,由一个或多个EBR来描述。
  • 所有的EBR都位于extended partition中

Structure

EBR

  • 第一个EBR总是位于整个extended partition的第一个扇区
  • 所有的EBR是以链表的形式组织起来
  • 每个EBR (EBR_A)位于其对应的logical partition (LP_A)之前;如果其后还有一个logical partition (LP_B),那么在这个EBR (EBR_A)中将包括一个entry,该entry指向下一个EBR (EBR_B)。——显然,这个ERB_B也是位于其对应的LP_B之前。
  • 通过这种方式,多个EBR形成一个linked list;因此,EBR可以有任意个,其数量仅受实际的磁盘大小所限。
  • EBR和MBR(几乎)有相同的结构,差异:EBR仅用了分区表的前两个entry;EBR扇区最后的2个字节是signature,和MBR一样,都是0xAA55。

Entry of the EBR Partition Table

  • 第一个entry指向属于该EBR的logical partition
    – Start Sector: 该logica partition的第一个扇区相对于该EBR的偏移扇区数。通常对于所有的EBR,这个值都一样。
    – Number of Sectors: 该logical partition的扇区数。(EBR和logical partition之间可能有一些没有用到的扇区,这些都不属于该logical partition)
  • 第二个entry: 如果当前的EBR是extended partition的最后一个(最后一个logical partition),那么该entry就全0;否则,指向EBR Chain的下一个EBR。
    – Starting Sector: Extended Partition中下一个EBR的相对地址(=下一个EBR的LBA地址 - extended partition的第一个EBR的LBA地址)
    – Number of sectors: 下一个logical partition的扇区总数,但是是从下一个EBR扇区开始计数,因此会包括可能的实际未用到的、介于EBR和logical partition之间的扇区

实例分析

fdisk/分区列表

flying-bird@flyingbird:/$ sudo fdisk -l
Disk /dev/sda: 465.8 GiB, 500107862016 bytes, 976773168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0x00089375

Device     Boot     Start       End   Sectors   Size Id Type
/dev/sda1  *         2048 293177343 293175296 139.8G 83 Linux
/dev/sda2       293177344 301176831   7999488   3.8G 82 Linux swap / Solaris
/dev/sda3       301178878 976771071 675592194 322.2G  5 Extended
/dev/sda5       301178880 605679615 304500736 145.2G 83 Linux
/dev/sda6       605681664 786997428 181315765  86.5G 83 Linux
/dev/sda7       786999296 976771071 189771776  90.5G 83 Linux

Partition 3 does not start on physical sector boundary.


flying-bird@flyingbird:/$ 

两个主分区: sda1, sda2
一个扩展分区: sda3, 包括3个逻辑分区(sda5, sda6, sda7)。——逻辑分区从5开始计数。

MBR

flying-bird@flyingbird:~$ sudo dd if=/dev/sda of=mbr.dat bs=512 count=1
[sudo] password for flying-bird: 
1+0 records in
1+0 records out
512 bytes copied, 0.0210277 s, 24.3 kB/s
flying-bird@flyingbird:~$ ls -l mbr.dat 
-rw-r--r-- 1 root root 512 8月   6 00:25 mbr.dat
flying-bird@flyingbird:~$ sudo chown flying-bird mbr.dat 
flying-bird@flyingbird:~$ sudo chgrp flying-bird mbr.dat 
flying-bird@flyingbird:~$ hexdump -C mbr.dat 
00000000  eb 63 90 10 8e d0 bc 00  b0 b8 00 00 8e d8 8e c0  |.c..............|
00000010  fb be 00 7c bf 00 06 b9  00 02 f3 a4 ea 21 06 00  |...|.........!..|
00000020  00 be be 07 38 04 75 0b  83 c6 10 81 fe fe 07 75  |....8.u........u|
00000030  f3 eb 16 b4 02 b0 01 bb  00 7c b2 80 8a 74 01 8b  |.........|...t..|
00000040  4c 02 cd 13 ea 00 7c 00  00 eb fe 00 00 00 00 00  |L.....|.........|
00000050  00 00 00 00 00 00 00 00  00 00 00 80 01 00 00 00  |................|
00000060  00 00 00 00 ff fa 90 90  f6 c2 80 74 05 f6 c2 70  |...........t...p|
00000070  74 02 b2 80 ea 79 7c 00  00 31 c0 8e d8 8e d0 bc  |t....y|..1......|
00000080  00 20 fb a0 64 7c 3c ff  74 02 88 c2 52 bb 17 04  |. ..d|<.t...R...|
00000090  f6 07 03 74 06 be 88 7d  e8 17 01 be 05 7c b4 41  |...t...}.....|.A|
000000a0  bb aa 55 cd 13 5a 52 72  3d 81 fb 55 aa 75 37 83  |..U..ZRr=..U.u7.|
000000b0  e1 01 74 32 31 c0 89 44  04 40 88 44 ff 89 44 02  |[email protected].|
000000c0  c7 04 10 00 66 8b 1e 5c  7c 66 89 5c 08 66 8b 1e  |....f..|f.\.f..|
000000d0  60 7c 66 89 5c 0c c7 44  06 00 70 b4 42 cd 13 72  |`|f.\..D..p.B..r|
000000e0  05 bb 00 70 eb 76 b4 08  cd 13 73 0d 5a 84 d2 0f  |...p.v....s.Z...|
000000f0  83 d0 00 be 93 7d e9 82  00 66 0f b6 c6 88 64 ff  |.....}...f....d.|
00000100  40 66 89 44 04 0f b6 d1  c1 e2 02 88 e8 88 f4 40  |@f.D...........@|
00000110  89 44 08 0f b6 c2 c0 e8  02 66 89 04 66 a1 60 7c  |.D.......f..f.`||
00000120  66 09 c0 75 4e 66 a1 5c  7c 66 31 d2 66 f7 34 88  |f..uNf.|f1.f.4.|
00000130  d1 31 d2 66 f7 74 04 3b  44 08 7d 37 fe c1 88 c5  |.1.f.t.;D.}7....|
00000140  30 c0 c1 e8 02 08 c1 88  d0 5a 88 c6 bb 00 70 8e  |0........Z....p.|
00000150  c3 31 db b8 01 02 cd 13  72 1e 8c c3 60 1e b9 00  |.1......r...`...|
00000160  01 8e db 31 f6 bf 00 80  8e c6 fc f3 a5 1f 61 ff  |...1..........a.|
00000170  26 5a 7c be 8e 7d eb 03  be 9d 7d e8 34 00 be a2  |&Z|..}....}.4...|
00000180  7d e8 2e 00 cd 18 eb fe  47 52 55 42 20 00 47 65  |}.......GRUB .Ge|
00000190  6f 6d 00 48 61 72 64 20  44 69 73 6b 00 52 65 61  |om.Hard Disk.Rea|
000001a0  64 00 20 45 72 72 6f 72  0d 0a 00 bb 01 00 b4 0e  |d. Error........|
000001b0  cd 10 ac 3c 00 75 f4 c3  75 93 08 00 00 00 80 20  |...<.u..u...... |
000001c0  21 00 83 fe ff ff 00 08  00 00 00 80 79 11 00 fe  |!...........y...|
000001d0  ff ff 82 fe ff ff 00 88  79 11 00 10 7a 00 00 fe  |........y...z...|
000001e0  ff ff 05 fe ff ff fe 9f  f3 11 02 b8 44 28 00 00  |............D(..|
000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|
00000200
flying-bird@flyingbird:~$ 

Partition Entries in MBR

第一个主分区(/dev/sda1)
000001b0                                             80 20  |...<.u..u...... |
                                                     80: 启动分区
000001c0  21 00 83 fe ff ff 00 08  00 00 00 80 79 11 
      (20,21,00): 该分区第一个扇区的CHS(Linux仅使用sector数据)
                83: 分区类型,GNU/Linux
                   (fe,ff,ff): 最后一个扇区的CHS
                           0x0800=2048: 第一个扇区的LBA, 
                                          0x11798000=293175296: 该分区的扇区数

第二个主分区(/dev/sda2)
                                                     00 fe  |!...........y...|
                                                     00: 非启动分区
000001d0  ff ff 82 fe ff ff 00 88  79 11 00 10 7a 00 
       (fe,ff,ff): start CHS
                82: Linux交换分区
                  (fe,ff,ff): 最后一个扇区的CHS
                           0x11798800=293177344: 该分区的第一个扇区
                                         0x007a1000=7999488(=3.8G) 该分区的扇区数(分区大小)

扩展分区(/dev/sda3)
                                                     00 fe  |........y...z...|
                                                     00: 非启动分区
000001e0  ff ff 05 fe ff ff fe 9f  f3 11 02 b8 44 28 
       (fe,ff,ff): start CHS
                05: 扩展分区
                  (fe,ff,ff): 最后一个扇区的CHS
                           0x11f39ffe=301178878: 该分区(/dev/sda3)的第一个扇区
                           0x11f39ffe*512=0x23e73ffc00
                                        0x2844b802=675592194(=322.2G) 该分区的扇区数(分区大小)

第四个分区/dev/sda4未用
                                                     00 00  |............D(..|
000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|
                                                     boot signature
00000200

第一个EBR/第一个逻辑分区sda5

查看该EBR的命令(这里用了4096,多显示了EBR后面的几个扇区):

sudo hexdump -C -s 0x23e73ffc00 -n 4096 /dev/sda

EBR

第一个扇区是EBR:

446字节未用,全0
23e73ffc00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
23e73ffdb0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 

第一个partition entry:
                                                       00 fe  |................|
                                                       00: 非启动分区
23e73ffdc0  ff ff 83 fe ff ff 02 00  00 00 00 50 26 12 
                  83: 分区类型,GNU/Linux   0x12265000=304500736(=145.2G) 逻辑分区/dev/sda5的扇区数(分区大小)
                              0x00000002=第一个逻辑分区(/dev/sda5)的相对LBA=0x11f39ffe+2=0x11f3a000=301178880
                              0x11f3a000*512=0x23e7400000=154203586560


第二个partition entry:
                                                       00 fe  |...........P&...|
23e73ffdd0  ff ff 05 fe ff ff 02 50  26 12 b5 b0 ce 0a 00 00  |.......P&.......|
                  05: 扩展分区             0x0aceb0b5=181317813(86.459G)
                              0x12265002=第二个逻辑分区的相对LBA(相对于整个扩展分区的起始地址)
                              0x11f39ffe + 0x12265002 = 0x2419f000 = 605679616
                              0x2419f000 * 512 = 0x4833e00000

23e73ffde0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
23e73ffdf0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|
23e73ffe00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*

逻辑分区/dev/sda5的起始位置

23e7400000  00...
*
23e7400400  00 40 91 00 00 ca 44 02  19 0a 1d 00 3c 0b e1 00  |[email protected].....<...|
23e7400410  4e 98 7e 00 00 00 00 00  02 00 00 00 02 00 00 00  |N.~.............|
23e7400420  00 80 00 00 00 80 00 00  00 20 00 00 2c e5 85 59  |......... ..,..Y|
23e7400430  2c e5 85 59 6a 01 ff ff  53 ef 01 00 01 00 00 00  |,..Yj...S.......|
23e7400440  da 31 2c 53 00 00 00 00  00 00 00 00 01 00 00 00  |.1,S............|
23e7400450  00 00 00 00 0b 00 00 00  00 01 00 00 3c 00 00 00  |............<...|
23e7400460  46 02 00 00 7b 00 00 00  82 cb 7e cd 1e 15 42 78  |F...{.....~...Bx|
23e7400470  83 ad c8 0a 53 13 a5 ad  00 00 00 00 00 00 00 00  |....S...........|
23e7400480  00 00 00 00 00 00 00 00  2f 68 6f 6d 65 00 00 00  |......../home...|
23e7400490  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
23e74004c0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 f6 03  |................|
23e74004d0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
23e74004e0  08 00 00 00 00 00 00 00  c2 04 78 00 b0 02 ec d5  |..........x.....|
23e74004f0  ec de 4d 3b 87 ea c4 d0  8e 61 7f a3 01 01 00 00  |..M;.....a......|
23e7400500  0c 00 00 00 00 00 00 00  da 31 2c 53 0a f3 02 00  |.........1,S....|
23e7400510  04 00 00 00 00 00 00 00  00 00 00 00 ff 7f 00 00  |................|
23e7400520  00 80 20 01 ff 7f 00 00  01 00 00 00 ff ff 20 01  |.. ........... .|
23e7400530  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
23e7400540  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 08  |................|
23e7400550  00 00 00 00 00 00 00 00  00 00 00 00 1c 00 1c 00  |................|
23e7400560  01 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
23e7400570  00 00 00 00 04 00 00 00  0d 3a 57 0e 00 00 00 00  |.........:W.....|
23e7400580  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
23e7400c00

第二个EBR/第二个逻辑分区sda6

MBR和EBR中都有扩展分区的概念,但EBR中的扩展分区都属于MBR的扩展分区的一部分。EBR的扩展分区的概念主要是为了和逻辑分区区分开来。

第二个逻辑分区所在的EBR扩展分区起始地址:0x4833e00000。查看该分区的命令:

sudo hexdump -C -s 0x4833e00000 -n 4096 /dev/sda

EBR:

446未用字节
4833e00000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
4833e001b0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 

第一个parition entry:
                                                       00 fe  |................|
                                                       00: 非启动分区 
4833e001c0  ff ff 83 fe ff ff 00 08  00 00 b5 a8 ce 0a 
                  83: 分区类型,GNU/Linux   0x0acea8b5 = 181315765 逻辑分区/dev/sda6的扇区数
                              0x0800: 相对于该EBR,对应逻辑分区(/dev/sda6)的起始地址
                              0x2419f000 + 0x0800 = 0x2419f800 = 605681664 (LBA)
                              605681664 * 512 = 0x4833f00000

第二个partition entry:
                                                       00 fe  |................|
4833e001d0  ff ff 05 fe ff ff b7 00  f5 1c 4b b7 4f 0b 
                  05: extended partition   0x0b4fb74b=189773643
                              0x11f39ffe + 0x1cf500b7 = 786997429
                              786997429 * 512 = 0x5dd1416a00
                                                       00 00  |..........K.O...|
4833e001e0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
4833e001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|
                                                       signature
4833e00200  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
4833e01000

逻辑分区/dev/sda6开始几个扇区的数据

命令:

sudo hexdump -C -s 0x4833f00000 -n 4096 /dev/sda

内容:

4833f00000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
4833f00400  00 80 56 00 16 d5 59 01  a7 4a 11 00 9a af 53 01  |..V...Y..J....S.|
4833f00410  f5 7f 56 00 00 00 00 00  02 00 00 00 02 00 00 00  |..V.............|
4833f00420  00 80 00 00 00 80 00 00  00 20 00 00 2d e5 85 59  |......... ..-..Y|
4833f00430  2d e5 85 59 04 01 ff ff  53 ef 01 00 01 00 00 00  |-..Y....S.......|
4833f00440  c8 e4 e4 53 00 00 00 00  00 00 00 00 01 00 00 00  |...S............|
4833f00450  00 00 00 00 0b 00 00 00  00 01 00 00 3c 00 00 00  |............<...|
4833f00460  46 02 00 00 7b 00 00 00  21 25 22 46 12 4f 4f 0d  |F...{...!%"F.OO.|
4833f00470  93 6a b5 94 4a 10 c3 ce  00 00 00 00 00 00 00 00  |.j..J...........|
4833f00480  00 00 00 00 00 00 00 00  2f 6d 61 74 65 72 69 61  |......../materia|
4833f00490  6c 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |l...............|
4833f004a0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
4833f004c0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 fa 03  |................|
4833f004d0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
4833f004e0  08 00 00 00 00 00 00 00  00 00 00 00 83 c2 0a d2  |................|
4833f004f0  13 87 49 b4 8c 48 8b fa  86 bd 6c a2 01 01 00 00  |..I..H....l.....|
4833f00500  0c 00 00 00 00 00 00 00  dd 31 2c 53 0a f3 04 00  |.........1,S....|
4833f00510  04 00 00 00 00 00 00 00  00 00 00 00 d9 5b 00 00  |.............[..|
4833f00520  27 24 00 00 d9 5b 00 00  25 24 00 00 01 84 00 00  |'$...[..%$......|
4833f00530  fe 7f 00 00 01 00 00 00  26 a8 00 00 ff 7f 00 00  |........&.......|
4833f00540  01 00 00 00 27 a8 00 00  00 00 00 00 00 00 00 08  |....'...........|
4833f00550  00 00 00 00 00 00 00 00  00 00 00 00 1c 00 1c 00  |................|
4833f00560  01 00 00 00 e5 7f 00 00  00 00 00 00 00 00 00 00  |................|
4833f00570  00 00 00 00 04 00 00 00  a6 80 02 02 00 00 00 00  |................|
4833f00580  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
4833f01000

第三个EBR/第三个逻辑分区sda7

其所在的EBR:

sudo hexdump -C -s 0x5dd1416a00 -n 4096 /dev/sda

内容:

446未用字节
5dd1416a00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
5dd1416bb0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 

第一个partition entry,对应/dev/sda7
                                                       00 fe  |................|
                                                       0x00: 非启动分区
5dd1416bc0  ff ff 83 fe ff ff 4b 07  00 00 00 b0 4f 0b
                              0x0000074b: 相对于当前EBR的偏移量,为/dev/sda7的起始LBA
                              786997429 + 0x074b = 786999296
                                           0x0b4fb000 = 189771776 /dev/sda7的扇区数

第二个partition entry为全0,没有其他的逻辑分区了。
                                                       00 00  |......K.....O...|
5dd1416bd0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
5dd1416bf0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|
5dd1416c00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
5dd1417a00

汇总表格

磁盘分区表汇总数据

猜你喜欢

转载自blog.csdn.net/u013344915/article/details/76783363