磁盘分区MBR和GPT格式详解(Linux)
一、磁盘结构
机械硬盘主要由磁盘盘片、磁头、主轴与传动轴等组成,数据存放在具有磁性物质的磁盘盘片中。
实际运行时,主轴马达让碟片转动,然后磁头臂让磁头在碟片上面进行读写操作。
读取数据时以磁头转圈的方式进行,在磁片同心圆中切出一个一个的小区块,这些小区块就是磁盘的最小物理存储单位,成为扇区(sector),同一个同心圆的扇区组合成的圆就是磁道(track)。由于磁盘里可能会有多个碟片,因此在所有碟片上面的同一个磁道可以组成 柱面(cylinder)。
外圈的圆比较大,为了合理利用这些空间,磁盘外圈圆会比内圈有更多的扇区。所以,当碟片转一圈时,外圈的扇区数量比较多,因此如果数据写入在外圈,转一圈能够读写的数据量比内圈多。因此数据的读写会由外圈开始向内写,这是默认的方式。
原本硬盘的扇区都是设计成512B的大小,但随着硬盘容量的增大,为了减少数据量的拆解,目前绝大多数的高容量硬盘使用了4K大小的扇区设计。
为什么要分区?
- 1.数据的安全性
每个分区的数据是分开存储的,当要对某个分区的数据进行整理时,不会影响到其它分区。例如对安装有Windows系统的C盘进行重装时,对其它分区如D盘、E盘中的数据不会产生影响。 - 2.系统的性能
某个分区处在特定范围的柱面范围内,当要在该分区内读取数据时,只需要在其柱面范围内检索,由于数据较为集中,所以读取速度和性能较高。
主要的分区格式有早期的MBR格式和新的GPT格式。
二、分区格式
1、MBR
(1)简介
MBR分区格式中柱面是文件系统的最小单位,也就是分区的最小单位。
第一个扇区(旧式磁盘中为512字节)中存放着启动引导程序和分区表:
- 主引导记录(Master Boot Record, MBR):可以安装启动引导程序的地方,有446字节;
- 分区表(partition table):记录整块硬盘分区的状态,有64字节。
分区表64字节最多仅能有四组记录区,每个记录区16字节。
如图中有4个主分区。
总结:
- 所谓的分区就是针对64字节的分区表进行设置而已。
- 磁盘默认的分区表仅能写入四组分区信息,每组记录区记录了该区段的起始与结束的柱面号码。
- 这四个分区的记录被称为主要(Primary)分区或扩展(Extended)分区。
- 当系统要写入磁盘时,一定会参考磁盘分区表,才能针对某个分区进行数据的处理。
(2)扩展分区和逻辑分区:
扩展分区的目的是使用额外的扇区来记录分区的信息,扩展分区本身并不能被拿来格式化。
扩展分区可以继续划分出逻辑分区(logical partition)。
/dev/sda[1-4] 都是留给主分区或扩展分区用的,所以逻辑分区的设备文件名就从 sda5 开始。
图中分区在Linux下的文件名是:
P1:/dev/sda1
P2:/dev/sda2
L1:/dev/sda5
L2:/dev/sda6
L3:/dev/sda7
L4:/dev/sda8
L5:/dev/sda9
总结:
- 主分区和扩展分区最多可以有4个(硬盘限制)。
- 扩展分区最多只能有1个(操作系统限制)。
- 逻辑分区是由扩展分区持续划分出来的分区。
- 能够被格式化后作为数据存取的分区是主分区和逻辑分区,扩展分区无法格式化。
- 逻辑分区的数量依操作系统而不同,在Linux中SATA硬盘已经可以突破63个以上的分区限制。
- 一般建议将扩展分区的柱面号码分配到最后的柱面内。
MBR模式简略图:
MBR分区表结构:
偏移 | 长度(字节) | 意义 |
---|---|---|
00H | 1 | 分区状态:00–>非活动分区;80–>活动分区;其它数值没有意义 |
01H | 1 | 分区起始磁头号(HEAD),用到全部8位 |
02H | 2 | 分区起始扇区号(SECTOR),占据02H的位0-5;该分区的起始磁柱号(CYLINDER),占据02H的位6-7和03H的全部8位 |
04H | 1 | 文件系统标志位 |
05H | 1 | 分区结束磁头号(HEAD),用到全部8位 |
06H | 2 | 分区结束扇区号(SECTOR),占据06H的位0-5;该分区的结束磁柱号(CYLINDER),占据06H的位6-7和07H的全部8位 |
08H | 4 | 分区起始相对扇区号 |
0CH | 4 | 分区总的扇区数 |
(3)MBR分区大小限制的问题:
分区表组最后4个字节表示分区中的扇区数量,有4*8=32位,最大值为 20+21+ … +231 = 232-1 个扇区,每个扇区大小为512字节,所以能表示的最大容量为 :
(232−1)∗512=2199023255040bytes=2048GB=2TB(2^{32}-1) * 512= 2199023255040 \, bytes = 2048 \, GB = 2 \, TB (232−1)∗512=2199023255040bytes=2048GB=2TB注意这里是用1:1024换算的,硬盘制造商使用1:1000换算,所以就会得出2.2TB的结果。
2TB是对单一分区容量的限制,如果第一个分区就占了2TB,那么其第二个分区的扇区物理地址就无法表示了,所以2TB也是对整个硬盘最大容量的限制。
详细说明见Wiki页面:https://zh.wikipedia.org/wiki/Master_boot_record
MBR的弊端:
- 操作系统无法使用2.2TB以上的磁盘容量。
- MBR仅有一个区块,被破坏后经常无法或很难恢复。
- MBR内的存放启动引导程序的区块仅446字节,无法存储较多的程序代码。
2、GPT
(1)简介
如今扇区大小不仅有512字节的,还有4K大小的。为了兼容所有的磁盘,使用逻辑区块地址(Logical Block Address,LBA)来处理扇区。GPT将硬盘所有区块以LBA(默认512字节)来规划,第一个LBA称为LBA0。
与MBR仅使用第一个512字节来记录不同,GPT使用了34个LBA来记录分区信息。相比于MBR中只有一个区块记录分区信息,GPT除了前面34个LBA记录以外,整个磁盘的最后34个LBA也拿来做备份。
(2)LBA
LBA0(MBR兼容模块)
出于兼容性考虑存储了一份传统MBR,用来防止不支持GPT的硬盘管理工具错误识别并破坏硬盘中的数据,这个MBR也叫做保护MBR。
分为两个部分,第一个是前面446字节,用来存储第一阶段的启动引导程序。而在原本的分区表的记录区内,这个兼容模式仅放入了一个特殊字符来表示此磁盘为GPT格式之意。
在使用 MBR/GPT 混合分区表的硬盘中,这部分存储了GPT分区表的一部分分区(通常是前四个分区),可以使不支持从GPT启动的操作系统从这个MBR启动,启动后只能操作MBR分区表中的分区。LBA1(GPT表头记录)
记录了分区表本身的位置和大小,也记录了备份用的GPT分区(最后34个LBA区块)放置的位置。同时放置了分区表的校验码(CRC32),操作系统可以根据这个校验码来判断GPT是否正确。若有错误可以通过这个记录区来获取备份的GPT(磁盘最后面的备份区块)来恢复正常。LBA[2-33](实际记录分区信息处)
从LBA2区块开始,每个LBA都可以记录4组分区记录,所以在默认情况下,总共有4*32=128组分区记录。每组记录用到128字节的空间。
起始字节 | 长度 | 内容 |
---|---|---|
0 | 16字节 | 分区类型GUID |
16 | 16字节 | 分区GUID |
32 | 8字节 | 起始LBA(小端序) |
40 | 8字节 | 末尾LBA |
48 | 8字节 | 属性标签(如:60表示“只读”) |
56 | 72字节 | 分区名(可以包括36个UTF-16(小端序)字符) |
(16+16+8+8+8+72=128)
(3)GPT分区大小限制:
GPT 在每组记录中分别提供了 8字节 = 64位 来记载开始/结束的扇区号码。因此,理论上对于单一分区槽来说, 它的最大容量限制为 264 * 512bytes = 263 Kbytes = 233TB = 8 ZB 。但是受操作系统限制,一般一个分区最大限制为 18EB。
GPT 分区没有所谓的主、扩展、逻辑分区的概念,每个都可以视为是主分区,每一个分区都可以格式化。
GPT 分区默认可以提供多达128 组纪录,而在Linux 本身的内核设备记录中,针对单一磁盘来说,虽然过去最多只能到达15 个分区,不过由于Linux 内核通过udev 等方式的处理,现在Linux 也已经没有这个限制了。
参考链接:1.https://en.wikipedia.org/wiki/GUID_Partition_Table
2.https://docs.microsoft.com/en-us/troubleshoot/windows-server/backup-and-storage/guid-partitioning-table-disk-faq
磁盘分区MBR和GPT格式详解(Linux)相关推荐
- 硬盘分区MBR和GPT知识详解
重装系统之前都会了解一些关于BIOS与EFI的知识,很多小伙伴了解之后都会问快启动小编,自己的电脑硬盘分区MBR和GPT选哪个好?其实这个问题得根据你的电脑配置以及需求来回答,所以今天快启动小编为大家 ...
- 磁盘分区MBR和GPT
参考:GUID(GPT)分区表详解 GPT分区表详解 GPT学习文档 概述 先说说目前广泛使用的磁盘分区表方案.传统的分区方案(称为MBR分区方案)是将分区信息保存到磁盘的第一个扇区(MBR扇区)中的 ...
- 磁盘分区MBR与GPT详解
一 磁盘 磁盘的组成主要有磁盘盘.机械手臂.磁盘读取头与主轴马达所组成, 而数 据的写入其实是在磁盘盘上面.磁盘盘上面又可细分出扇区(Sector)与磁道(Track)两种单位, 其中扇 区的物理量 ...
- 如何转换磁盘的MBR和GPT格式
注意:转换磁盘格式需要清空磁盘中的所有分区和数据,在操作前,请保存好磁盘中所有重要数据.使用系统光盘或者U盘引导,进入系统安装界面. 使用光盘或者U盘引导,进入系统安装界面. 按Shift + F10 ...
- linux查看守护进程格式,详解Linux中的守护进程
一.什么是守护进程 Linux系统启动时会启动很多系统服务进程,这些系统服 务进程没有控制终端,不能直接和用户交互.其它进程都是在用户登录或运行程序时创建,在运⾏结束或⽤户注销时终止,但系统服务进程不 ...
- Linux硬盘分区mbr还是gpt,涨姿势:MBR和GPT硬盘分区表的那些事儿
很多网友询问MR和GPT的问题,涉及到硬盘操作系统的安装,其实除了MBR和GPT分区表,UEFI BIOS也是和操作系统紧密联系在一起的,下面我们就来聊聊硬盘分区表和UEFI BIOS的知识. 从In ...
- 磁盘分区 (MBR, GPT)、启动流程 (BIOS, UEFI)
本文为<鸟哥的 Linux 私房菜>读书笔记 目录 磁盘分区 MBR (MS-DOS) 分区表 GPT (GUID partition table) 磁盘分区表 BIOS 与 UEFI 启 ...
- Linux磁盘管理与文件系统(实验详解,一看就懂)
磁盘管理与文件系统 一.磁盘管理 1.1 磁盘结构 1.2 MBR与磁盘分区表示 1.2.1 MBR 1.2.2 磁盘分区表示 二.文件系统 2.1 文件系统类型 2.2 检测并确认新硬盘 2.3 管 ...
- PE 格式详解与试验
PE 格式详解与试验 可执行文件结构分析 DOS头 文件头 可选头 PE RVA 地址与文件地址转换 块表 Section Header 导入表 Data Directory 基址重定位 reloc ...
最新文章
- python 保留两位小数 实现方法
- QT配置opencv开发环境
- Java 11 已发布,String 还能这样玩!
- c# wpf 面试_WPF 基础面试题及答案(一)
- HDU 2461 Rectangles#容斥原理
- 解决ArcGIS 9.3卸载时出现invalid install.log file的方法
- ★Linux磁盘配额的使用 ★——牛刀小试
- ICS/SCADA 系统的对比
- 【转】Android - 文件读写操作 总结
- python源文件改写编写一个程序读取一个python源程序文件_学PYTHON第三节:编译和解释...
- 图像复原技术及其MATLAB实现
- 取消移动端按钮按钮点击时的蓝色背景
- python实现最小二乘拟合函数(选择三种不同基函数,基函数可改变)
- 设计模式——观察者模式(海姆达尔与仙宫人民)
- assuming drive cache: write through 处理
- thinkphp php5.1,ThinkPHP5.1完全开发手册
- 关于内存条低压标压以及不同品牌容量内存条组建双通道笔记
- 论文解读《Co-Correcting:Noise-tolerant Medical Image Classification via mutual Label Correction》
- 一个常见的文字无缝滚动效果
- 如何在小程序中完成支付进件?
热门文章
- 和菜头的独立 Blog 三十万点击量值得祝贺
- Spring MVC框架在进行表单提交,自动封装成对象提交,在以对象的形式入参
- LightGBM算法详解(教你一文掌握LightGBM所有知识点)
- 又一次不成功的关于酷我的链接分析
- android可用视频地址,「Android」一款可以获取国内各大视频网站直接播放地址的应用...
- created at mysql类型_MySQL created_at 日期时间字段在数据变更时,自动更新
- 【巨量引擎开放平台】java对接学习
- 利用Python的全国旅游景点数据分析案例(新手)
- sql server如何修改服务器名称,SQL Server 2014改服务器名称为(local)的方法
- 旅行商问题在现代物流中的意义