==================================================== DPT编码
==================================================== DPT中各自段意义 MBR偏移 偏移 长度 0x01BE 0x01BF 0x01C0 0x01C1 0x01C2 0x01C3 0x01C4 0x01C5 0x01C6 0x01CA
分区类型描述(Partition Type Indicator) 代码 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x08 0x09 0x0A 0x0B 0x0C 0x0E 0x0F 0x10 0x11 0x12 0x14 0x16 0x17 0x18 0x1B 0x1C 0x1E 0x24 类型 Dos或Windows不允许使用,视为非法 FAT12 XENIX root XENIX usr FAT16小于32MB Extended FAT16大于32MB AIX AIX bootable OS/2 Boot Manage Windows 95 FAT32 Windows 95 FAT32 Windows 95 FAT16 Windows 95 Extended(>8GB) OPUS Hidden FAT12 Compaq diagnost Hidden FAT16 <32M Hidden FAT16 Hidden HPFS/NTFS AST Windows swap Hidden FAT32 Hidden FAT32 partition(Using LBA-mode INT 13 extensions) Hidden LBA VFAT partition NEC DOS 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x0C 1Byte 1Byte 6位 10位 1Byte 1Byte 6位 10位 4Byte 4Byte 含义 引导标志(Boot Indicator):指明该分区是否是活动分区 起始磁头(Start Head) 起始扇区(Start Sector): 只用0~5位,后面两位被起始柱面使用 起始柱面(Start Cylinder): 共10位,最大值1023 分区类型描述(Partition Type Indicator),分区类型 结束磁头(End Head) 结束扇区(End Sector): 只用0~5位,后面两位被结束柱面使用 结束柱面(End Cylinder): 共10位,最大值1023 本分区之前使用的扇区数(Sectors Preceding Partition) 本分区的总扇区数(Sectors in partition) 0x3C 0x40 0x41 0x42 0x4D 0x4E 0x4F 0x50 0x51 0x52 0x53 0x54 0x55 0x56 0x5C 0x61 0x63 0x64 0x65 0x70 0x75 0x80 0x81 0x82 0x83 0x84 0x85 0x86 0x87 0x8e 0x93 0x94 0xA0 0xA5 0xA6 0xA7 0xB7 0xB8 0xC0 0xC1 0xC4 0xC6 0xC7 Partition Magic Venix 80286 PPC PreP Boot SFS QNX4.x QNX4.x 2 part QNX4.x 3 part OnTrack DM OnTrack DM6 Aux CP/M OnTrack DM6 Aux OnTrack DM6 EZ-Drive Golden Bow Priam Edisk Speed Stor GNU HURD or Sys Novell Netware Novell Netware Disk Secure Mult PC/IX Old Minix Minix/Old Linux Linux swap Linux OS/2 hidden C: Linux Extended NTFS volume Set NTFS volume Set Linux LVM Amoebba Amoebba BBT IBM Thinkpad hidden BSD/386 Open BSD NextSTEP BSDI fs BSDI swap DR-DOS/Novell Dos secured partition DR-DOS/sec DR-DOS/sec DR-DOS/sec Syrinx rdnd0xDB 0xE1 0xE3 0xE4 0xEB 0xF1 0xF2 0xF4 0xFE 0xFF CP/M/CTOS DOS access DOS R/0 SpeedStor BeOS fs Speed Stor DOS 3.3 + secondary partition Speed Stor LAN Step BBT 采用DPT同一块硬盘可以安装多种文件系统而互不影响
==================================================== 扩展分区
==================================================== 按照DPT中要求,linux最多限制有4个主分区 1)也就是你可以把硬盘分为4个主分区 /dev/sda1 (主分区) /dev/sda2 (主分区) /dev/sda3 (主分区) /dev/sda4 (主分区)
如果需要把硬盘分为多4个分区,那么必须使用扩展分区,扩展分区做多1个,在扩展分区下面在设立若干个逻辑分区: /dev/sda1 (主分区) /dev/sda2 (主分区) /dev/sda3 (扩展分区)
/dev/sda5 (逻辑分区) /dev/sda6 (逻辑分区) /dev/sda7 (逻辑分区)
注意:
1)扩展分区的分区类型描述(Partition Type Indicator)为0x85 2)逻辑分区并不是从sda4开始,sda4固定分配给主分区
6.4. LBA and CHS
关于硬盘的寻址与定位有两种方式:CHS是24位寻址,LBS是可以支持64位寻址
6.4.1. CHS(cylinders-heads-sectors)
CHS寻址模式将硬盘划分为磁头(Heads)、柱面(Cylinder)、扇区(Sector)。
柱面(Cylinder):所有磁片中半径相同的同心磁道构成“柱面\,意思是这一系列的磁道垂直叠在一起,就形成一个柱面的形状。简单地理解,柱面数=磁道数。
磁头(Heads):每张磁片的正反两面各有一个磁头,一个磁头对应一张磁片的一个面。因此,用第几磁 头就可以表示数据在哪个磁面。
扇区(Sector):将磁道划分为若干个小的区段,就是扇区。虽然很小,但实际是一个扇子的形状,故称为扇区。每个扇区的容量为512字节。
知道了磁头数、柱面数、扇区数,就可以很容易地确定数据保存在硬盘的哪个位置。也很容易确定硬盘的容量,其计算公式是:
硬盘容量=磁头数×柱面数×扇区数×512字节
CHS限制1: BIOS INT 13h 接口
柱面地址10位 1024 磁头地址8位 256 扇区地址6位 63 (扇区从1开始,并不是从0开始) 共24位的寻址方式, 最大硬盘空间8GB CHS限制2: IDE(ATA)
柱面地址16位 65536 磁头地址4位 16 扇区地址6位 63
共24位的寻址方式, 最大硬盘空间127.5GB
CHS目前基本上不再使用,由于24位寻址空间的局限太大,目前普片采用LBA方式
采用CHS寻址,MBR地址为0柱面、0磁头、1扇区
6.4.2. LBA(Logical Block Address)
LBA是非常单纯的一种寻址模式﹔从0开始编号来定位区块,第一区块LBA=0,第二区块LBA=1,依此类推。这种寻址模式取代了原先操作系统必须面对存储设备硬件构造的方式。最具代表性的首推CHS(cylinders-heads-sectors,磁柱-磁头-扇区)寻址模式
LBA最大的好处能偷突破CHS 24bit限制,老式设备支持28bit LBA, 新设备一般支持48bit LBA
采用LBA寻址,MBR地址为LBA-0
6.5. boot.img和core.img安装
在了解上面的基础知识后,在回到我们的GRUB2,我们知道boot.img将会拷贝到MBR,也就是LBA-0的位置,那么core.img将会被放置在什么地方?MBR与GPT有不同解决方案:
请参考http://www.gnu.org/software/grub/manual/grub.html#BIOS-installation
1)MBR
在MBR和第一个partition之间有一段空白磁盘空间。大伙还记得5.3 DPT中fdisk命令查看第一个分区的位置从2048sector(LBA2048)开始,那么前面之一段都是空白。
这个空白磁盘空间有各种名称\但是有至少必须32Kbyte,一般来说core.img将会被拷贝到这个区域中
2) GPT
GPT作为UEF的一部分,也能够被使用在BIOS平台上,但是必须得有一个专门的GPT分区,这个分区至少32KB大小,建议1M,名字为BIOS Boot Partition,然后core.img拷贝到这个分区。
采用GPT方案有好处,不会使用\区域。
本文中将描述第一种MBR方案,也就是当运行grub2-install命令,至少会做两件事情
1) 拷贝boot.img到LBA-0的MBR引导代码中
2) 拷贝core.img到LBA-1开始到LBA-31中的空闲代码中
==================================================== 深入研究mbr.bin
====================================================
除了上面的,其实grub2-install还完成了其它的工作,有兴趣可以研究下,在这里进行一个额外的对比给大家看看:
1)mbr.bin (我们已经在6.2MBR中使用DD命令导出的MBR) 2)/boot/grub2/i386-pc/boot.img
然后使用命令hexdump导出文件
[root@controller i386-pc]# hexdump -Cv boot.img
00000000 eb 63 90 00 00 00 00 00 00 00 00 00 00 00 00 00 |.c..............| 00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000050 00 00 00 00 00 00 00 00 00 00 00 80 01 00 00 00 |................| 00000060 00 00 00 00 ff fa eb 05 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 be 05 7c |. ..d|<.t...R..|| 00000090 b4 41 bb aa 55 cd 13 5a 52 72 3d 81 fb 55 aa 75 |.A..U..ZRr=..U.u| 000000a0 37 83 e1 01 74 32 31 c0 89 44 04 40 88 44 ff 89 |7...t21..D.@.D..| 000000b0 44 02 c7 04 10 00 66 8b 1e 5c 7c 66 89 5c 08 66 |D.....f..\\|f.\\.f| 000000c0 8b 1e 60 7c 66 89 5c 0c c7 44 06 00 70 b4 42 cd |..`|f.\\..D..p.B.| 000000d0 13 72 05 bb 00 70 eb 76 b4 08 cd 13 73 0d 5a 84 |.r...p.v....s.Z.| 000000e0 d2 0f 83 de 00 be 85 7d e9 82 00 66 0f b6 c6 88 |.......}...f....| 000000f0 64 ff 40 66 89 44 04 0f b6 d1 c1 e2 02 88 e8 88 |d.@f.D..........|