尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
【Linux 篇】数字世界的库房 —— 磁盘硬件原理与存储介质实战剖析
于此止个人主页本文选自专栏 《Linux篇》❄️个人专栏传送门 《QT百日筑基篇》 《算法篇》《C与STL剖析篇》 《数据结构篇》 《Python基础篇》《嵌入式砺剑录》⭐️纵有狂风拔地起我亦乘风破万里⭐️文件系统的存储——理解硬件前言本片文章主要拆解我们对应的硬件知识我们下篇是文件系统这篇文章有助于我们理解我们的下篇文章所以我们就来看看我们磁盘的底层构造吧。目录文件系统的存储——理解硬件一、从宏观角度看待我们的硬件域1.磁盘、服务器、机柜、机房磁盘服务器机柜机房二、磁盘的结构深度拆解磁盘磁盘的存储结构微观俯视图主视图扇区理解柱面和盘面CHS寻址三、从软件抽象我们的磁盘1、理解过程2、LBA地址3、真实的过程四、CHS和LBA地址的转化CHS转化LBALBA 转成 CHS一、从宏观角度看待我们的硬件域我们的文件分为下面的两种1.打开的文件——储存在内存中2.没有打开的文件——储存在磁盘中1.磁盘、服务器、机柜、机房像我们现在的笔记本电脑大多装的都是我们对应的固态硬盘。但是向我们的台式机还是使用我们对应的磁盘的。所以我们来详细的看一下我们的磁盘吧。磁盘以下的特点。机械磁盘是计算机中唯一的一个机械设备磁盘 --- 外设慢容量大价格便宜我们看一下我们磁盘的样子吧磁盘这是我们带包装的磁盘。一般是企业级的磁盘当然企业级的磁盘价格会更贵一点但是效率会更高一点。我们将我们的磁盘的包装进行拆开能看到我们内部的磁盘的样子。我们磁盘主要是进行存储的也就是IO服务器我们可以将我们的一个个磁盘放入我们对应的服务器当中。这就是我们对应的服务器服务器一般没有什么外设一般的外设只有网卡。我们可以将前面的一个个柜子抽出来将我们对应的磁盘放进去。机柜我们在上面的光盘操作完之后我们将一个个服务器放入我们的机柜中我们的机柜的背面有各种各样的连线机房我们将我们的一个个机柜放入我们的房间中形成对应的机房.当然除啦这种的磁盘外我相信大家还认识我们的光盘光盘和磁盘的区别是我们的磁盘能进行我们的读写但是我们的光盘是只读的。二、磁盘的结构深度拆解磁盘这就是我们对应的一个磁盘。磁盘的存储结构微观俯视图我们的磁盘在我们的俯视图是一个个同心圆当然我们这一个个圆弧就是我们一个个磁道。右侧是我们对应的一个个磁道的简化图我们这一个圆弧有我们一个个扇区来进行构成。我们这里的扇区一般是512Byte。当然这只是我们俯视图所看到的我们不一定一个磁盘只有一个这样的盘片。主视图我们有很多很多的盘片这里我们有几个盘片数也是代表我们有几个对应的磁头数。我们这几个磁头都有一个有趣的特点这个特点是他们在运行的时候我们所有的盘面也都进行运行运行后他指向的是我们对应的位置在一个高度中我们称之为共进退扇区我们的磁盘在运行的过程中要将我们对应的一个个内容写到我们对应的扇区中这时候我们就要运动我们对应的磁头找到我们对应的扇区进行我们对应的写入。我们的磁头在我们的转动臂下共进退。我们的扇区呈现我们的扇子状因此我们将其命名为扇区。理解柱面和盘面我们查看我们的立体结构CHS寻址我们在执行我们写入的时候要怎么进行写入呢1.首先在我们那么多的柱面cylinder上面图中的盘面找寻一个我们对应的柱面进行写入。2.找到我们的柱面后我们让我们的该柱面的磁头head去定位我们写的地方。3.我们将我们对应的磁头指向我们要进行写入的扇区sector。所有我们想定位一个空间进行写入我们的顺序是cylinder head sector我们称之为CHS寻址法。当然这里的CHS是我们的简称我们CHS是我们硬件上的称呼我们的软件不称之为CHS。我们的文件内容属性。都是我们的数据无非就是占几个扇区的问题既然我们能定位一个扇区那我们当然也能定位多个扇区了。我们查询我们Linux机器中的磁盘数据命令fdiskfdisk -l我们能利用的一些信息。loop叫做回环设备loop‑device是 Linux 内核提供的虚拟块设备。普通磁盘/dev/vda对应真实硬盘loop0‑loop7 并不对应真实硬件磁盘它把一个普通文件虚拟成一块磁盘设备。 你可以把一个.iso、.img文件“伪装” 成磁盘然后对它做分区、格式化、挂载。设备名容量 (MiB)总字节数扇区总数扇区大小设备类型/dev/loop063.7866,875,392130,616512B回环设备/dev/loop163.7866,879,488130,624512B回环设备/dev/loop273.9877,574,144151,512512B回环设备/dev/loop350.1052,535,296102,608512B回环设备/dev/loop4115.13120,717,312235,776512B回环设备/dev/loop573.9977,586,432151,536512B回环设备/dev/loop650.1052,535,296102,608512B回环设备/dev/loop7115.26120,856,576236,048512B回环设备/dev/vda40,960 (40GiB)42,949,672,96083,886,080512B虚拟磁盘 (系统盘)分区起始扇区结束扇区分区扇区数容量分区类型作用/dev/vda1204840952,0481 MiBBIOS bootGPT 分区表下的 BIOS 引导分区存放 GRUB 引导代码/dev/vda2409683,886,04683,881,95140 GiBLinux filesystem主分区挂载根目录/存放系统和用户数据关键字段解读字段含义本例值说明Units扇区单位换算1 扇区 512 字节Sector size (logical/physical)逻辑 / 物理扇区大小均为 512B传统磁盘标准I/O size (minimum/optimal)最小 / 最优 IO 大小均为 512B单次读写最小单位Disklabel type分区表类型gpt新一代分区表支持大于 2TB 磁盘Disk identifier磁盘唯一标识符GPT 磁盘的 UUID用于系统唯一识别磁盘扇区是从磁盘读出和写入信息的最小单位通常大小为 512 字节。磁头head数每个盘片一般有上下两面分别对应 1 个磁头共 2 个磁头磁道track数磁道是从盘片外圈往内圈编号 0 磁道1 磁道…靠近主轴的同心圆用于停靠磁头不存储数据柱面cylinder数磁道构成柱面数量上等同于磁道个数扇区sector数每个磁道都被切分成很多扇形区域每道的扇区数量相同圆盘platter数就是盘片的数量磁盘容量 磁头数 × 磁道 (柱面) 数 × 每道扇区数 × 每扇区字节数细节传动臂上的磁头是共进退的 (这点比较重要后面会说明)对早期的磁盘非常有效知道用哪个磁头读取哪个柱面上的第几扇区就可以读到数据了。但是 CHS 模式支持的硬盘容量有限因为系统用 8bit 来存储磁头地址用 10bit 来存储柱面地址用 6bit 来存储扇区地址而一个扇区共有 512Byte这样使用 CHS 寻址一块硬盘最大容量为256 * 1024 * 63 * 512B 8064 MB(1MB 1048576B)若按1MB1000000B来算就是 8.4GB三、从软件抽象我们的磁盘1、理解过程我们相信我们一定见过下面的这个东西 这是我们的磁带我们可以将里面的绳子从口中抽离出来我们里面装的是一个个同心圆我们拉出来就是一个个长长的绳子。将我们的磁盘拉长就变成了下面的图片。变成了一个对应的线性结构我们在Linux下一切皆文件我们这样就将我们的磁盘抽象成了一个线性的结构。这里我们抽象成了一个线性的结构那我们应该怎么进行访问这些数据呢 ok这里我们看到他的样子形似数组我们数组是怎么进行访问的采用数组下表的方式进行访问的。所以这里我们是不是也能使用数组下表进行访问呢答案是的所以以后我们对于扇区的访问就是我们对于该数组下表的访问。2、LBA地址这样我们每一个扇区就有了一个线性的地址起始这里就是我们的数组下标这种地址我们称之为LBA地址。3、真实的过程一个细节转动臂的磁头是共进退的柱面是一个逻辑上的概念其实就是每一面上相同半径的磁道逻辑上构成的柱面。所以磁盘物理上分了很多面但是在我看来逻辑上磁盘整体是由柱面卷起来的。磁道我们一个柱面的一个磁道我们将其展开就得到下面的一张图片我们看到了这个磁道展开是一个一维数组。那我们将整个柱面进行展开呢我们看到这是一个二维数组那我们将我们的磁盘进行展开呢我们磁盘有很多的柱面我们的磁盘展开会形成多张二维数组那么我们将储存二维数组的数组称之为三维数组。在我们软件层什么一维数组二维数组三维数组在我看来都是一维数组。所以每⼀个扇区都有⼀个下标我们叫做 LBA(Logical Block Address) 地址,其实就是线性 地址。所以怎么计算得到这个LBA地址呢LBA1000CHS 必须要 LBA 地址转成 CHS 地址CHS 如何转换成为 LBA 地址。OS 只需要使用 LBA 就可以了 LBA 地址转成 CHS 地址CHS 如何转换成为 LBA 地址。谁做啊磁盘自己来做固件 (硬件电路伺服系统)四、CHS和LBA地址的转化CHS转化LBA磁头数 * 每磁道扇区数 单个柱面的扇区总数解析我们在一个柱面上包含一个个盘面上的一圈磁道我们的柱面数我们的磁头数所以我们的磁头数x我们的每磁道的扇区数就是我们单个柱面的扇区总数。LBA 柱面号 C*单个柱面的扇区总数 磁头号 H每磁道扇区数 扇区号 S - 1即LBA 柱面号 C*(磁头数每磁道扇区数) 磁头号 H*每磁道扇区数 扇区号 S - 1解析我们是在哪一个柱面我们是在C号柱面我们要计算某一位置要将前面的所有的扇区都计算出来我们的扇区是从0开始进行编号的cx我们一个柱面的扇区总数 我们某一磁道的前面的磁道扇区总数我们特定的一个扇区。我们的数组从0开始所以要-1.扇区号通常是从 1 开始的而在 LBA 中地址是从 0 开始的柱面和磁道都是从 0 开始编号的总柱面磁道个数扇区总数等信息在磁盘内部会自动维护上层开机的时候会获取到这些参数。LBA 转成 CHS柱面号 C LBA // (磁头数 * 每磁道扇区数)【就是单个柱面的扇区总数】解析我们的LBA是我们具体的一个数组下表我们的磁头数x每磁道扇区的总数单个柱面的总数我们想看这个数组下表对应的是哪一个柱面所以我们用我们的数组下表除以一个面的扇区总数取整就能得到我们是在哪个柱面上。磁头号 H (LBA % (磁头数 * 每磁道扇区数)) // 每磁道扇区数、解析我们想知道我们对应的数据是哪个磁道的我们将我们的LBA地址和我们单个主面的扇区总数进行取模我们的余数就是我们的磁头号。我们的除是柱面号取模是我们的磁头号。扇区号 S (LBA % 每磁道扇区数) 1解析我们的LBA地址和磁道扇区数取模就能得到我们数组的下表因为数组下标是从0开始的所以我们要1是对应的扇区位置。//: 表示除取整所以从此以后在磁盘使用者看来根本就不关心 CHS 地址而是直接使用 LBA 地址磁盘内部自己转换。所以从现在开始磁盘就是一个元素为扇区 的一维数组数组的下标就是每一个扇区的 LBA 地址。OS 使用磁盘就可以用一个数字访问磁盘扇区了。
RELATED

