本文为《鸟哥的 Linux 私房菜》读书笔记

目录

  • 磁盘分区
    • MBR (MS-DOS) 分区表
    • GPT (GUID partition table) 磁盘分区表
  • BIOS 与 UEFI 启动检测程序
    • BIOS 搭配 MBR / GPT 的启动流程
      • BIOS 搭配 MBR
      • BIOS 搭配 GPT
      • BIOS 的 1024 柱面问题
    • UEFI BIOS 搭配 GPT 启动的流程
  • 启动引导程序 (boot loader)
    • 多重引导

磁盘分区

  • 硬盘必须要分区之后才能使用,那么为什么要磁盘分区?

    • 数据的安全性: 每个分区的数据是分开的,所以,当你需要将某个分区的数据重整时,例如你要将计算机中Windows的C盘重装系统时, 可以将其他重要数据移动到其他分区,那么C盘重装系统并不会影响到D盘
    • 系统的性能考虑: 由于分区将数据集中在某个柱面的区段,当有数据要读取自该分区时, 磁盘只会查找对应的柱面范围,由于数据集中,将有助于数据读取的速度与性能

磁盘的第一个扇区

  • 扇区 (sector) 的物理大小设计有两种,分别是 512Bytes 与 4KBytes
  • 其中磁盘的第一个扇区特别重要,它存储了磁盘分区表
    • 早期磁盘第一个扇区里面含有的磁盘分区表我们称为 MBR (Master Boot Record) 格式
    • 但是由于近年来磁盘的容量不断扩大,造成读写上的一些困扰, 甚至有些大于 2TB 以上的磁盘分区已经让某些操作系统无法存取。因此后来又多了一个新的磁盘分区格式,称为 GPT (GUID partition table)
    • 由于第一个扇区所记录的分区表与 MBR 十分重要,几乎只要读取硬盘都会先由这个扇区先读起。 因此,如果硬盘的第一个扇区有损坏,那这个硬盘大概就没有用了

  • 通常磁盘可能有多个盘片,所有盘片的同一个磁道 (track) 我们称为柱面 (Cylinder), 通常那是文件系统的最小单位,也就是分区的最小单位

    • 为什么说“通常”?因为 GPT 的分区表可达到 64bit 纪录功能, 现在我们甚至可以使用扇区号码来作为分区单位

MBR (MS-DOS) 分区表

  • 早期的 Linux 系统为了兼容 Windows 的磁盘,使用的是支持 Windows 的 MBR(Master Boot Record, 主引导记录) 的方式来处理引导程序与分区表。而引导程序与分区表则通通放在磁盘的第一个扇区, 这个扇区通常是 512Bytes (旧的磁盘扇区都是 512Bytes),所以说,第一个扇区 512Bytes 主要会有这两个数据 (还有一个结束标志 55AA55AA55AA):

    • 主引导记录 (MBR):可以安装启动引导程序的地方,有 446 Bytes
    • 分区表(partition table):记录整块硬盘分区的状态,有 64 Bytes
      • 由于分区表所在区块仅有 64 Bytes 容量,因此最多仅能有四组记录区,每组记录区记录了该区段的启始与结束的柱面号码;这四个分区的记录被称为 主要分区(Primary)或 扩展分区(Extended)
      • 下图中假设硬盘只有400个柱面,共划分为四个分区;如果硬盘设备文件名为 /dev/sda,则 P1P_1P1​ ~ P4P_4P4​ 的设备文件名分别为 /dev/sda1 ~ /dev/sda4
      • 如果想要划分出四个以上的分区,就要用到扩展分区扩展分区本身并不能被格式化,而是 利用额外的扇区来记录更多的分区信息,然后我们可以通过扩展分区所指向的那个区块继续作分区的记录得到 逻辑分区
      • 操作系统规定 扩展分区最多只能有 1 个
        • 如下图所示,P1P_1P1​ 为主要分区 (/dev/sda1),P2P_2P2​ 为扩展分区 (/dev/sda2),L1L_1L1​ ~ L5L_5L5​ 为逻辑分区 (/dev/sda5 ~ /dev/sda9) (前四个号码都是保留给主要分区或扩展分区用的)

