第三部分是Magic number,占2个字节。
如果你安装了Windows,Windows启动加载器的初始信息就放在这个区域里;
如果MBR的信息被覆盖导致Windows不能启动,你就需要使用Windows的MBR修复功能来使其恢复正常。
如果你安装了Linux,则位于MBR里的通常会是GRUB加载器。DPT分区表偏移地址为0x1BE--0x1fd,每个分区表项长16个字节,共64字节分别对应MBR的四个主分区。
每个分区表的16个字节含义如下
00-Partition Flag-00/不可引导、80/可以引导
01~03-Start CHS-分区开始的CHS值(磁头Head,扇区Sector,柱面Cylinder)
04-Partition Bytes-分区类型-83/linux、82/SWAP、8e/LVM
05~07-End CHS-分区结束的CHS值(磁头Head,扇区Sector,柱面Cylinder)
08~11-Start LBA-相对的起始扇区号(第二个分区=第一个分区起始扇区号+第一个分区的扇区数量)
12~15-Size-该分区所拥有的扇区数量
Magic Number也就是结束标志字,偏移地址0x1FE--0x1FF的2个字节,固定为55AA,如果该标志错误系统就不能启动。
我们可以用dd命令来将/dev/sda磁盘的MBR读出并写入到/tmp/mbr文件,如下:
[root@128 ~]# dd if=/dev/sda of=/tmp/mbr-128 bs=512 count=1
记录了1+0 的读入
记录了1+0 的写出
512字节(512 B)已复制,0.000174479 秒,2.9 MB/秒
[root@130 ~]# dd if=/dev/sda of=/tmp/mbr-130 bs=512 count=1
1+0 records in
1+0 records out
512 bytes (512 B) copied, 0.000160761 s, 3.2 MB/s
hexdump -C /tmp/mbr-128
hexdump -C /tmp/mbr-130
MBR内容的打开后共有32行,每行16个字节,共计512个字节
为了便于查看,我将内容复制到Excel中,将BootLoader的部分内容予以隐藏,结果如下图所示
其中128主机共分了三个区,130主机分了两个区,分区信息如下
[root@130 ~]# parted /dev/sda
GNU Parted 2.1
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sda: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
1 1049kB 525MB 524MB primary ext4 boot
2 525MB 21.5GB 20.9GB primary lvm
(parted)
[root@128 ~]# fdisk -l /dev/sda
磁盘 /dev/sda:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x00000116
设备 Boot Start End Blocks Id System
/dev/sda1 * 2048 616447 307200 83 Linux
/dev/sda2 616448 4810751 2097152 82 Linux swap / Solaris
/dev/sda3 4810752 41943039 18566144 83 Linux
[root@128 ~]#
先将16位分区表进行区域拆分,如下图
192.168.254.128三个分区信息
80 20 21 0083 5e 38 2600 08 00 00 00 60 09 00 614400*512/1000/1000=315M
第一个分区是启动分区,拥有的扇区数量是614400,大小是315M,LBA寻址的起始扇区是2048
方法详解:
1、第一位是80,即可以启动
2、12~15位的Size的十六进制数值为00 60 09 00,高低位转换后为00096000,换算成十进制为614400,每个扇区大小512字节,换算成MB大小为315M
3、08~11位Start LBA起始扇区号十六进制数值为00 08 00 00,高低位转换后为00000800,换算成十进制为2048
00 5e 39 26 82 74 49 2b 00 68 09 00 00 00 40 00 4194304*512/1000/1000=2147M
第二个分区不可启动,拥有的扇区数量是4194304,大小是2147M,LBA寻址的起始扇区是2048+614400=616448
00 74 4a 2b 83 fe ff ff 00 68 49 00 00 98 36 02 37132288*512/1000/1000/1000=19G
第三个分区不可启动,拥有的扇区数量是37132288,大小是19G,LBA寻址的起始扇区是616448+4194304=4810752
192.168.254.130两个分区信息
80 20 21 00 83 dd 1e 3f 00 08 00 00 00 a0 0f 00 1024000*512/1000/1000=524M
第一个分区是启动分区,拥有的扇区数量是1024000,大小是524M,LBA寻址的起始扇区是2048
00 dd 1f 3f 8e fe ff ff 00 a8 0f 00 00 58 70 02 40916992*512/1000/1000/1000=21G
第二个分区不可启动,拥有的扇区数量是40916992,大小是21G,LBA寻址的起始扇区是2048+1024000=1026048
最后,我们来看在两种不同的硬盘寻址方式:LBA和CHS
CHS寻址模式将硬盘划分为磁头(Heads)、柱面(Cylinder)、扇区(Sector),即所谓的CSH 3D参数 (Disk Geometry)。
磁头(Heads):每张磁片的正反两面各有一个磁头,一个磁头对应一张磁片的一个面。因此,用第几磁 头就可以表示数据在哪个磁面。
柱面(Cylinder):所有磁片中半径相同的同心磁道构成“柱面",意思是这一系列的磁道垂直叠在一起,就形成一个柱面的形状。简单地理解,柱面数=磁道数。
扇区(Sector):将磁道划分为若干个小的区段,就是扇区。虽然很小,但实际是一个扇子的形状,故称为扇区。每个扇区的容量为512字节。
磁头/柱面/扇区理解示意图如下
所以在CHS寻址模式下,BIOS寻找的是硬盘空间的物理位置,所以CHS可以理解为物理寻址。
CHS寻址的最大容量为8GB
CHS寻址方式的容量由CHS三个参数决定:
磁头数最大为255 (用 8 个二进制位存储)。从0开始编号。
柱面数最大为1023(用 10 个二进制位存储)。从0开始编号。
扇区数最大数 63(用 6个二进制位存储)。从1始编号。
所以CHS寻址方式的最大寻址范围为:
255 * 1023 * 63 * 512 / 1048576 = 7.837 GB ( 1M =1048576 Bytes )
或硬盘厂商常用的单位:
255 * 1023 * 63 * 512 / 1000000 = 8.414 GB ( 1M =1000000 Bytes )
LBA(Logical Block Addressing)逻辑块寻址模式,也叫线性寻址,在LBA地址中,地址不再表示实际硬盘的实际物理地址(柱面、磁头和扇区)。
LBA编址方式将 CHS这种三维寻址方式转变为唯一的线性寻址,它把硬盘所有的物理扇区的C/H/S编号通过一定的规则转变为线性编号,系统效率得到大大提高,避免了 烦琐的磁头/柱面/扇区的寻址方式。在访问硬盘时,由硬盘控制器将这种逻辑地址转换为实际硬盘的物理地址。
LBA寻址的最大容量为2.2TB
由于MBR中DPT分区表中LBA寻址的部分只有32位(4个分区*每个分区表8位LBA寻址),因此最大仅能够支持2^32(2的32次方)个扇区,而每个扇区的数据量是512字节,于是2^32 x 512,就得出了最大支持容量,这个数值按硬盘厂商的计算方式(1000进位制)来说,大约就是2.199TB.
目前大部分主板BIOS采用的都是LBA寻址,CHS寻址很早之前就已经无人使用了,另外,在MBR分区表中CHS和LBA的地址是可以互换的,互换公式请自行百度,以本人的数学能力暂时无法理解
本文广泛参考了百度百科及以下链接内容
http://fyzx.ankang.gov.cn/Article/Class26/201408/1484.html
http://wushank.blog.51cto.com/3489095/1144637
http://diy.pconline.com.cn/329/3292501_all.html
http://blog.sina.com.cn/s/blog_4b9eab3201011p8c.html
http://www.cnblogs.com/joyzhuang/p/4126325.html