码迷,mamicode.com
首页 > 其他好文 > 详细

磁盘分区

时间:2020-05-22 19:48:03      阅读:80      评论:0      收藏:0      [点我收藏+]

标签:软件程序   开机流程   info   固件   标签   界面   重要   通过   linu   

分区
1、分区的概念
分区有主要分区和延伸分区2种。
(1)主要(Primary)分区:由第一扇区(一般512Bytes大小)中的分区表(partition table,总共64Bytes)决定的分区都是主要分区,最多可以分成4个主要分区。

以windows为例,一块磁盘是可以被分成多个分区的(partition),以旧有的Windows观点来看,你可能会有一颗磁盘并且将他分区成为C:, D:,E:盘对吧!那个C, D, E就是分区(partition)啰。
Linux的设备都是以文件的型态存在,那分区的文件名又是什么?
磁盘连接的方式与设备文件名的关系(以Linux为例)
人计算机常见的磁盘接口有两种, 分别是SATA与SAS接口,还有USB接口,目前(2015)的主流是SATA接口。
由于SATA/USB/SAS等磁盘接口都是使用SCSI模块来驱动的, 因此这些接口的磁盘设备文件名都是/dev/sd[a-p]的格式。 所以SATA/USB接口的磁盘根本就没有一定的顺序,那如何决定他的设备文件名呢? 这个时候就得要根据Linux核心侦测到磁盘的顺序了!
例题:
如果你的PC上面有两个SATA磁盘以及一个USB磁盘,而主板上面有六个SATA的插槽。
这两个SATA磁盘分别安插在主板上的SATA1, SATA5插槽上, 请问这三个磁盘在Linux中的设备文件名为何?
答:由于是使用侦测到的顺序来决定设备文件名,并非与实际插槽代号有关,因此设备的文件名如下:
1. SATA1插槽上的文件名:/dev/sda
2. SATA5插槽上的文件名:/dev/sdb
3. USB磁盘(开机完成后才被系统捉到):/dev/sdc


(2)延伸(Extended)分区:由第一扇区(一般512Bytes大小)中的分区表(partition table,总共64Bytes)决定,并且分区表中被标记为延伸标签的就是延伸分区。

延伸分区与主要分区的区别是:
①延伸分区在第一扇区中的分区表中被标记了延伸标签;
②一个延伸分区可以再划分为多个逻辑分区,再划分逻辑分区的信息存在本延伸分区中;
③延伸分区不支持格式化。

(3)逻辑分区:由延伸分区继续切出来的分区,就被称为逻辑分区(logical partition)

 

2、分区表和分区表的格式
那么分区表又是啥?
其实你刚刚拿到的整颗硬盘就像一根原木,你必须要在这根原木上面切割出你想要的区段, 这个区段才能够再制作成为你想要的家具!
如果没有进行切割,那么原木就不能被有效的使用。 同样的道理,你必须要针对你的硬盘进行分区,这样硬盘才可以被你使用的!

分区表有MSDOS(MBR) 与 GPT 这两种格式。
MSDOS(MBR) 与 GPT 磁盘分区表(partition table):
早期磁盘第一个扇区里面含有的重要信息我们称为MBR (Master Boot Record) 格式,但是由于近年来磁盘的容量不断扩大,造成读写上的一些困扰, 甚至有些大于 2TB 以上的磁盘分区已经让某些操作系统无法存取。
因此后来又多了一个新的磁盘分区格式,称为 GPT (GUID partition table)! 这两种分区格式与限制不太相同啦!

(1)MSDOS (MBR) 分区表格式与限制:
早期的 Linux 系统为了相容于 Windows 的磁盘,因此使用的是支持 Windows 的MBR(Master Boot Record, 主要开机纪录区) 的方式来处理开机管理程序与分区表!而开机管理程序纪录区与分区表则通通放在磁盘的第一个扇区, 这个扇区通常是 512Bytes 的大小 (旧的磁盘扇区都是 512Bytes 喔!),所以说,第一个扇区 512Bytes 会有这两个数据:
1)主要开机记录区(Master Boot Record, MBR):可以安装开机管理程序的地方,有446Bytes。
2)分区表(partition table):记录整颗硬盘分区的状态,有64 Bytes。
由于分区表所在区块仅有64 Bytes容量,因此最多仅能有四组记录区,每组记录区记录了该区段的启始与结束的柱面号码。
若将硬盘以长条形来看,然后将柱面以直条图来看,那么那64Bytes的记录区段有点像下面的图示:

假设上面的硬盘设备文件名为/dev/sda时,那么这四个分区在Linux系统中的设备文件名如下所示, 重点在于文件名后面会再接一个数字,这个数字与该分区所在的位置有关喔!
P1:/dev/sda1
P2:/dev/sda2
P3:/dev/sda3
P4:/dev/sda4
上图中我们假设硬盘只有400个柱面,共分区成为四个分区,第四个分区所在为第301到400号柱面的范围。
当你的操作系统为Windows时,那么第一到第四个分区的代号应该就是C, D, E, F。
当你有数据要写入F盘时, 你的数据会被写入这颗磁盘的301~400号柱面之间的意思。
由于分区表就只有64 Bytes而已,最多只能容纳四笔分区的记录, 这四个分区的记录被称为主要(Primary)或延伸(Extended)分区。
根据上面的图示与说明,我们可以得到几个重点信息:
1)其实所谓的“分区”只是针对那个64 Bytes的分区表进行设置而已!
2)硬盘默认的分区表仅能写入四组分区信息
3)这四组分区信息我们称为主要(Primary)或延伸(Extended)分区
4)分区的最小单位“通常”为柱面(cylinder)
5)当系统要写入磁盘时,一定会参考磁盘分区表,才能针对某个分区进行数据的处理


(2)GPT 磁盘分区表
因为过去一个扇区大小就是 512Bytes 而已,不过目前已经有 4K 的扇区设计出现!为了相容于所有的磁盘,因此在扇区的定义上面, 大多会使用所谓的逻辑区块位址(Logical Block Address, LBA)来处理。GPT 将磁盘所有区块以此 LBA(默认为 512Bytes 喔!) 来规划,而第一个 LBA 称为 LBA0 (从 0 开始编号)。
与 MBR 仅使用第一个 512Bytes 区块来纪录不同, GPT 使用了 34 个 LBA 区块来纪录分区信息!同时与过去 MBR 仅有一的区块,被干掉就死光光的情况不同, GPT 除了前面 34 个LBA 之外,整个磁盘的最后 33 个 LBA 也拿来作为另一个备份!这样或许会比较安全些吧!
详细的结构有点像下面的模样:

LBA0 (MBR 相容区块)
LBA1 (GPT 表头纪录)
LBA2-33 (实际纪录分区信息处)
从 LBA2 区块开始,每个 LBA 都可以纪录 4 笔分区纪录,所以在默认的情况下,总共可以有 432 = 128 笔分区纪录喔!因为每个 LBA 有 512Bytes,因此每笔纪录用到 128Bytes 的空间,除了每笔纪录所需要的识别码与相关的纪录之外,GPT 在每笔纪录中分别提供了 64bits 来记载开始/结束的扇区号码,因此,GPT 分区表对於单一分区来说,他的最大容量限制就会在“ 264 512Bytes = 263 1KBytes = 233TB = 8 ZB ”,要注意 1ZB= 230TB 啦! 你说有没有够大了?
GPT 分区已经没有所谓的主、延伸、逻辑分区的概念,既然每笔纪录都可以独立存在, 当然每个都可以视为是主分区!每一个分区都可以拿来格式化使用喔!


3、如何进行磁盘分区?
盘片上面又可细分出扇区(Sector)与磁道(Track)两种单位,其中扇区的物理量设计有两种大小,分别是 512Bytes 与 4KBytes。
所有盘片的同一个磁道我们称为柱面 (Cylinder), 通常那是文件系统的最小单位,也就是分区的最小单位啦!

(1)MSDOS (MBR) 分区表格式——分出4个主要分区,即P+P+P+P分区模式

技术图片

 

 


(2)MSDOS (MBR) 分区表格式——分出1个主要分区、1个延伸分区(再细分成5个逻辑分区),即P+E(L+L+L+L+L)分区模式
由于P(primary)+E(extended)最多只能有四个,其中E最多只能有一个。

技术图片

 

 

(3)GPT分区表格式——分成n个主要分区。

技术图片

 

 


4、目前的 BIOS 与 UEFI分别是啥?

开机流程中的 BIOS 与 UEFI 开机检测程序
开机程序
前的主机系统在载入硬件驱动方面的程序,主要有早期的 BIOS 与新的 UEFI 两种机制,我们分别来谈谈啰!
BIOS 搭配 MBR/GPT 的开机流程
在计算机概论里面我们有谈到那个可爱的BIOS与CMOS两个东西。
CMOS是记录各项硬件参数且嵌入在主板上面的储存器。
BIOS则是一个写入到主板上的一个固件(再次说明, 固件就是写入到硬件上的一个软件程序)。这个BIOS就是在开机的时候,计算机系统会主动执行的第一个程序了!
接下来BIOS会去分析计算机里面有哪些储存设备,我们以硬盘为例,BIOS会依据使用者的设置去取得能够开机的硬盘, 并且到该硬盘里面去读取第一个扇区的MBR位置。 MBR这个仅有446 Bytes的硬盘容量里面会放置最基本的开机管理程序, 此时BIOS就功成圆满,而接下来就是MBR内的开机管理程序的工作了。
这个开机管理程序的目的是在载入(load)核心文件, 由于开机管理程序是操作系统在安装的时候所提供的,所以他会认识硬盘内的文件系统格式,因此就能够读取核心文件, 然后接下来就是核心文件的工作,开机管理程序与 BIOS 也功成圆满,将之后的工作就交给大家所知道的操作系统啦!
简单的说,整个开机流程到操作系统之前的动作应该是这样的:
1. BIOS:开机主动执行的固件,会认识第一个可开机的设备;
2. MBR:第一个可开机设备的第一个扇区内的主要开机记录区块,内含开机管理程序;
3. 开机管理程序(boot loader):一支可读取核心文件来执行的软件;
4. 核心文件:开始操作系统的功能...

第二点要注意,如果你的分区表为 GPT 格式的话,那么 BIOS 也能够从 LBA0 的 MBR 相容区块读取第一阶段的开机管理程序码, 如果你的开机管理程序能够认识 GPT 的话,那么使用BIOS 同样可以读取到正确的操作系统核心喔!换句话说, 如果开机管理程序不懂 GPT ,例如 Windows XP 的环境,那自然就无法读取核心文件,开机就失败了!

UEFI BIOS 搭配 GPT 开机的流程
我们现在知道 GPT 可以提供到 64bit 的寻址,然后也能够使用较大的区块来处理开机管理程序。但是 BIOS 其实不懂 GPT 耶!还得要通过 GPT 提供相容模式才能够读写这个磁盘设备~而且 BIOS 仅为 16 位的程序,在与现阶段新的操作系统接轨方面有点弱掉了! 为了解决这个问题,因此就有了 UEFI (Unified Extensible Firmware Interface) 这个统一可延伸固件界面的产生。
UEFI 主要是想要取代 BIOS 这个固件界面,因此我们也称 UEFI 为 UEFI BIOS 就是了。
UEFI 使用 C 程序语言,比起使用组合语言的传统 BIOS 要更容易开发!
与传统的 BIOS 不同,UEFI 简直就像是一个低阶的操作系统

 

延伸:
盘片的物理知识:
1、扇区(Sector):是最小的物理储存单位,且依据磁盘设计的不同,目前主要有 512Bytes与 4K 两种格式;
2、柱面(Cylinder):将扇区组成一个圆,那就是柱面;
早期的分区主要以柱面为最小分区单位,现在的分区通常使用扇区为最小分区单位(每个扇区都有其号码喔,就好像座位一样);
3、磁盘分区表:主要有两种格式,一种是限制较多的 MBR 分区表,一种是较新且限制较少的GPT 分区表。
4、MBR 分区表中,第一个扇区最重要,里面有:(1)主要开机区(Master boot record,MBR)及分区表(partition table), 其中 MBR 占有 446 Bytes,而 partition table 则占有 64 Bytes。
5、GPT 分区表除了分区数量扩充较多之外,支持的磁盘容量也可以超过 2TB。

那么是否每个扇区都一样重要呢?
其实整颗磁盘的第一个扇区特别的重要,因为他记录了整颗磁盘的重要信息!
由于第一个扇区所记录的分区表与MBR是这么的重要,几乎只要读取硬盘都会先由这个扇区先读起。
因此,如果整颗硬盘的第一个扇区(就是MBR与partition table所在的扇区)物理实体坏掉了,那这个硬盘大概就没有用了! 因为系统如果找不到分区表,怎么知道如何读取柱面区间呢?

 

磁盘分区

标签:软件程序   开机流程   info   固件   标签   界面   重要   通过   linu   

原文地址:https://www.cnblogs.com/andy9468/p/12938972.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!