实际上扩展分区并不是只占一个区块,而是会分布在每个分区的最前面几个扇区来记载分区信息;上图将其简化了

  • 要注意,逻辑分区的信息都记录在扩展分区里,因此如果扩展分区被破坏,所有逻辑分区会被删除;例如,下图中我们想要将两个蓝色的分区整合为一个新的分区,上面的两个逻辑分区的整合是比较容易的,只要删除这两个分区在重建一个新的就行了;但下面逻辑分区和主要分区就无法整合,除非将扩展分区破坏掉再重新划分,但如此一来就要删除所有的逻辑分区

MBR 分区表的限制

  • MBR 分区表总共 64 字节,分为四组记录区,因此每组分区表只有 16 字节;而这 16 字节中有 4 字节用来存储该分区的总扇区数;因此一个分区最多 2322^{32}232 个扇区,每个扇区 512 字节,即一个分区的最大容量为 2TB2TB2TB
  • MBR 仅有一个区块,若被破坏后,经常无法或很难恢复
  • MBR 内的存放启动引导程序的区块仅 446Bytes,无法容纳较多的程序代码

GPT (GUID partition table) 磁盘分区表

逻辑区块地址(Logical Block Address, LBA

  • 目前已经有 4K 的扇区设计出现,为了兼容所有的磁盘,因此在扇区的定义上面, 大多会使用所谓的 逻辑区块地址 来处理
  • GPT 将磁盘所有区块以 LBA(默认为 512Bytes来规划,第一个 LBA 称为 LBA0 (从 0 开始编号)

GPT

  • GPT 使用了 34 个 LBA 区块来记录分区信息。同时除了前面 34 个
    LBA 之外,整个磁盘的最后 34 个 LBA 也拿来作为另一个备份
  • LBA0MBR 兼容区块
    • 与 MBR 模式相似,这个兼容区块也分为两个部分,一个就是跟之前 446 Bytes 相似的区块,储存了第一阶段的启动引导程序;而在原本的分区表的记录区内,这个兼容模式仅放入一个特殊标志符,用来表示此磁盘为 GPT 格式。而不懂 GPT 分区表的磁盘管理程序, 就不会识别该磁盘,进一步保护了磁盘
  • LBA1GPT 表头记录
    • 这个部分记录了分区表本身的位置与大小,同时记录了备份用的 GPT 分区 (最后 34 个 LBA 区块) 的位置, 同时放置了分区表的校验码(CRC32),操作系统可以根据这个校验码来判断 GPT 是否正确。若有错误,还可以通过这个记录区来取得备份的 GPT来恢复 GPT 的正常运行
  • LBA2 ~ 33实际记录分区信息处
    • 从 LBA2 区块开始,每个 LBA 都可以记录 4 组分区记录,所以在默认的情况下,总共可以有 4×32=1284\times32 = \boldsymbol {128}4×32=128 组分区记录。因为每个 LBA 有 512Bytes,因此每组记录用到 128Bytes 的空间,除了每组记录所需要的标识符与相关的记录之外,GPT 在每组记录中分别提供了 64bits 来记载开始/结束的扇区号码 (64 位寻址),因此,GPT 分区表对单一分区来说,最大容量限制就为 264×5122^{64}\times512264×512 Bytes = 8 ZB
  • 此外,GPT 分区已经没有所谓的主、扩展、逻辑分区的概念,既然每组记录都可以独立存在, 当然每个都可以视为是主要分区,每一个分区都
    可以拿来格式化使用

BIOS 与 UEFI 启动检测程序

  • 操作系统也是软件,那么我的计算机又是如何认识这个操作系统软件并且执行它的呢?这就得要牵涉到计算机的启动程序了

BIOS 搭配 MBR / GPT 的启动流程

  • 如果磁盘大小小于 2TB2TB2TB,系统会默认使用 MBR 分区
  • 如果磁盘大小大于 2TB2TB2TB,系统会默认使用 GPT 分区

BIOS 搭配 MBR

BIOS & CMOS

  • 我们知道,CMOS记录各项硬件参数且嵌入在主板上面的存储器BIOS 则是一个写入到主板上的一个固件。这个 BIOS 就是在启动的时候,计算机系统会主动执行的第一个程序
  • 接下来 BIOS 会去分析计算机里面有哪些储存设备,我们以硬盘为例,BIOS 会依据用户的设置去取得能够启动的硬盘, 并且到该硬盘里面去读取第一个扇区的 MBR 位置。 MBR 这个仅有 446Bytes 的硬盘容量里面会放置最基本的启动引导程序, 此时 BIOS 就功成圆满,而接下来就是 MBR 内的启动引导程序的工作了

BIOS 搭配 GPT

  • BIOS 其实不懂 GPT,还得要通过 GPT 提供兼容模式才能够读写这个磁盘设备,但 BIOS 也能够从 LBA0 的 MBR 兼容区块读取第一阶段的启动引导程序

    • 如果你的启动引导程序能够支持 GPT (grub2以及之后的版本) 的话,那么使用 BIOS 同样可以读取到正确的操作系统内核
    • 如果使用类似 grub 的不支持 GPT 的启动引导程序的话,就得额外分区出一个 BIOS boot 分区, 这个分区才能够放置其他开机过程所需的程序。在 CentOS 当中,这个分区通常占用 2MB 左右

BIOS 的 1024 柱面问题

  • BIOS 使用 3 个字节来表示磁盘地址,10 位表示柱面,6 位表示头,8 位表示扇区。如果一个扇区 512 字节,那么能表示的磁盘地址为 210×26×28×512B=8.4GB2^{10}\times 2^6\times2^8\times512B=8.4GB210×26×28×512B=8.4GB
  • 因此,启动引导程序只能放在分区的前 8.4GB8.4GB8.4GB 的位置

UEFI BIOS 搭配 GPT 启动的流程

本节部分内容参考 详解 UEFI 模式下安装 Linux,如果安装时有其他问题也可以再参考一下这个网页

  • BIOS 其实不懂 GPT,还得要通过 GPT 提供兼容模式才能够读写这个磁盘设备;而且 BIOS 仅为 16 位的程序,在与新的操作系统接轨方面有点弱
  • 为了解决这个问题,因此就有了 统一可扩展固件接口 UEFI (Unified Extensible Firmware Interface);UEFI 主要是想取代 BIOS 这个固件接口,因此我们也称 UEFI 为 UEFI BIOS
    • UEFI 使用 C 语言 编写,比起使用汇编语言的传统 BIOS 要更容易开发,因此如果开发者够厉害,甚至可以在 UEFI 启动阶段就让该系统了解 TCP/IP 而直接上网,根本不需要进入操作系统。这让小型系统的开发充满各式各样的可能性
    • 与传统的 BIOS 不同,UEFI 简直就像是一个低级的操作系统;甚至连主板上面的硬件资源的管理, 也跟操作系统相当类似,只需要加载驱动程序即可控制操作。同时由于功能特性,一般来说,使用 UEFI 的主机,在开机的速度上要比 BIOS 快许多

UEFI 对分区的要求

  • 与 BIOS 模式相比,虽然 UEFI 可以直接取得 GPT 的分区表,不过最好依旧拥有 BIOS boot 的分区支持,这样更加灵活,因为你可以安装 BIOS 模式下的 grub,然后以任意模式 (UEFI / BIOS) 进行启动引导
  • 同时,为了与 Windows 兼容,并且提供其他第三方厂商所使用的 UEFI 应用程序存储的空间,你必须要格式化一个 FAT 格式的 ESP 分区, 大约提供 512MB 到 1GB 的大小
    • 不同发行版的安装程序以不同的方式辨识 ESP 分区。比如,Debian 和 Ubuntu 的某些版本把 ESP 分区称为 “EFI boot partition”,而且不会明确显示它的挂载点(尽管它会在后台挂载)
    • 但是有些发行版,需要你去手动挂载。在 Linux 中最标准的 ESP 分区挂载点是 /boot/efi
    • 除非 ESP 分区没有,否则不要为其新建文件系统 — 如果已经安装 Windows 或其它操作系统,它们的引导文件都在 ESP 分区里,新建文件系统会销毁这些文件
  • 由于 UEFI 已经克服了 BIOS 的 1024 柱面问题,因此启动引导程序与内核可以放置在磁盘开始的前 2TB 位置。加上 BIOS boot 以及 UEFI 支持的分区,基本上存放启动引导程序以及系统内核文件的 /boot 目录几乎都是 /dev/sda3 之后的号码了

由于过去 cracker 经常借由 BIOS 启动阶段来破坏系统,并取得系统的控制权,因此 UEFI 加入了一个所谓的安全启动 (secure boot) 机制, 开机的操作系统必须要被 UEFI 所验证,否则就无法顺利开机。 不过加入这个机制后,许多的操作系统,包括 Linux ,就很有可能无法顺利开机。所以,你可能得要将 UEFI 的 secure boot 功能关闭, 才能够顺利的进入 Linux

启动引导程序 (boot loader)

  • 启动引导程序是操作系统安装在 MBR 上的一个软件,由于 MBR 仅有 446 Bytes,因此这个启动引导程序非常小而高效,它主要提供以下功能:

    • 提供选项:用户可以选择不同的启动选项,这也是多重引导的重要功能
    • 转交其他启动引导程序:启动引导程序除了可以安装在 MBR 之外, 还可以安装在每个分区的启动扇区(boot sector),因此可以将启动管理功能转交给其他启动引导程序负责;这个特性才能造就多重引导
    • 加载内核文件:内核文件放置在一个分区中,该分区即为系统分区启动引导程序只会识别自己的系统分区内的可启动的内核文件启动操作系统

注意,启动引导程序只认识自己的系统分区内的可启动的内核文件以及其他启动引导程序,不能直接加载其他分区内的内核文件

多重引导

  • 下图为多重引导的示意图;MBR 的启动引导程序提供两个菜单,菜单一(M1M_1M1​)可以直接加载 Windows 的内核文件来开机; 菜单二(M2M_2M2​)则是将启动管理工作交给第二个分区的开机扇区。当使用者在开机的时候选择菜单二时, 那么整个开机管理工作就会交给第二分区的启动引导程序。 当第二个启动引导程序启动后,该启动引导程序内仅有一个开机菜单,因此就能够使用 Linux 的内核文件来启动
  • 如果要安装多重启动, 最好先安装 Windows 再安装 Linux
    • 这是因为:Linux在安装的时候,你可以选择将启动引导程序安装在 MBR 或其他分区的启动扇区, 而且 Linux 的启动引导程序可以手动设置选项(就是上图的 M1,M2M_1, M_2M1​,M2​…),所以你可以在 Linux 的 boot loader 里面加入Windows 开机的选项;
    • 而 Windows 在安装的时候,会主动覆盖 MBR 以及自己所在分区的启动扇区,你没有选择的机会, 而且它没有让我们自己选择选项的功能。因此,如果先安装 Linux 再安装 Windows 的话,那 MBR 的启动引导程序就只会有 Windows 的项目,而不会有 Linux 的项目 (因为原本在 MBR 内的 Linux 的启动引导程序就会被覆盖掉)。 此时可以利用 Linux 的恢复模式来修复 MBR

磁盘分区 (MBR, GPT)、启动流程 (BIOS, UEFI)相关推荐

  1. rufus中gpt和mrb磁盘_UEFI/BIOS/MBR/GPT启动过程详解与常见系统启动问题

    做系统一大头疼事情就是UEFI/BIOS/MBR/GPT等等的选择.系统平台和硬件日新月异,基本上中文站的解释正确性参差不齐,出了问题也查不到正确解决方案,我也遇到过很多次系统启动的问题(这就是为什么 ...

  2. legacy引导gpt分区_windows分区模式和启动模式(UEFI+GPT或Legacy+MBR组合)

    启动模式必须是UEFI+GPT或Legacy+MBR组合,否则无法正常安装系统,Legacy+MBR模式的电脑支持安装任意的Windows系统,无需任何修改,就能直接从低版本安装高版本系统.UEFI+ ...

  3. 磁盘分区MBR与GPT详解

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

  4. 磁盘分区MBR和GPT

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

  5. 磁盘分区MBR和GPT格式详解(Linux)

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

  6. 38.将磁盘分区转为GPT

    1.在win10安装界面输入shift +f10 2.键入diskpart. 3.list disk 4.Select disk disknumber(ps:其中disknumber是磁盘编号) 5. ...

  7. parted磁盘分区与GPT

    parted磁盘分区方式:通常我们用的比较多的一般都是fdisk工具来进行分区,但是现在由于磁盘越来越 廉价,而且磁盘空间越来越大;而fdisk工具他对分区是有大小限制的,它只能划分小于2T的磁盘.但 ...

  8. Windows系统的MBR磁盘分区--MBR的结构和作用(三)之主磁盘分区的结构

    每块硬盘在使用前进行分区,也就是将硬盘划分为一个个的逻辑区域,每一分区,都有一个确定的起止位置.在起止位置之间的那些连续的扇区都归该分区所有. MBR磁盘的分区形式一般有3种,即主分区,扩展分区,非D ...

  9. Windows系统的MBR磁盘分区--MBR的结构和作用(一)

    MBR磁盘分区是使用最广泛的一种分区结构,它也被称为DOS分区,但它并不是一个仅仅应用于微软的操作系统平台中的分区结构.Linux系统,基于x86架构的UNIX系统都能支持MBR磁盘分区. 主引导记录 ...

最新文章

  1. Spring 实践 -IoC
  2. iPhone Three20软件引擎之构建开发环境与HelloWorld
  3. Google的面试题长啥样
  4. JDK 11的一般可用性
  5. ubuntu下常用服务器的构建
  6. 【英语】Flying By Dream---English
  7. ip地址配置 mongodb_MongoDB 3.6版本中bind_ip设置详解
  8. 工具类篇——时间处理Calendar类
  9. 第四次课后作业及Sring类型的应用
  10. C++ STL库之vector
  11. 软件项目管理MOOC(北邮)——第四章测试答案
  12. fireFox post请求插件,火狐浏览器插件
  13. 【UCSC Genome Browser】比老东家还出名的基因组数据库
  14. 联盛德 HLK-W806 (七): 兼容开发板 LuatOS Air103
  15. 【Ubuntu】用g++生成动态库
  16. 【成功】qlv转MP4,超简单方法
  17. 网易互娱 实习生招聘 内推
  18. 人脸识别最低像素_深入浅出人脸识别技术
  19. 京东2020年Q2财报数据亮眼:超2000亿净收入背后供应链物流价值释放
  20. 使用apk来控制指纹(指纹型号迈瑞微 ECS120)

热门文章

  1. 大型商贸系统(进货管理)技术解析(四)自营无订单进仓单
  2. c4d python生成器教程_C4D中的python生成器
  3. 天大2021年秋学期考试《土力学与基础工程》离线作业考核试题
  4. 基于一维卷积神经网络对机械振动信号进行分类并加以预测
  5. 小学计算机学科教学 活动计划,信息技术学科年度的教学计划
  6. 华为h12m03装系统_Huawei MateBook 一键恢复出厂/重装系统/系统还原 操作指导
  7. 【面经】Morgan Stanley IT简易面经
  8. 生产制造业ERP管理系统能解决哪些仓库管理难题?
  9. 【富文本】Windows10数字权利
  10. 停车收费系统服务器关闭,停车场收费系统的后台操作记录怎么删除