磁盘MBR分区理解

磁盘MBR分区理解,第1张

章节目录 参考链接 什么是CHS寻址模式什么是LBA寻址模式什么是MBR将MBR所在扇区按照16进制打印出来看看分区表最多仅能有四组记录区平铺整理后进行每组分区数据结构说明转换为二进制数值,并按照CHS寻址模式规则对柱面和扇区号进行分割重组MBR分区信息分析结果将上面分析的结果,对照`fdisk`命令输出的结果

参考链接 全是干货:MBR分区结构以及GPT分区结构什么是CHS寻址逻辑区块地址硬盘结构简介 解读分区表的秘密 什么是CHS寻址模式

CHS寻址模式将硬盘划分为磁头(Heads)、柱面(Cylinder)、扇区(Sector)。

磁头(Heads):每张瓷片的正反两面各有一个磁头,一个磁头对应一张瓷片的一个面。因此,用第几磁头就可以标识数据在哪个磁面。柱面(Cylinder):所有磁片中半径相同的同心磁道构成“柱面”,意思是这一系列的磁道垂直叠在一起,就形成了一个柱面的形状。简单地理解,柱面数=磁道数。扇区(Sector):将磁道划分为若干个小的区段,就是扇区。虽然很小,但实际是一个扇子的形状,故称为扇区。每个扇区的容量为512字节(512 bytes)。

知道了磁头数,柱面数,扇区数,就可以很容易地确定数据保存在硬盘的哪个位置。也很容易确定硬盘的容量。

什么是LBA寻址模式

LBA是非常单纯的一种定址模式﹔从0开始编号来定位区块,第一区块LBA=0,第二区块LBA=1,依此类推。这种定址模式取代了原先操作系统必须面对存储设备硬件构造的方式。最具代表性的首推CHS(cylinders-heads-sectors,磁柱-磁头-扇区)定址模式,区块必须以硬盘上某个磁柱、磁头、扇区的硬件位置所合成的地址来指定。CHS模式对硬盘以外的设备来说没什么作用(例如磁带或是网络存储设备),所以通常也不会用在这些地方。过去MFM(Modified Frequency Modulation, 改良调频式)和RLL(Run Length Limited)存储设备都曾使用CHS模式,ATA-1设备更将延伸CHS(Extended Cylinders-Heads-Sectors, ECHS)也派上了用场。
SCSI采用LBA抽象定址。实际上硬件控制器还是以CHS来定址区块,但无论驱动程序还是任何以低级访问磁盘的应用程序(例如数据库软件)通常都不再需要这个参数。各种要求区块低级访问的系统调用把定义好的LBA传给驱动程序﹔最直接的情况下(逻辑器件与实体设备单一对应)驱动程序只是将LBA再传给硬件控制器。

什么是MBR

MBR:Master Boot Record(主要启动记录区)

MBR包含两个部分

主要启动记录区(Master Boot Record,MBR):可以安装开机管理程序的地方,有446 bytes分区表(partition table):记录整颗硬盘分区的状态,有64 bytes

它们在整个磁盘的第一个扇区,一个扇区通常是 512 bytes 大小

计量单位说明:
1 byte = 8 bits
1KiB= 1,024 bytes
1MiB= 1,048,576 bytes
1GiB= 1,073,741,824 bytes
1TiB= 1,099,511,627,776 bytes

而MBR所在扇区的大小可以按照下面这种表格形式来理解

将MBR所在扇区按照16进制打印出来看看

查看磁盘挂载情况

[root@jiewli dev]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   40G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   39G  0 part 
  ├─centos-root 253:0    0   20G  0 lvm  /
  ├─centos-swap 253:1    0    4G  0 lvm  [SWAP]
  └─centos-home 253:2    0   15G  0 lvm  /home
sr0              11:0    1  4.3G  0 rom

确认磁盘挂载文件位置,一般是/dev/目录下,根据上面lsblk命令输出结果来分析,我们只有一个磁盘,名称叫sda,那么我们要确认/dev/sda是否存在。

[root@jiewli ~]# ls /dev/ | grep sda
sda
sda1
sda2

确认/dev/sda存在。
直接读取磁盘第一个扇区数据

