Linux 之从硬件硬盘到文件系统的全面过渡
1. 理解硬件磁盘-服务器-机柜-机房机械磁盘是计算机中唯一的一个机械设备磁盘--- 外设慢容量大价格便宜磁盘物理结构磁盘存储结构磁道是同心圆扇区是磁盘存储数据的基本单位512字节块设备三片六面六个磁头磁头在传动臂的带动下共进退磁盘写入的时候是向柱面进行批量写入的如何定位一个扇区呢可以先定位磁头header确定磁头要访问哪一个柱面(磁道)cylinder定位一个扇区(sector)文件 内容属性 都是数据无非就是占据那几个扇区的问题能定位一个扇区了能不能定位多个扇区呢能扇区是从磁盘读出和写入信息的最小单位通常大小为 512 字节。磁头head数每个盘片一般有上下两面分别对应1个磁头共2个磁头磁道track数磁道是从盘片外圈往内圈编号0磁道1磁道...靠近主轴的同心圆用于停靠磁头不存储数据柱面cylinder数磁道构成柱面数量上等同于磁道个数扇区sector数每个磁道都被切分成很多扇形区域每道的扇区数量相同圆盘platter数就是盘片的数量磁盘容量磁头数 × 磁道(柱面)数 × 每道扇区数 × 每扇区字节数细节传动臂上的磁头是共进退的(柱面cylinder磁头head扇区sector显然可以定位数据了这就是数据定位(寻址)方式之一CHS寻址方式。 CHS寻址 对早期的磁盘非常有效知道用哪个磁头读取哪个柱面上的第几扇区就可以读到数据了。 但是CHS模式支持的硬盘容量有限因为系统用8bit来存储磁头地址用10bit来存储柱面地址用6bit来存储扇区地址而一个扇区共有512Byte这样使用CHS寻址一块硬盘最大容量 为256 * 1024 * 63 * 512B 8064 MB(1MB 1048576B)若按1MB1000000B来算就是 8.4GB磁盘的逻辑结构理解过程磁带上面可以存储数据我们可以把磁带“拉直”形成线性结构。卷起来就是同心圆拉出来就是一个线性结构那么磁盘本质上虽然是硬质的但是逻辑上我们可以把磁盘想象成为卷在一起的磁带那么磁盘的逻辑存储结构我们也可以类似于这样每一个扇区就有了一个线性地址(其实就是数组下标)这种地址叫做LBA。真实过程一个细节传动臂上的磁头是共进退的柱面是一个逻辑上的概念其实就是每一面上相同半径的磁道逻辑上构成柱面。所以磁盘物理上分了很多面但是在我们看来逻辑上磁盘整体是由“柱面”卷起来的。磁盘的真实情况是磁道某一盘面的某一个磁道展开即一维数组柱面整个磁盘所有盘面的同一个磁道即柱面展开柱面上的每个磁道扇区个数是一样的可以理解成二维数组。整个盘整个磁盘不就是多张二维的扇区数组表(三维数组)所有寻址一个扇区先找到哪一个柱面(Cylinder) ,在确定柱面内哪一个磁道(其实就是磁头位置 Head)在确定扇区Sector所以就有了CHS。之前学过C/C的数组在我们看来其实全部都是一维数组所以每一个扇区都有一个下标我们叫做LBA(Logical Block Address)地址,其实就是线性地址。所以怎么计算得到这个LBA地址呢LBA1000CHS 必须要 LBA地址转成CHS地址CHS如何转换成为LBA地址。OS只需要使用LBA就可以了LBA地址转成CHS地址CHS如何转换成为LBA地址。谁做啊磁盘自己来做固件(硬件电路伺服系统)CHS LBA地址CHS转成LBA磁头数*每磁道扇区数 单个柱面的扇区总数LBA 柱面号C*单个柱面的扇区总数 磁头号H*每磁道扇区数 扇区号S - 1即LBA 柱面号C*(磁头数*每磁道扇区数) 磁头号H*每磁道扇区数 扇区号S - 1扇区号通常是从1开始的而在LBA中地址是从0开始的柱面和磁道都是从0开始编号的总柱面磁道个数扇区总数等信息在磁盘内部会自动维护上层开机的时候会获取到这些参数。LBA转成CHS柱面号C LBA // (磁头数*每磁道扇区数)【就是单个柱面的扇区总数】磁头号H (LBA % (磁头数*每磁道扇区数)) // 每磁道扇区数扇区号S (LBA % 每磁道扇区数) 1//: 表示除取整所以从此往后在磁盘使用者看来根本就不关心CHS地址而是直接使用LBA地址磁盘内部自己转换。所以从现在开始磁盘就是一个 元素为扇区 的一维数组数组的下标就是每一个扇区的LBA地址。OS使用磁盘就可以用一个数字访问磁盘扇区了。2. 引入文件系统引入块概念其实硬盘是典型的“块”设备操作系统读取硬盘数据的时候其实是不会一个个扇区地读取这样 效率太低而是一次性连续读取多个扇区即一次性读取一个”块”block。 硬盘的每个分区是被划分为一个个的”块”。一个”块”的大小是由格式化的时候确定的并且不可 以更改最常见的是4KB即连续八个扇区组成一个”块”。”块”是文件存取的最小单位。注意• 磁盘就是一个三维数组我们把它看待成为一个一维数组数组下标就是LBA每个元素都是扇 区• 每个扇区都有LBA那么8个扇区一个块每一个块的地址我们也能算出来。• 知道LBA块号LBA/8 • 知道块号LAB块号*8n.(n是块内第几个扇区)引入分区概念其实磁盘是可以被分成多个分区partition的以Windows观点来看你可能会有一块磁盘并且将 它分区成C,D,E盘。那个C,D,E就是分区。分区从实质上说就是对硬盘的一种格式化。但是Linux的设备 都是以文件形式存在那是怎么分区的呢柱面是分区的最小单位我们可以利用参考柱面号码的方式来进行分区其本质就是设置每个区的起始柱面和结束柱面号码。 此时我们可以将硬盘上的柱面分区进行平铺将其想象成一个大的平面如下图所示注意:柱面大小一致扇区个位一致那么其实只要知道每个分区的起始和结束柱面号知道每一个柱面多少个扇区那么该分区多大其实和解释LBA是多少也就清楚了.引入inode概念之前我们说过 文件数据属性 我们使用ls -l 的时候看到的除了看到文件名还能看到文件元数据属性。每行包含7列模式硬链接数文件所有者组大小最后修改时间文件名ls -l读取存储在磁盘上的文件信息然后显示出来其实这个信息除了通过这种方式来读取还有一个stat命令能够看到更多信息代码语言javascriptAI代码解释huhcss-ecs-6579:~/test$ stat code.c File: code.c Size: 1744 Blocks: 8 IO Block: 4096 regular file Device: fc01h/64513d Inode: 547045 Links: 1 Access: (0664/-rw-rw-r--) Uid: ( 1002/ hu) Gid: ( 1002/ hu) Access: 2025-08-13 16:25:18.011548344 0800 Modify: 2025-08-13 16:25:18.011548344 0800 Change: 2025-08-13 16:25:18.015548373 0800 Birth: 2025-08-13 16:25:18.011548344 0800 huhcss-ecs-6579:~/test$到这我们要思考一个问题文件数据都储存在”块”中那么很显然我们还必须找到一个地方储存文件的元信息属性信息比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode中文译名为”索引节点”。每一个文件都有对应的inode里面包含了与该文件有关的一些信息。为了能解释清楚inode我们需要是深入了解一下文件系统。注意Linux下文件的存储是属性和内容分离存储的Linux下保存文件属性的集合叫做inode一个文件一个inodeinode内有一个唯一的标识符叫做inode号所以一个文件的属性inode长什么样子呢代码语言javascriptAI代码解释struct ext2_inode { __le16 i_mode; /* File mode */ __le16 i_uid; /* Low 16 bits of Owner Uid */ __le32 i_size; /* Size in bytes */ __le32 i_atime; /* Access time */ __le32 i_ctime; /* Creation time */ __le32 i_mtime; /* Modification time */ __le32 i_dtime; /* Deletion Time */ __le16 i_gid; /* Low 16 bits of Group Id */ __le16 i_links_count; /* Links count */ __le32 i_blocks; /* Blocks count */ __le32 i_flags; /* File flags */ union { struct { __le32 l_i_reserved1; } linux1; struct { __le32 h_i_translator; } hurd1; struct { __le32 m_i_reserved1; } masix1; } osd1; /* OS dependent 1 */ __le32 i_block[EXT2_N_BLOCKS];/* Pointers to blocks */ __le32 i_generation; /* File version (for NFS) */ __le32 i_file_acl; /* File ACL */ __le32 i_dir_acl; /* Directory ACL */ __le32 i_faddr; /* Fragment address */ union { struct { __u8 l_i_frag; /* Fragment number */ __u8 l_i_fsize; /* Fragment size */ __u16 i_pad1; __le16 l_i_uid_high; /* these 2 fields */ __le16 l_i_gid_high; /* were reserved2[0] */ __u32 l_i_reserved2; } linux2; struct { __u8 h_i_frag; /* Fragment number */ __u8 h_i_fsize; /* Fragment size */ __le16 h_i_mode_high; __le16 h_i_uid_high; __le16 h_i_gid_high; __le32 h_i_author; } hurd2; struct { __u8 m_i_frag; /* Fragment number */ __u8 m_i_fsize; /* Fragment size */ __u16 m_pad1; __u32 m_i_reserved2[2]; } masix2; } osd2; /* OS dependent 2 */ }; /* * Constants relative to the data blocks */ #define EXT2_NDIR_BLOCKS 12 #define EXT2_IND_BLOCK EXT2_NDIR_BLOCKS #define EXT2_DIND_BLOCK (EXT2_IND_BLOCK 1) #define EXT2_TIND_BLOCK (EXT2_DIND_BLOCK 1) #define EXT2_N_BLOCKS (EXT2_TIND_BLOCK 1) 备注EXT2_N_BLOCKS 15

相关新闻

SpringSecurity踢出指定用户

SpringSecurity踢出指定用户

SpringSecurity中可以使用 SessionRegistry 的实现类 SessionRegistryImpl 来获取session相关信息,可以通过这个实现类来踢出用户。 SpringSecurity配置 EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter {AutowiredISysUserSe…

2026/5/17 10:29:26 阅读更多 →
Spring中bean的注入方式

Spring中bean的注入方式

平常的Java开发中,程序员在某个类中需要依赖其它类的方法。通常是new一个依赖类的实例再调用该实例的方法,这种开发存在的问题是new的类实例不好统一管理。 Spring提出了依赖注入的思想,即依赖类不由程序员实例化,而是通过Spring…

2026/7/8 2:35:47 阅读更多 →
Flutter 三方库 clean_feature_gen 的鸿蒙化适配指南 - 掌握整洁架构自动化生成技术、助力大中型项目构建高内聚、低耦合且极速迭代的功能模块体系

Flutter 三方库 clean_feature_gen 的鸿蒙化适配指南 - 掌握整洁架构自动化生成技术、助力大中型项目构建高内聚、低耦合且极速迭代的功能模块体系

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net Flutter 三方库 clean_feature_gen 的鸿蒙化适配指南 - 掌握整洁架构自动化生成技术、助力大中型项目构建高内聚、低耦合且极速迭代的功能模块体系 前言 在 OpenHarmony 鸿蒙应用应对“业…

2026/7/7 2:20:26 阅读更多 →

最新新闻

LSKNet 大选择性核注意力 PyTorch 实现:遥感目标检测 3 大基准 SOTA 复现

LSKNet 大选择性核注意力 PyTorch 实现:遥感目标检测 3 大基准 SOTA 复现

LSKNet大选择性核注意力:遥感目标检测的PyTorch实战指南在遥感图像分析领域,微小目标的精确检测一直是个棘手难题。传统方法往往受限于固定尺度的感受野,难以同时处理不同尺寸和复杂背景的目标。本文将深入解析LSKNet(Large Selec…

2026/7/8 8:49:46 阅读更多 →
GEO 工具怎么选:AI 可见度监测、AI 心智审计、长效运营闭环不是一回事

GEO 工具怎么选:AI 可见度监测、AI 心智审计、长效运营闭环不是一回事

开篇导语2026 年生成式引擎优化(GEO)赛道工具层出不穷,但绝大多数企业都陷入同一个误区:混淆单次品牌体检、短期关键词监测、长效 AI 心智运营、品牌风险审计四类核心需求。市面上主流工具 GEO 探针、AllrightTOP、AiSaysTOP 功能…

2026/7/8 8:47:45 阅读更多 →
快速提升网站权重 www.xssdgy.cn

快速提升网站权重 www.xssdgy.cn

提升网站权重并非一蹴而就,而是一项需要耐心和持续投入的系统工程。根据行业经验,一个新站通常需要3到6个月甚至更长时间的持续优化,才能看到权重的显著提升。针对 www.xssdgy.cn 这个网站,可以从以下几个核心方面入手&#xff1a…

2026/7/8 8:47:45 阅读更多 →
webpack:前端打包领域的老牌基建

webpack:前端打包领域的老牌基建

文章目录webpack:前端打包领域的老牌基建webpack:前端打包领域的老牌基建 webpack 在 GitHub 上拿到了 65,834 颗 Star,是前端工程化绕不开的一块基础设施。 webpack 是一个模块打包工具。它最初的目标是把 JavaScript 文件打包成浏览器可用…

2026/7/8 8:43:43 阅读更多 →
原神成就一键导出工具:YaeAchievement终极指南

原神成就一键导出工具:YaeAchievement终极指南

原神成就一键导出工具:YaeAchievement终极指南 【免费下载链接】YaeAchievement 更快、更准的原神数据导出工具 项目地址: https://gitcode.com/gh_mirrors/ya/YaeAchievement 还在为原神成就数据导出而烦恼吗?YaeAchievement作为一款专为原神玩家…

2026/7/8 8:41:42 阅读更多 →
PyTorch 1.13 多框架随机种子设置:Python/Numpy/TensorFlow 5行代码统一控制

PyTorch 1.13 多框架随机种子设置:Python/Numpy/TensorFlow 5行代码统一控制

PyTorch 1.13 多框架随机种子统一控制:5行代码实现全局可复现性在机器学习项目中,实验结果的可复现性一直是开发者面临的核心挑战之一。当项目同时涉及Python标准库、NumPy、PyTorch和TensorFlow等多个框架时,每个框架独立的随机数生成机制会…

2026/7/8 8:39:42 阅读更多 →

日新闻

3大核心能力重塑《明日方舟》游戏体验:MAA自动化助手的革命性突破

3大核心能力重塑《明日方舟》游戏体验:MAA自动化助手的革命性突破

3大核心能力重塑《明日方舟》游戏体验:MAA自动化助手的革命性突破 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手,全日常一键长草!| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目地址: …

2026/7/8 0:00:48 阅读更多 →
MyBatis 批量操作深度优化——从 N+1 到批处理的全路径

MyBatis 批量操作深度优化——从 N+1 到批处理的全路径

MyBatis 批量操作深度优化——从 N1 到批处理的全路径 一、从"功能正确"到"性能可接受"——MyBatis 批量操作的三段式进化 MyBatis 在日常增删改查场景中几乎是无感的——实体映射直观、SQL 控制灵活。但当数据量从千级上升到十万级、百万级,许…

2026/7/8 0:00:48 阅读更多 →
工业负载控制方案:TPD2015FN与PIC18F45K22应用解析

工业负载控制方案:TPD2015FN与PIC18F45K22应用解析

1. 工业负载控制方案概述在工业自动化、电机驱动和照明控制等高需求场景中,可靠地控制电感和电阻负载是核心挑战之一。TPD2015FN作为东芝的8通道高端智能功率开关IC,配合PIC18F45K22微控制器,能够构建一套稳定、高效的负载控制系统。这套组合…

2026/7/8 0:02:48 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/7 14:24:45 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/7 12:34:47 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/7 15:59:06 阅读更多 →

月新闻