磁盘分区主要有两种分区格式,MBR和GPT。由于近年来磁盘容量的不断扩大,造成了读写上的一些困扰,甚至有些2TB以上的磁盘分区已经让某些操作系统无法存取,因此又多了一种新的磁盘分区格式GPT。
MBR(Master Boot Record)
早期磁盘中第一个扇区里面含有的重要信息我们称之为MBR。
早期为了兼容Windows的磁盘,使用的是主引导记录的方式来处理启动引导程序与分区表。这两个东西一起存放在第一个扇区。
第一个扇区通常为515字节(原本扇区都设计为512字节)。其中包含:
主引导记录(MBR):可以安装引导程序的地方,通常为446字节。
分区表(partition table):记录整个硬盘分区的状态,64字节。
分区表只有64字节,只能存在四组记录区,一组记录区16个字节,
假设硬盘的设备文件名为/dev/sda时,那么这四个分区的文件名如下:
/dev/sda1
/dev/sda2
/dev/sda3
/dev/sda4
这四组划分信息称为主要分区或扩展分区(Primary 和Extended),分区的最小单位为柱面(所有磁片上的同一个磁道组成一个柱面)。
如何划分多个分区
就是利用扩展分区,如下图
P1为主分区,P2为扩展分区。
扩展分区的目的就是为了使用额外的扇区来记录分区信息,扩展分区本身并不能拿来进行格式化。
若进行格式化,只能对扩展分区内部的分区进行格式化。
这五个切出来的扩展分区,称为逻辑分区。
(这里就联想到了对Ubuntu进行安装的时候,会设置的主分区和逻辑分区,原来逻辑分区都是扩展分区,如/usr,/home,./var等)
其设备文件名如下:
P1:/dev/sda1
P2:/dev/sda2
L1:/dev/sda5
L2:/dev/sda6
L3:/dev/sda7
L4:/dev/sda8
L5:/dev/sda9
这里是因为前四个号码是保留给主分区或扩展分区使用的,逻辑分区只能从5开始,在这里4是没有使用的,sda3就是指整个扩展分区。
例:
这里是一个主分区,一个扩展分区,sdb3和sdb4都是保留下来未使用的。
(再次联想,我之前的Ubuntu安装分区方案就是这样P+E,一个主分区,还有一个交换分区,其他都是扩展分区)
MBR分区表的限制
1)操作系统无法使用2.2TB以上的磁盘容量
2)MBR仅有一个区块,若被破坏,经常无法或很难修复
3)MBR内存放引导程序的区块仅为446字节,无法存储较多的程序代码
GPT(GUID partion table)
之前的磁盘一个扇区为512字节,现在都有了4K扇区的磁盘。为了兼容所有的磁盘,在扇区的定义上,不使用扇区,而使用逻辑区块地址(Logical Block Address,LBA)来处理。GPT就是将所有的磁盘区块以LBA(512字节)来规划,第一个为LBA0。
MBR仅包含一个512字节的扇区,而GPT使用前34个LBA区块来记录分区信息,其中磁盘的最后34个LBA拿来作为备份。
LBA0(MBR兼容区块)
与MBR一样,分为两部分,第一部分为启动引导程序,第二部分原本为分区表的记录,在GPT中仅仅放入了一个特殊标识符,用来表示该磁盘为GPT格式。
LBA1(GPT表头记录)
用来记录分区表本身的位置与大小,还有备份的GPT分区的位置以及分区表的校验码(CRC32),操作系统可以根据这个校验码来判断GPT是否正确,若有错误使用记录区来获取备份的GPT用来恢复GPT的正确运行。
LBA2-34(实际记录分区信息)
从每个LBA2区块开始,每个LBA记录4组分区记录,因此默认可以记录4*32=128组的分区记录。
注:GPT分区没有所谓的主分区,扩展分区以及逻辑分区的概念,因为每组记录都是单独存在的,所以每个都可以视为主要分区,每一个分区都可以用来格式化使用。
BIOS
CMOS记录各项硬件参数且嵌入到主板上的存储器
BIOS是一个写入到主板的一个固件(固件就是一个写入到硬件的一个软件程序)
BIOS是启动计算机时候,启动的第一个程序。
启动流程
i)BIOS启动,认识第一个可启动的设备,在其中找到起到一个扇区的主引导记录块MBR;
ii)MBR是第一个可启动设备的第一个扇区的主引导记录块,内含启动引导程序;
iii)启动引导程序加载内核文件;
iv)内核文件开启操作系统。
启动引导程序(Boot loader)
i)提供不同的启动选项,也就是多重引导的功能;
ii)直接加载内核文件,启动操作系统;
iii)或者将启动管理功能转交给其他引导程序。
启动引导程序除了可以安装在MBR之外,还可以安装在每个分区的启动扇区
如图,MBR会提供两个选项,第一个用来加载windows,第二个用来将启动管理功能交给第二个扇区的启动扇区的引导程序。
为什么最好先安装windows再安装Linux?
Linux安装的时候,可以选择将启动 引导程序安装在MBR或者各别分区的启动扇区,而且Linux的启动引导程序可以选择选项(M1或M2)
而Windows安装的时候,不提供选择选项的功能,会直接覆盖掉MBR以及自己所在分区的启动扇区,没有选择的机会。
UEFI
BIOS其实不懂GPT,需要GPT提供兼容模式,才能读写这个磁盘,为了解决这个问题,使用UEFI(Unified extensible Fimware Interface)统一可扩展固件接口。
由于黑客会借由BIOS启动阶段来破坏系统,并取得系统的控制权,因此UEFI加入了一个安全启动的功能——Secure boot功能,表明即将启动的操作系统必须被UEFI验证,否则无法启动。因此有时候需要将Secure boot关闭才能顺利进入到Linux。
参考:鸟哥的Linux私房菜(第四版)