5

MBR与GPT分区表的简单说明

 3 years ago
source link: https://www.lujun9972.win/blog/2018/04/14/mbr%E4%B8%8Egpt%E5%88%86%E5%8C%BA%E8%A1%A8%E7%9A%84%E7%AE%80%E5%8D%95%E8%AF%B4%E6%98%8E/index.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

MBR分区表说明

MBR_Struct.png

在传统的MBR分区方案中,第0号扇区的的0~512个字节存储的是引导程序,用于服务器启动时引导BIOS的加电自检以及GRUB stage1的加载。 而446~509的这64个字节存放的是分区表信息,其中每个分区占用16字节,因此最多只能包含4个分区的信息。若想要创建超过5个分区,则需要将其中一个分区转换成逻辑分区,再对逻辑分区进行划分。 最后多出来的510~511字节按惯例为0xAA55。若磁盘此处的值不为0xAA55,则判断该磁盘的MBR被损坏。

由于每个分区只有16个字节,因此能记录的信息十分有限,只包括引导标志、分区格式ID、用CHS(磁头、柱面、扇区)方式描述的分区开始位置和结束位置、用LBA方式(逻辑块)描述的分区开始位置以及包含的扇区数,这些信息。

我们可以通过 hexdump 命令输出MBR中分区表的内容。

[vagrant@localhost ~]$   sudo hexdump -s 446 -n 66 -e '1/1 "%02x" " " 3/1 "%02x" " " 1/1 "%02x" " " 3/1 "%02x" " " 2/4 "%10d" "\n"' /dev/sda
00 202100 83 410100       2048      2048
80 410200 83 cb0982       4096   2097152
00 cb0a82 8e feffff    2101248  81784832
00 000000 00 000000          0         0
55 aa                                   

从中可以看出,这个硬盘有三个分区(第四个分区信息全是0),其中:

  • 第0个字节是引导标志,80表示引导,也就是系统从第二块分区引导
  • 第1~3个字节是CHS方式表示的起始位置,目前CHS表示法已经被淘汰了,没有意义
  • 第4个字节是分区类型ID号
  • 第5~7个字节是CHS方式表示的结束位置,目前CHS表示法已经被淘汰了,没有意义
  • 地8~11个字节是LBA方式描述的起始扇区号
  • 地12~15个字节是LBA方式描述的扇区数

这个数据跟 fdisk 显示的数据是匹配的

[vagrant@localhost ~]$ sudo fdisk -lu /dev/sda

Disk /dev/sda: 42.9 GB, 42949672960 bytes, 83886080 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000abd1e

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048        4095        1024   83  Linux
/dev/sda2   *        4096     2101247     1048576   83  Linux
/dev/sda3         2101248    83886079    40892416   8e  Linux LVM
[vagrant@localhost ~]$ 

此外,图中第一个分区的开始扇区块是从2048号扇区开始的,也就是说0~2047号扇区是保留扇区不用做分区的。 这其中,第0号扇区为主引导扇区,1~2047号扇区用于存储stage1.5

最后要说明的是,最后那两个字节显示的是 55 aa, 这个实际上就是 0xAA55,原因请参见小端模式


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK