2.2磁盘分区

news2024/11/17 17:48:32

2.2 磁盘分区

        一个磁盘可以被划分为多个分区,有一个磁盘并且将他们划分为C;D;E盘,那个C,D,E就是分区(partition)。

2.2.1 磁盘连接的方式与设备文件名的关系

        个人计算机常见的磁盘接口有两种,分别是SATA与SAS接口,目前(2015)的主流是SATA接口。不过更老旧的计算机则有可能是已经不再流行的IDE界面。以前的IDE界面与SATA界面在Linux的磁盘代号并不相同,不过近年来为了统一处理,大部分Linux distribution已经将IDE界面的磁盘文件名也仿真成跟SATA一样。

        正常的实体机器大概使用的都是 /dev/sd[a-] 的磁盘文件名,至于虚拟机环境下面,为了加速,可能就会使用 /dev/vd[a-p] 这种设备文件名。因此在实际处理你的系统时,可能得要了解为啥会有两种不同磁盘文件名的原因才好。

        再以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

        接下来了解一下磁盘的组成,因为现今磁盘的分区与他物理的组成很有关系。我们在计算机概论谈过磁盘的组成主要有盘片、机械手臂、磁头与主轴马达所组成, 而数据的写入其实是在盘片上面。盘片上面又可细分出扇区(Sector)与磁道(Track)两种单位,其中扇区的物理量设计有两种大小,分别是 512Bytes 与 4KBytes。假设磁盘只有一个盘片,那么盘片有点像下面这样:

                                     图2.2.1盘片组成示意图

        那么是否每个扇区都一样重要呢?其实整颗磁盘的第一个扇区特别的重要,因为他记录了整颗磁盘的重要信息。早期磁盘第一个扇区里面含有的重要信息我们称为MBR (Master BootRecord)格式,但是由于近年来磁盘的容量不断扩大,造成读写上的一些困扰,甚至有些大于2TB 以上的磁盘分区已经让某些操作系统无法存取。因此后来又多了一个新的磁盘分区格式,称为GPT(GUID partition table)。这两种分区格式与限制不太相同。

        分区表就是针对硬盘进行分区,这样硬盘才可以被你使用。

2.2.2 MSDOS(MBR)与GPT磁盘分区表(partition table)

        通常磁盘可能有多个盘片,所有盘片的同一个磁道我们称为柱面 (Cylinder), 通常那是文件系统的最小单位,也就是分区的最小单位。为什么说“通常”呢?因为近来有 GPT 这个可达到 64bit 纪录功能的分区表, 现在我们甚至可以使用扇区 (sector) 号码来作为分区单位。

        所以主流的分区表有两种格式,对此来谈谈这两种分区表格式:

MSDOS (MBR) 分区表格式与限制

        早期的 Linux 系统为了相容于 Windows 的磁盘,因此使用的是支持 Windows 的MBR(Master Boot Record,主要开机纪录区)的方式来处理开机管理程序与分区表!而开机管理程序纪录区与分区表则通通放在磁盘的第一个扇区,这个扇区通常是 512Bytes 的大小(旧的磁盘扇区都是512Bytes),所以说,第一个扇区 512Bytes 会有这两个数据:

主要开机记录区(Master Boot Record, MBR):可以安装开机管理程序的地方,有446Bytes

分区表(partition table):记录整颗硬盘分区的状态,有64 Bytes

        由于分区表所在区块仅有64 Bytes容量,因此最多仅能有四组记录区,每组记录区记录了该区段的启始与结束的柱面号码。若将硬盘以长条形来看,然后将柱面以直条图来看,那么那64Bytes的记录区段有点像下面的图示:

 

                                                        图2.2.2 磁盘分区表的作用示意图 

        假设上面的硬盘设备文件名为/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.当系统要写入磁盘时,一定会参考磁盘分区表,才能针对某个分区进行数据的处理

关于分区,主要考虑的是:

1. 数据的安全性:因为每个分区的数据是分开的!所以,当你需要将某个分区的数据重整时,例如你要将计算机中Windows的C 盘重新安装一次系统时, 可以将其他重要数据移动到其他分区,例如将邮件、桌面数据移动到D盘去,那么C盘重灌系统并不会影响到D盘。所以善用分区,可以让你的数据更安全。

2. 系统的性能考虑:由于分区将数据集中在某个柱面的区段,例如上图当中第一个分区位于柱面号码1~100号,如此一来当有数据要读取自该分区时,磁盘只,会搜寻前面1~100的柱面范围,由于数据集中了,将有助于数据读取的速度与性能。所以说分区是很重要的。

MBR 主要分区、延伸分区与逻辑分区的特性我们作个简单的定义:主要分区与延伸分区最多可以有四笔(硬盘的限制)

延伸分区最多只能有一个(操作系统的限制)

逻辑分区是由延伸分区持续切割出来的分区;

能够被格式化后,作为数据存取的分区为主要分区与逻辑分区。延伸分区无法格式化;

逻辑分区的数量依操作系统而不同,在Linux系统中SATA硬盘已经可以突破63个以上的分区限制;

        事实上,分区是个很麻烦的东西,因为他是以柱面为单位的“连续”磁盘空间,且延伸分区又是个类似独立的磁盘空间,所以在分区的时候得要特别注意。我们举下面的例子来解释一下好了:

例题:在Windows操作系统当中,如果你想要将D与E盘整合成为一个新的分区,而如果有两种分区的情况如下图所示, 图中的特殊颜色区块为D与E盘的示意,请问这两种方式是否均可将D与E整合成为一个新的分区?

            

                                                 图2.2.4、磁盘空间整合示意图

        上图可以整合:因为上图的D与E同属于延伸分区内的逻辑分区,因此只要将两个分区删除,然后再重新创建一个新的分区, 就能够在不影响其他分区的情况下,将两个分区的容量整合成为一个。

        下图不可整合:因为D与E分属主分区与逻辑分区,两者不能够整合在一起。除非将延伸分区破坏掉后再重新分区。 但如此一来会影响到所有的逻辑分区,要注意的是:如果延伸分区被破坏,所有逻辑分区将会被删除。 因为逻辑分区的信息都记录在延伸分区里面。

        由于第一个扇区所记录的分区表与MBR是这么的重要,几乎只要读取硬盘都会先由这个扇区先读起。因此,如果整颗硬盘的第一个扇区(就是MBR与partition table所在的扇区)物理实体坏掉了,那这个硬盘大概就没有用了。

例题:如果我想将一颗大硬盘“暂时”分区成为四个partitions,同时还有其他的剩余容量可以让我在未来的时候进行规划, 我能不能分区出四个Primary?若不行,那么你建议该如何分区?

答:由于Primary+Extended最多只能有四个,其中Extended最多只能有一个,这个例题想要分区出四个分区且还要预留剩余容量, 因此P+P+P+P的分区方式是不适合的。因为如果使用到四个P,则即使硬盘还有剩余容量, 因为无法再继续分区,所以剩余容量就被浪费掉了。

        假设你想要将所有的四笔记录都花光,那么P+P+P+E是比较适合的。所以可以用的四个partitions有3个主要及一个逻辑分区, 剩余的容量在延伸分区中。

        如果你要分区超过4个以上时,一定要有Extended分区,而且必须将所有剩下的空间都分配给Extended,然后再以logical的分区来规划Extended的空间。另外,考虑到磁盘的连续性,一般建议将Extended的柱面号码分配在最后面的柱面内。

        MBR 分区表除了上述的主分区、延伸分区、逻辑分区需要注意之外,由于每组分区表仅有16Bytes 而已,因此可纪录的信息真的是相当有限的!

所以,在过去 MBR 分区表的限制中经常可以发现如下的问题:

操作系统无法抓取到 2.2T 以上的磁盘容量。

MBR 仅有一个区块,若被破坏后,经常无法或很难救援。

MBR 内的存放开机管理程序的区块仅446Bytes,无法容纳较多的程序码。

GUID partition table, GPT 磁盘分区表[1]

        因为过去一个扇区大小就是 512Bytes 而已,不过目前已经有 4K 的扇区设计出现!为了相容于所有的磁盘,因此在扇区的定义上面, 大多会使用所谓的逻辑区块位址(Logical BlockAddress, LBA)来处理。GPT 将磁盘所有区块以此 LBA(默认为 512Bytes) 来规划,而第一个 LBA 称为 LBA0 (从 0 开始编号)。

        与 MBR 仅使用第一个 512Bytes 区块来纪录不同, GPT 使用了 34 个 LBA 区块来纪录分区信息!同时与过去 MBR 仅有一的区块,被干掉就死光光的情况不同, GPT 除了前面 34 个LBA 之外,整个磁盘的最后 33 个 LBA 也拿来作为另一个备份,这样会比较安全。详细的结构如图下:

                         

                                              图2.2.7 GPT分区表的结构示意图

上述图示的解释说明如下:

LBA0 (MBR 相容区块)

        与 MBR 模式相似的,这个相容区块也分为两个部份,一个就是跟之前 446 Bytes 相似的区块,储存了第一阶段的开机管理程序! 而在原本的分区表的纪录区内,这个相容模式仅放入一个特殊标志的分区,用来表示此磁盘为 GPT 格式之意。而不懂 GPT 分区表的磁盘管理程序, 就不会认识这颗磁盘,除非用户有特别要求要处理这颗磁盘,否则该管理软件不能修改此分区信息,进一步保护了此磁盘。

 LBA1 (GPT 表头纪录)

        这个部份纪录了分区表本身的位置与大小,同时纪录了备份用的 GPT 分区(就是前面谈到的在最后 34 个 LBA 区块)放置的位置,同时放置了分区表的检验机制码(CRC32),操作系统可以根据这个检验码来判断 GPT 是否正确。若有错误,还可以通过这个纪录区来取得备份的GPT(磁盘最后的那个备份区块)来恢复 GPT 的正常运行。

LBA2-33(实际纪录分区信息处)

        从 LBA2 区块开始,每个 LBA 都可以纪录 4 笔分区纪录,所以在默认的情况下,总共可以有 432 = 128 笔分区纪录。因为每个 LBA 有 512Bytes,因此每笔纪录用到 128Bytes 的空间,除了每笔纪录所需要的识别码与相关的纪录之外,GPT在每笔纪录中分别提供了64bits来记载开始/结束的扇区号码,因此,GPT 分区表对於单一分区来说,他的最大容量限制就会在“ 264 512Bytes = 263 1KBytes = 233TB = 8 ZB ”,要注意1ZB= 230TB,所以足够大。

        现在 GPT 分区默认可以提供多达 128 笔纪录,而在 Linux 本身的核心设备纪录中,针对单一磁盘来说,虽然过去最多只能到达 15 个分区,不过由于 Linux kernel 通过 udev 等方式的处理,现在 Linux 也已经没有这个限制在了。此外,GPT 分区已经没有所谓的主、延伸、逻辑分区的概念,既然每笔纪录都可以独立存在, 当然每个都可以视为是主分区,每一个分区都可以拿来格式化使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/485880.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

精品:Stimulsoft Forms 2023.2.2

Stimulsoft Forms 是一种用于创建、编辑、填写、发布、分发交互式表单和收集结果的工具。我们的产品可嵌入到应用程序中,并允许您创建各种自定义填充模板。丰富的功能使模板具有真正的交互性。用户会收到 PDF 格式的可填写表格,他们可以在任何支持此格式…

ZooKeeper安装与配置集群

简介: ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布…

ChatGPT初尝试——合并Excel表格【AI版】

ChatGPT真的能提升生产力吗?【AI版】 无意间的刷到的视频一、提需求二、ChatGPT用Python编写代码三、意外的解释四、ChatGPT改用Java编写代码五、GPT第二次生成Java代码尾巴 无意间的刷到的视频 晚上在家刷视频,突然看到一个在讲关于AI编程的视频&#…

网络安全:网络信息安全的概述.

网络安全:网络信息安全的概述 网络信息安全是一门涉及计算机科学,网络技术,通信技术、密码技术、信息安全技术、应用数学、数论、信息论等多种学科的综合性学科。 它主要是指网络系统的硬件、软件及其系统中的数据受到保护,不受…

深度学习 -- Pytorch学习 数据集API Dataset与DataLoader 重载鸢尾花数据集

前言 在模型训练的步骤中,数据的部分非常重要,它的过程主要分为数据收集、数据划分、数据读取、数据预处理。 数据收集的有原始样本和标签(Img,label) 数据集的划分需要分为训练集、验证集、测试集。 训练集负责训练模型,验证集…

C++基础知识快速入门

目录 一, 命名空间 1.1命名空间使用命名空间中成员该如何使用呢? 1.2 命名空间其他2种使用方式: 1. using 将其中一个成员引入 2. using namespace 二,C输入&输出 (简单运用) 2. 1 头文件 2. 2 cout 与 …

2023年软件测试常见面试题100%问必背全套教程

随着数字化时代的到来,软件测试越来越受到重视。在未来的几年里,软件测试将继续成为信息技术领域中的热门职业之一。如果你是一名正在寻找或准备进入软件测试行业的人,那么这套常见面试题全套教程对你来说会非常有用。 这套教程旨在帮助你了…

MySQL主从同步配置

Mysql 主从同步原理 就是基于数据库里面的那个 binlog 文件进行数据同步 具体步骤: step1:master将数据改变记录到二进制日志(binary log)中。step2: 当slave上执行 start slave 命令之后,slave会创建一个…

Unity 后处理(Post-Processing) -- (2)创建后处理配置文件

通过前面一小节,我们初步认识了后处理是什么,在Unity中简单的试了试后处理的效果。本节我们来创建一个我们自己的后处理配置文件(post-processing profile)。 一个后处理配置文件包含了一系列为了达到特定视觉效果的后处理效果的配…

C51 - DS18B20

Thermometer 1> 实验概述2> 硬件设计3> DS18B204> 单总线(1-Wire)通讯协议4.1> 复位时序4.2> 写-DS18B20时序4.3> 读-DS18B20时序4.4> 命令 5> 程序设计5.1> 编程思路5.2> 代码实现 6> 联调测试 1> 实验概述 实现…

Redis集合底层实现原理

目录 本章重点简单动态字符串SDS集合底层实现原理zipListlistPackskipListquickListKey 与Value中元素的数量 本章重点 掌握Redis简单动态字符串了解Redis集合底层实现原理 简单动态字符串SDS SDS简介 我们Redis中无论是key还是value其数据类型都是字符串.我们Redis中的字符…

从入门到精通:30天速成黑客教程到底有多狠?

首先我谈下对黑客&网络安全的认知,其实最重要的是兴趣热爱,不同于网络安全工程师,他们大都是培训机构培训出来的,具备的基本都是防御和白帽子技能,他们绝大多数的人看的是工资,他们是为了就业而学习&am…

ShardingSphere学习笔记

目录 1. 概述 1.1 分库分表是什么 1.2 分库分表方式 1.2.1 垂直分表 1.2.2 垂直分库 1.2.3 水平分库 1.2.4 水平分表 1.3 小结 1.3 分库分表带来的问题 1.3.1 事务一致性问题 1.3.2 跨节点关联查询 1.3.3 跨节点分页、排序函数 1.3.4 主键避重 1.3.5 公共表 2. …

JavaSE基础(二)—— 类型转换、运算符、键盘录入

目录 一、类型转换 1. 自动类型转换 1.1 自动类型转换的底层原理: ​1.2 自动类型转换的其他形式​编辑 2. 表达式的自动类型转换 3. 强制类型转换 3.1 强制类型转换底层原理​编辑 3.2 注意事项 二、运算符 1. 算数运算符 1.1 案例:数值拆分…

【群智能算法】一种改进的哈里斯鹰优化算法 IHHO算法[1]【Matlab代码#17】

文章目录 1. 原始HHO算法2. 改进的哈里斯鹰优化算法2.1 动态自适应逃逸能量E2.2 拉普拉斯交叉算子2.3 动态自适应权重 3. 部分代码展示4. 仿真图展示5. 资源获取 1. 原始HHO算法 详细介绍此处略,可参考HHO算法介绍 2. 改进的哈里斯鹰优化算法 2.1 动态自适应逃逸…

【算法】刷题中的位运算

作者:指针不指南吗 专栏:算法篇 🐾人类做题的过程,其实是暴搜的过程🐾 文章目录 1.位运算概述2.位运算符3.位运算应用3.1整数的奇偶性判断3.2有关 2 的幂的应用3.3lowbit(x)返回x的最后一位13.4二进制数中1的个数3.5求…

6.S081——陷阱部分(一篇读懂Xv6系统调用)——xv6源码完全解析系列(5)

0.briefly speaking 这篇博客将要开始尝试阅读和研究与Xv6陷阱机制相关的代码,主要有以下文件,最重要的是结合Xv6 book将Xv6处理陷阱的相关逻辑和流程弄透。在Xv6的语境中所谓陷阱的触发有以下三种情况: 系统调用严重错误(比如除…

设备仪器仪表盘读数识别算法 yolov5

设备仪器仪表盘读数识别系统基于YoLov5网络模型分析技术,设备仪器仪表盘读数识别算法模型自动识别指针型仪表读数。Yolo算法采用一个单独的CNN模型实现end-to-end的目标检测,核心思想就是利用整张图作为网络的输入,直接在输出层回归 bounding…

【Maven笔记2】Maven安装与配置

1、前置准备 maven是使用Java语言进行开发的,因此在安装maven之前,先需要有java运行环境。如何确认本机是否安装了JDK环境呢?打开终端运行如下命令: java -version如下图显示说明已经安装了JDK环境。 备注:如何安装J…

Intel Xeon(Ice Lake) Platinum 8369B阿里云CPU处理器

阿里云服务器CPU处理器Intel Xeon(Ice Lake) Platinum 8369B,基频2.7 GHz,全核睿频3.5 GHz,计算性能稳定。目前阿里云第七代云服务器ECS计算型c7、ECS通用型g7、内存型r7等规格均采用该款CPU。 Intel Xeon(Ice Lake) Platinum 8369B Intel …