linux文件系统寻址,Linux 文件系统(一) - 磁盘分区物理结构

主引导记录(MBR,Master Boot Record)

MBR最开始为IBM为了兼容磁盘和移动磁盘而设计的一种引导扇区的格式。MBR位于磁盘的第一个扇区,这个扇区保存了开机引导程序、磁盘分区信息等。系统启动时BIOS会读取MBR的数据,然后索引到系统启动程序上进行启动。主引导扇区是先于系统起作用的,也就是说主引导扇区的结构不分系统、不分磁盘。

MBR并不支持无分区(non-partitioned)的存储设备,如软盘等。支持这类设备的主引导记录为VBR(Volume Boot Record)。

1f51b5b6d8cfd921e99ddb2295da7894.png

MBR结构

MBR位于硬盘第0柱面、0磁头、1扇区,共计512 bytes。 从MBR的结构图可以看出,MBR包含了3个部分:

主引导程序(Master Boot Code)

主引导程序占446 bytes,存放引导程序信息。这个区域主要功能有提供系统启动选项(多系统的时候选择一个系统启动)、指向磁盘可以启动的内核程序、交由系统内核加载并启动系统。

分区表(Partition Table)

分区表占64 bytes。分区表存放磁盘分区的信息,分区表最多可以记录4个分区的信息,每个分区信息16 Byte,记录了分区的磁盘起始位置、大小、文件系统类型等信息。

引导标识(Boot Signature)

最后的2 bytes被设计成了引导标识,引导标识可以理解为一个魔数,占2 bytes(取值为0x55AA)。引导标识是表示磁盘有没有被初始化的标识,如果这个标识错误,则会被认为磁盘不支持MBR,可能会选择其他的磁盘分区方案进行解析。

为了保护MBR也为了后面可以扩展,通常第0柱面、1磁头共计64个扇区会预留出来,真正的数据分区一般是从63(0~63)后面开始的。63扇区也是LBA地址模式的偏移量的开始位置。

分区表(Partition Table)

分区表存储了磁盘的分区信息,大小为64 bytes,分成4个分区项(Partition Entry),每个分区项16 bytes。

75beea8500948e7358e68778f62e9c92.png

分区表结构

每个分区项包含了如下信息:引导指示符 (1 bytes):标识单前分区是否活动分区(Active Partition)。

分区开始地址(3 bytes) : 用CHS(Cylinder-Head-Sector,磁柱-磁盘-扇区)地址格式记录。

分区类型 (1 bytes):分区的寻找类型,CHS或LBA(Logical Block Addressin,逻辑区块寻址)。

分区结束地址(3 bytes):用CHS地址格式记录。

分区开始地址(4 bytes):用LBA地址格式记录。

分区大小(4 bytes): 分区大小(单位:扇区)。

这个分区项里面出现了两个分区的开始地址,两个地址有什么区别?到底哪个才是分区真正开始地址?

CHS地址模式只占用了3个bytes,最多定位空间为2^24 * 512 bytes = 8G的,显然这个空间大小是无法满足单前磁盘大小的。所以引入了LBA地址模式,占用4个bytes,将磁盘空间大小扩大2^32 * 512 bytes = 2T。MBR模式两种地址模式通过分区类型来选择。

按MBR模式,磁盘超过2T就无法表示了。因此随着大容量磁盘的出现,MBR分区也逐渐被GTP(GUID Partition Table,全局唯一标识分区表)分区方案所取代。

扩展引导记录(EBR,Extended Boot Record)

上文提到了分区表只有4个分区项目,那我们平时见到5、6个分区是如何实现的?

f23a4fdae5d601ef90f6d1f1553d623a.png

磁盘结构图

为了能过支持超过4个分区,引入了扩展分区的概念。引入了扩展分区的概念后,4个分区项还是只有4个,只是每个分区项其实分成了两种功能:一种是指向一个实实在在的数据分区,我们称之为主分区(Primary Partition),一种是指向一个EBR,我们称之为扩展分区(Extended Partition)。通过扩展分区指定的分区称之为逻辑分区(Logical Partition)。扩展分区是用链式结构串起来,理论上只要磁盘大小或系统索引支持,可以将磁盘划分为无数个逻辑分区。

主分区和扩展分区加起来不能超过4个,而且4个分区项里面必须有一个主分区,扩展分区只能占1个。扩展分区里面必须划分逻辑分区。

EBR的结构跟MBR的结构一模一样,也是由三个部分组成:

主引导程序(Master Boot Code)(446 bytes):一般情况下是不使用的,用0填充。在一些磁盘解决方案里面可能会用到。

分区表(Partition Table)(64 bytes):分区表,记录逻辑分区的信息。

引导标识(Boot Signature)(2 bytes):分区标识,取值为0x55AA。

EBR分区表结构跟MBR的分区表结构一模一样,但是在EBR里面,4个分区项的作用如下:

第一个分区项:指向该EBR的一个逻辑分区。

第二个分区项:指向下一个EBR(如果有的话)。

第三个分区项:留空。

第四个分区项:留空。

具体到每个分区前面还有一个引导扇区(Boot Sector)记录分区的详细信息,如文件系统类型、分区大小、目录数等必要的信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值