相关推荐

基于SpringBoot的中国历史知识学习系统的设计与实现(源码+lw+部署文档+讲解等)

基于SpringBoot的中国历史知识学习系统的设计与实现(源码+lw+部署文档+讲解等)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

📅 2026/10/21 6:58:36
GPT-4都能写代码了,我花一年学AI基础是不是傻?这个决定让我少走两年弯路

GPT-4都能写代码了,我花一年学AI基础是不是傻?这个决定让我少走两年弯路

GPT-4都能写代码了,我花一年学AI基础是不是傻?这个决定让我少走两年弯路 工具狂欢后的空虚感:当AI遇到业务现实 在最初沉迷AI工具的蜜月期过后,我逐渐发现那些看似完美的解决方案在实际业务场景中频频碰壁。这促使我开始系统思考AI工具与业务需求之间的鸿沟,并探索更落地的解…

📅 2026/10/21 6:58:53
2026最新5款视频转文字软件测评 | 口碑筛选后的实用选择建议

2026最新5款视频转文字软件测评 | 口碑筛选后的实用选择建议

"截止2026年,我们从口碑靠前的产品里筛出了5款主流视频转文字工具,每一款都对应明确的使用场景,刚好匹配销售客服做客户拜访记录、销售对话整理、产品培训内容梳理的需求,大家可以直接对着自己的核心场景选。其中产品培训知识…

