当前位置: 首页 > news >正文

硬盘第一关:MBR VS GPT

哈喽,我是子牙老师,一个手写过操作系统、编程语言、Java虚拟机、docker、Ubuntu系统,玩透Windows内核、Linux内核…的硬核男人

最近在备课《实战Linux内核》四期,刚好到Linux内核中的EXT4源码这块,想着很多人没底子看不懂这块代码,把我研究的成果写成文章分享给大家。本篇文章分享的底子之一就是MBR与GPT,如果文字版你看不懂,需要看视频,欢迎看我【个人简介】详细了解。

可能有小伙伴不知道MBR与GPT是什么,为此,画了一张图,帮助大家理解
在这里插入图片描述

还是不理解?那举个例子:你拿到一块硬盘,第一件事情是干啥,是不是给硬盘分区,MBR与GPT就是干这事的,相当于一块地,你是想分成田字形,还是N个田字形
在这里插入图片描述

它两区别是啥,如图
在这里插入图片描述

早些年的操作系统一般是使用MBR+BIOS,如今,一般是使用更为强大的GPT+UEFI。我的课程《手写操作系统》就是基于MBR+BIOS实现的。后面做的课程《手写Ubuntu Linux系统》就是基于GPT+UEFI实现的
在这里插入图片描述

现在你应该知道MBR与GPT是什么了,那本篇文章讲什么呢?

  1. MBR磁盘分区结构长啥样
  2. GPT磁盘分区结构长啥样
  3. MBR、GPT与文件系统是如何关联上的
  4. EXT4文件系统在MBR、GPT上是怎么玩的
  5. LBA是什么意思

以下,enjoy

MBR磁盘分区结构

废话不多说,直接上图,MBR磁盘分区结构长这样
在这里插入图片描述

你可能想问:它最多只能分四个分区吗?是也,非也!第一层它确实只能分四个分区,但是它支持一个扩展分区,逻辑分区中的分区数量是无限的
在这里插入图片描述

你可能想问:扩展分区只能放在最后一个吗?非也,可以放在任意位置,第一个也可以,但是一般是放最后一个

你可能还想问:在扩展分区中还能创建扩展分区吗?不可以了。技术上是可以做到的,但是这样设计可能太麻烦了吧,就没有这么去设计

你有没有这样的问题:为什么只能分四个分区?因为BIOS引导启动代码,将0扇区的512B作为启动扇区,是定死的规矩。

如何判断0扇区是不是启动扇区,就看最后两个字节,即511、512两个位置,存放的是否是0x55、0xAA。如果不是,BIOS是不运行启动代码的,那操作系统就起不来
在这里插入图片描述

既然是启动扇区,那得有空间存储启动代码吧!BIOS规范约定,前446B给你存放操作系统引导代码用。446B太小了,能干啥?所以一般写操作系统,这里放的只是跳转代码,所以你看写操作系统的书,一定有一节是:突破512字节瓶颈!
在这里插入图片描述

512-446-2,还剩多少?64B。MBR一个扇区用16B存储,刚好存4个扇区的信息。这个扇区信息存什么?扇区类型、从哪开始、到哪结束…
在这里插入图片描述

MBR还剩最后一个问题,如果有扩展分区,在硬盘中是如何存储的?这样
在这里插入图片描述

ChatGPT夸我这张图画的教科书级别,艾玛,给我夸飘了
在这里插入图片描述

说了这么多,如何实战呢?使用fdisk工具即可,给大家看下我实战的结果
在这里插入图片描述
在这里插入图片描述

自动进入扩展分区进行分区,即你接下来做的所有操作,都是在扩展分区中分区
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

写入硬盘
在这里插入图片描述

至此,MBR你已全部拿下!

GPT磁盘分区结构

直接上图
在这里插入图片描述

总结一下图中给出的信息:

一、GPT磁盘分区结构中,依然会保留MBR扇区。你可能想问,那OS怎么知道是GPT分区结构呢?MBR扇区中有一个分区项,它的类型是0xEE,OS通过这个判断这块盘是MBR还是GPT
在这里插入图片描述

二、第二块分区,存放的是GPT的核心信息,如图
在这里插入图片描述

硬盘中长这样
在这里插入图片描述

