Linux磁盘分区

自作多情 提交于 2019-12-23 04:07:27

磁盘分区主要有两种分区格式,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字节,GPT中对于扇区的定义使用逻辑区块地址LBA(Logical Block Address)

与MBR只使用第一个512字节的扇区来进行记录不同,GPT使用34个LBA区块来进行处理,默认为512字节。

为了避免过去MBR区块损坏,不能修复,整个磁盘的最后34个LBA用来做前面的LBA的备份。

LBA0(MBR兼容区块)

分为两部分,i)与MBR的446字节相似的区块,存储了第一阶段的启动引导程序。ii)在原来的分区表的位置,存储的是一个特殊的标志符,用来表示该磁盘是GPT格式,

LBA1(GPT表头记录)

​​​​​​​记录了分区表本身的位置和大小,同事记录了备份用的34个GPT分区放置的位置,以及分区表的校验码(CRC32),操作系统可以根据这个校验码来判断GPT分区是否错误,若有错误则用备份来修复。

LBA2-33

实际的分区信息记录,每个分区可以记录4组分区信息,一共4*32=128组,

BIOS

CMOS是记录各项硬件参数且嵌入在主板上面的存储器

BIOS是一个写入到主板的固件(固件就是一个写入到硬件上的一个软件程序)

BIOS就是计算机启动的时候会执行的第一个程序。BIOS会根据用户的设置来取得能够启动的硬盘,并且读取该硬盘第一个扇区的MBR位置。MBR的446个字节中会存储有最基本的启动引导程序。这个启动引导程序会启动内核文件。

流程

i)启动BIOS,认识第一个可启动的设备,读取MBR。

ii)MBR启动其中的引导程序

iii) 引导程序加载内核文件

iv)内核文件启动操作系统

Boot loader

MBR中的启动引导程序,主要任务如下:

i)用户可以选择不同的启动选项,也是多重引导的重要功能

ii)加载内核文件,直接指向可使用的程序区段来启动操作系统

iii)将启动管理功能转交给其它引导程序负责

注:启动引导程序除了可以安装在MBR中,还可以安装在每个分区的启动扇区(boot sector)

i)每个扇区都有自己的启动扇区

ii)图中系统分区为第一第二分区

iii)实际可以启动的内核文件时防止在各分区内(如红色方块就是内核文件)

iv)启动引导程序(boot loader)只会认识自己的系统分区内的可启动的内核文件,以及其他的启动引导程序。

这里的MBR中的引导程序就没有自己的系统分区,就是指向的第一个系统分区。

如第一个MBR中的boot loader指向Windows内核文件或Linux中的启动扇区中的bootl oader

v)启动引导程序可以直接指向另一个管理程序或者间接地将管理权转交给另一个管理程序。

为何安装多重引导(多系统)时,最好先安装windows?

因为Linux安装的时候,可以选择启动引导程序安装在MBR或各别分区的启动扇区,且Linux的启动引导程序可以手动设置选项,可以在启动引导程序里面加入windows启动的选项。

windows在安装的时候,安装程序会主动覆盖掉MBR以及自己所在分区的启动扇区,而且没有让选择选项的功能。

所以先装linux后安装windows会导致MBR中只有windows的启动,如想回复还需要修改MBR,比较麻烦,最好还是先装win。

UEFI


参考:鸟哥的Linux私房菜(第四版)

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!