📅 2026/10/8 7:17:38
MORE NEWS

更多资讯

📰

Agent评测中“超时算失败吗”?关键看分母口径与终态设计

1. 做Agent评测久了,你会发现“超时算不算失败”是个假问题做Agent效果评估这几年,我遇到最能引发争论的一句话,就是“Agent 超时算失败吗?”直接回答“算”或“不算”都太轻了,因为真正的问题不在分子,而在…

📰

IDEA Generate All Setter加强版:批量生成Setter的实战与避坑指南

1. 从一个让人抓狂的DTO赋值场景说起做后端开发的人,几乎都经历过这样的时刻:接口文档刚定稿,数据库表结构刚评审完,你打开IDE准备写业务代码,结果发现要面对一个拥有三十多个字段的DTO。更让人崩溃的是,这…

📰

repo文件baseurl三种形式详解:绝对路径、变量模板与文件路径

1. 从一个让人抓狂的报错说起如果你维护过基于 repo 文件做批量仓库管理的环境,大概率见过这个场景:明明昨天还能正常同步的几十台机器,今天突然集体报错,提示找不到某个仓库地址,或者更诡异的是,一部分机器…

📰

从零构建轻量级数据读取与响应框架rea:设计、实现与避坑指南

1. 从“rea”这个标题说起:一个极简命名背后的完整项目思维第一次看到“rea”这个标题的时候,我脑子里蹦出来的第一反应是——这大概率又是一个被随手命名的项目。做技术的人都有这个毛病,项目文件夹建好的那一刻,名字往往是拍脑袋…

📰

Spring Boot课堂点名系统:从开发到部署的完整实战解析

点名这件事,在大学里几乎是每天都要发生一遍的日常。但真正做过相关开发的人会知道,一套看似简单的课堂点名系统,背后涉及的东西远比想象中多:学生端怎么签到、教师端怎么发起点名、考勤数据怎么统计、请假和补签怎么处理、异常请…

📰

SVM面试全攻略:从最大间隔到核技巧的核心考点解析

我去年集中刷算法岗面试题那段时间,最头疼的就是SVM。网上的总结要么是纯公式堆砌,要么是"最大间隔核函数"一句话带过,背完过两天就忘,一到手撕推导就露馅。后来我把市面上能见到的SVM面经问题全部梳理了一遍&#xff0…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