[root@jiewli ~]# xxd -g 1 -l 512 /dev/sda
0000000: eb 63 90 10 8e d0 bc 00 b0 b8 00 00 8e d8 8e c0  .c..............
0000010: fb be 00 7c bf 00 06 b9 00 02 f3 a4 ea 21 06 00  ...|.........!..
0000020: 00 be be 07 38 04 75 0b 83 c6 10 81 fe fe 07 75  ....8.u........u
0000030: f3 eb 16 b4 02 b0 01 bb 00 7c b2 80 8a 74 01 8b  .........|...t..
0000040: 4c 02 cd 13 ea 00 7c 00 00 eb fe 00 00 00 00 00  L.....|.........
0000050: 00 00 00 00 00 00 00 00 00 00 00 80 01 00 00 00  ................
0000060: 00 00 00 00 ff fa 90 90 f6 c2 80 74 05 f6 c2 70  ...........t...p
0000070: 74 02 b2 80 ea 79 7c 00 00 31 c0 8e d8 8e d0 bc  t....y|..1......
0000080: 00 20 fb a0 64 7c 3c ff 74 02 88 c2 52 be 05 7c  . ..d|<.t...R..|
0000090: b4 41 bb aa 55 cd 13 5a 52 72 3d 81 fb 55 aa 75  .A..U..ZRr=..U.u
00000a0: 37 83 e1 01 74 32 31 c0 89 44 04 40 88 44 ff 89  7...t21..D.@.D..
00000b0: 44 02 c7 04 10 00 66 8b 1e 5c 7c 66 89 5c 08 66  D.....f..\|f.\.f
00000c0: 8b 1e 60 7c 66 89 5c 0c c7 44 06 00 70 b4 42 cd  ..`|f.\..D..p.B.
00000d0: 13 72 05 bb 00 70 eb 76 b4 08 cd 13 73 0d 5a 84  .r...p.v....s.Z.
00000e0: d2 0f 83 de 00 be 85 7d e9 82 00 66 0f b6 c6 88  .......}...f....
00000f0: 64 ff 40 66 89 44 04 0f b6 d1 c1 e2 02 88 e8 88  d.@f.D..........
0000100: f4 40 89 44 08 0f b6 c2 c0 e8 02 66 89 04 66 a1  .@.D.......f..f.
0000110: 60 7c 66 09 c0 75 4e 66 a1 5c 7c 66 31 d2 66 f7  `|f..uNf.\|f1.f.
0000120: 34 88 d1 31 d2 66 f7 74 04 3b 44 08 7d 37 fe c1  4..1.f.t.;D.}7..
0000130: 88 c5 30 c0 c1 e8 02 08 c1 88 d0 5a 88 c6 bb 00  ..0........Z....
0000140: 70 8e c3 31 db b8 01 02 cd 13 72 1e 8c c3 60 1e  p..1......r...`.
0000150: b9 00 01 8e db 31 f6 bf 00 80 8e c6 fc f3 a5 1f  .....1..........
0000160: 61 ff 26 5a 7c be 80 7d eb 03 be 8f 7d e8 34 00  a.&Z|..}....}.4.
0000170: be 94 7d e8 2e 00 cd 18 eb fe 47 52 55 42 20 00  ..}.......GRUB .
0000180: 47 65 6f 6d 00 48 61 72 64 20 44 69 73 6b 00 52  Geom.Hard Disk.R
0000190: 65 61 64 00 20 45 72 72 6f 72 0d 0a 00 bb 01 00  ead. Error......
00001a0: b4 0e cd 10 ac 3c 00 75 f4 c3 00 00 00 00 00 00  .....<.u........
00001b0: 00 00 00 00 00 00 00 00 7b 1d 0a 00 00 00 80 20  ........{...... 
00001c0: 21 00 83 aa 28 82 00 08 00 00 00 00 20 00 00 aa  !...(....... ...
00001d0: 29 82 8e fe ff ff 00 08 20 00 00 f8 df 04 00 00  )....... .......
00001e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00001f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa  ..............U.

输出结果:

Offset012345671011121314151617
0000000eb6390108ed0bc00b0b800008ed88ec0
0000020fbbe007cbf0006b90002f3a4ea210600
000004000bebe073804750b83c61081fefe0775
0000060f3eb16b402b001bb007cb2808a74018b
00001004c02cd13ea007c0000ebfe0000000000
000012000000000000000000000008001000000
000014000000000fffa9090f6c2807405f6c270
00001607402b280ea797c000031c08ed88ed0bc
00002000020fba0647c3cff740288c252be057c
0000220b441bbaa55cd135a52723d81fb55aa75
00002403783e101743231c0894404408844ff89
00002604402c7041000668b1e5c7c66895c0866
00003008b1e607c66895c0cc744060070b442cd
0000320137205bb0070eb76b408cd13730d5a84
0000340d20f83de00be857de98200660fb6c688
000036064ff40668944040fb6d1c1e20288e888
0000400f4408944080fb6c2c0e80266890466a1
0000420607c6609c0754e66a15c7c6631d266f7
00004403488d131d266f774043b44087d37fec1
000046088c530c0c1e80208c188d05a88c6bb00
0000500708ec331dbb80102cd13721e8cc3601e
0000520b900018edb31f6bf00808ec6fcf3a51f
000054061ff265a7cbe807deb03be8f7de83400
0000560be947de82e00cd18ebfe475255422000
000060047656f6d0048617264204469736b0052
000062065616400204572726f720d0a00bb0100
0000640b40ecd10ac3c0075f4c3000000000000
000066000000000000000007b1d0a0000008020
0000700210083aa2882000800000000200000aa
000072029828efeffff0008200000f8df040000
000074000000000000000000000000000000000
0000760000000000000000000000000000055aa
0001000
分区表最多仅能有四组记录区

每组最多有64 / 4 = 16 bytes

16 bytes = 16 * 8 = 128 bits

每组平均分配大小展示:

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

分区表分成四组的示意图

)

平铺整理后进行每组分区数据结构说明

)

转换为二进制数值,并按照CHS寻址模式规则对柱面和扇区号进行分割重组

CHS模式切割重组:
在MBR分区的一组数据中,8 bit 的磁头单独一个字段标识,6 bit 的扇区和 10 bit 的柱面放在一起作为一个字段
而这个字段在读取时,需要按照下面的规则进行分割和重排

例如:00101000 10000010

先将高字节的低6位切割出来101000,这就是扇区号然后把高字节的高2位,拼接到低字节的高位:“00” + “10000010” = 0010000010,这就是柱面号
MBR分区信息分析结果
BootIndicator
(引导标志)
StartHead
(开始磁头)
StartSector and StartCylinder
(起始扇区和柱面)
PartitionType
(分区类型)
EndHead
(结束磁头)
EndSector and EndCylinder
(结束扇区和柱面)
StartLBA
(LBA寻址模式开始位置)
TotalSector
(总扇区数)
活动分区32磁头0柱面33扇区Linux170磁头130柱面40扇区2,0482,097,152
非活动分区170磁头130柱面41扇区Linux LVM分区超过8G,CHS寻址模式无法表达2,099,20081,786,880
将上面分析的结果,对照fdisk命令输出的结果

查看磁盘详情(扇区作为单位)

[root@jiewli ~]# fdisk -l

磁盘 /dev/sda:42.9 GB, 42949672960 字节,83886080 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000a1d7b

   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200    83886079    40893440   8e  Linux LVM


两个分区的起始扇区和结束扇区数字都和上面的分析结果对应良好,微小的差异,是因为分区1不在柱面边界上结束。

查看磁盘详情(柱面作为单位)

[root@jiewli ~]# fdisk -u=cylinders -l

磁盘 /dev/sda:42.9 GB, 42949672960 字节,83886080 个扇区
Units = 柱面 of 16065 * 512 = 8225280 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000a1d7b

   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1         131     1048576   83  Linux
/dev/sda2             131        5222    40893440   8e  Linux LVM

两个分区的其实柱面和结束柱面数字也和上面的分析结果对应良好,微小的差异,是因为数量从1开始,柱面号索引从0开始,以及实际柱面超出CHS表达范围。

欢迎分享,转载请注明来源:内存溢出

原文地址:http://outofmemory.cn/mo/1298440.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-10
下一篇2022-06-10

发表评论

登录后才能评论

评论列表(0条)

    保存