GPT header有备份,在LBA-1的位置,就是存储在硬盘的最后一块扇区中

三、GPT支持最多128个分区,每个分区信息占128B,128*128B=16K=32个扇区。所以存放GPT分区信息是2-33,还有备份的是LBA-33至LBA-2。GPT分区信息长这样
在这里插入图片描述
在这里插入图片描述

理论就这么多,开始做实现
在这里插入图片描述

这里你用fdisk也行,用gdisk也行,我就用fdisk做实验了
在这里插入图片描述
在这里插入图片描述

一共创建了四个分区,在硬盘中,刚好4个
在这里插入图片描述

这就是GPT磁盘分区表的全部!

2048

不知道你有没有注意,不论是MBR还是GPT,第一个分区都是从2048开始的。

没注意?那再来看看。

这是MBR的
在这里插入图片描述

这是GPT的
在这里插入图片描述

为什么呢?这个我可不知道,来问下ChatGPT
在这里插入图片描述

原理如此!

LBA

再来说说LBA是什么?它其实是一种磁盘坐标,32位时代用的是LBA28,64位时代用的是LBA48

与LBA相对的是CHS,就是大家听过的柱面、磁头、扇区。以前定位一个扇区,要通过这三个坐标。机械盘淘汰后,加上CHS能表达的磁盘空间有限,就改用了LBA。比如0柱面0磁头1扇区,对应的就是LBA=1
在这里插入图片描述

那LBA28与LBA48又是怎么回事呢?表达磁盘数量不同
在这里插入图片描述

我的课程《手写操作系统》,就是基于LBA28实现的
在这里插入图片描述

自信的说,我的课程《手写操作系统》,含金量还是非常高的!你看文章有没有发现,文中提到的大部分理论,课程中都有实战!其实也正常,OS代码在硬盘中,你不读硬盘,怎么价值OS代码呢?那你不知道这些,又怎么写读硬盘的代码呢?我还是觉得,学《手写操作系统》,对于每个coder来说,都非常非常重要!

如果你对上面的内容感兴趣,想看我之前的文章及我的奋斗历程。白手起家程序员的职场心得,欢迎看我【个人简介】详细了解。

http://www.dtcms.com/a/592521.html

相关文章:

  • 从原理到演进:vLLM PD分离KV cache传递机制全解析
  • 如何在浏览器侧边栏中使用GPT/Gemini/Claude进行网页对话?
  • 【gpt-oss-20b】一次 20B 大模型的私有化部署评测
  • zynq的PS端ENET网口引出到EMIO的PL引脚
  • 商城网站设计策划wordpress 去除归档链接
  • 李宏毅机器学习笔记44
  • 小杰-大模型(three)——RAG与Agent设计——Langchain-OutputParser输出解析器
  • LSTM核心参数与输入输出解读
  • 【机器学习算法】面试中的ROC和AUC
  • OSPF中的cost值
  • 《场景化落地:用 Linux 共享内存解决进程间高效数据传输问题(终篇)》
  • 襄阳建设网站首页向网站服务器上传网页文件下载
  • 视频去动态水印软件HitPaw安装和使用教程
  • O2OA(翱途)开发平台 v9.5 前端框架设计|开放 · 安全 · 可控 · 信创优选
  • CMakeList 中 PUBLIC 和 PRIVATE的区别
  • langchain 环境搭建
  • 捷讯官网 网站建设中小型企业网站大全
  • 《算法闯关指南:优选算法--位运算》--36.两个整数之和,37.只出现一次的数字 ||
  • 素材网站开发做流量网站挂广告还能挣钱吗
  • 学习OPC UA,连接OPC UA服务器
  • 从零开始:构建你的第一个MCP服务器
  • 数据结构之二叉树-堆
  • BridgeVLA 对比 pi 0.5 有提升吗
  • 深度学习 :python水下海洋生物识别检测系统 Yolo模型 PyTorch框架 计算机 ✅
  • COM_QueryInterface
  • DeepSeek-OCR全面解析:技术原理、性能优势与实战指南
  • WebKit Insie: WebKit 调试(二)
  • 网站建设需求材料推广网店的途径和方法
  • 排名优化网站沈阳中小企业网站制作
  • 从0到1:兰亭妙微如何用“小程序思维”重构用户体验路径