一、磁盘结构


机械硬盘主要由磁盘盘片、磁头、主轴与传动轴等组成,数据存放在具有磁性物质的磁盘盘片中。
实际运行时,主轴马达让碟片转动,然后磁头臂让磁头在碟片上面进行读写操作。

读取数据时以磁头转圈的方式进行,在磁片同心圆中切出一个一个的小区块,这些小区块就是磁盘的最小物理存储单位,成为扇区(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)相关推荐

  1. 硬盘分区MBR和GPT知识详解

    重装系统之前都会了解一些关于BIOS与EFI的知识,很多小伙伴了解之后都会问快启动小编,自己的电脑硬盘分区MBR和GPT选哪个好?其实这个问题得根据你的电脑配置以及需求来回答,所以今天快启动小编为大家 ...

  2. 磁盘分区MBR和GPT

    参考:GUID(GPT)分区表详解 GPT分区表详解 GPT学习文档 概述 先说说目前广泛使用的磁盘分区表方案.传统的分区方案(称为MBR分区方案)是将分区信息保存到磁盘的第一个扇区(MBR扇区)中的 ...

  3. 磁盘分区MBR与GPT详解

    一  磁盘 磁盘的组成主要有磁盘盘.机械手臂.磁盘读取头与主轴马达所组成, 而数 据的写入其实是在磁盘盘上面.磁盘盘上面又可细分出扇区(Sector)与磁道(Track)两种单位, 其中扇 区的物理量 ...

  4. 如何转换磁盘的MBR和GPT格式

    注意:转换磁盘格式需要清空磁盘中的所有分区和数据,在操作前,请保存好磁盘中所有重要数据.使用系统光盘或者U盘引导,进入系统安装界面. 使用光盘或者U盘引导,进入系统安装界面. 按Shift + F10 ...

  5. linux查看守护进程格式,详解Linux中的守护进程

    一.什么是守护进程 Linux系统启动时会启动很多系统服务进程,这些系统服 务进程没有控制终端,不能直接和用户交互.其它进程都是在用户登录或运行程序时创建,在运⾏结束或⽤户注销时终止,但系统服务进程不 ...

  6. Linux硬盘分区mbr还是gpt,涨姿势:MBR和GPT硬盘分区表的那些事儿

    很多网友询问MR和GPT的问题,涉及到硬盘操作系统的安装,其实除了MBR和GPT分区表,UEFI BIOS也是和操作系统紧密联系在一起的,下面我们就来聊聊硬盘分区表和UEFI BIOS的知识. 从In ...

  7. 磁盘分区 (MBR, GPT)、启动流程 (BIOS, UEFI)

    本文为<鸟哥的 Linux 私房菜>读书笔记 目录 磁盘分区 MBR (MS-DOS) 分区表 GPT (GUID partition table) 磁盘分区表 BIOS 与 UEFI 启 ...

  8. Linux磁盘管理与文件系统(实验详解,一看就懂)

    磁盘管理与文件系统 一.磁盘管理 1.1 磁盘结构 1.2 MBR与磁盘分区表示 1.2.1 MBR 1.2.2 磁盘分区表示 二.文件系统 2.1 文件系统类型 2.2 检测并确认新硬盘 2.3 管 ...

  9. PE 格式详解与试验

    PE 格式详解与试验 可执行文件结构分析 DOS头 文件头 可选头 PE RVA 地址与文件地址转换 块表 Section Header 导入表 Data Directory 基址重定位 reloc ...

最新文章

  1. python 保留两位小数 实现方法
  2. QT配置opencv开发环境
  3. Java 11 已发布,String 还能这样玩!
  4. c# wpf 面试_WPF 基础面试题及答案(一)
  5. HDU 2461 Rectangles#容斥原理
  6. 解决ArcGIS 9.3卸载时出现invalid install.log file的方法
  7. ★Linux磁盘配额的使用 ★——牛刀小试
  8. ICS/SCADA 系统的对比
  9. 【转】Android - 文件读写操作 总结
  10. python源文件改写编写一个程序读取一个python源程序文件_学PYTHON第三节:编译和解释...
  11. 图像复原技术及其MATLAB实现
  12. 取消移动端按钮按钮点击时的蓝色背景
  13. python实现最小二乘拟合函数(选择三种不同基函数,基函数可改变)
  14. 设计模式——观察者模式(海姆达尔与仙宫人民)
  15. assuming drive cache: write through 处理
  16. thinkphp php5.1,ThinkPHP5.1完全开发手册
  17. 关于内存条低压标压以及不同品牌容量内存条组建双通道笔记
  18. 论文解读《Co-Correcting:Noise-tolerant Medical Image Classification via mutual Label Correction》
  19. 一个常见的文字无缝滚动效果
  20. 如何在小程序中完成支付进件?

热门文章

  1. 和菜头的独立 Blog 三十万点击量值得祝贺
  2. Spring MVC框架在进行表单提交,自动封装成对象提交,在以对象的形式入参
  3. LightGBM算法详解(教你一文掌握LightGBM所有知识点)
  4. 又一次不成功的关于酷我的链接分析
  5. android可用视频地址,「Android」一款可以获取国内各大视频网站直接播放地址的应用...
  6. created at mysql类型_MySQL created_at 日期时间字段在数据变更时,自动更新
  7. 【巨量引擎开放平台】java对接学习
  8. 利用Python的全国旅游景点数据分析案例(新手)
  9. sql server如何修改服务器名称,SQL Server 2014改服务器名称为(local)的方法
  10. 旅行商问题在现代物流中的意义