讲师中心 微信公众号

工具推荐

视频效率加速
updream

一键生成高质量推广成片

AniShort
AniShort

AI短剧协同制作平台

Laper
Laper

剧本策划到成片协作

剧云
剧云

中文短剧剧本制作平台

【Linux】————磁盘与文件系统

小辰吖_1648

小辰吖_1648

发布时间:2025-06-20 14:44:34

|

283人浏览过

|

来源于php中文网

原创

一、磁盘的物理结构

磁盘的物理结构如图所示:

【Linux】————磁盘与文件系统其中具体的物理存储结构如下:

【Linux】————磁盘与文件系统磁盘中存储的基本单位为扇区,一个扇区的大小通常为512字节或4KB,我们这里暂且认为是512字节。一般来说,一个扇区都是512字节,同半径所有的扇区构成了一圈磁道。

因此,当我们需要读取指定文件数据时,首先要确定是哪一个盘面,其次再确定是哪一个磁道,最后根据扇区的编号去定位扇区。通过磁头、柱面(磁道)、扇区来定位扇区的方法称为CHS定位法。

一个普通文件包括属性和内容,本质上都是数据,占据一个或多个扇区。我们既然能够用CHS定位任意一个扇区,就能定位任意多个扇区,从而从硬件角度读取或写入文件。

二、磁盘逻辑抽象我们已经知道如果操作系统可以得知CHS的地址,就能够访问任意一个扇区。但是由于操作系统是软件,磁盘是硬件,为了防止硬件发生迭代变化而操作系统也需要随之变化,就需要做好操作系统与硬件的解耦工作,因此操作系统内部使用的不是CHS的地址。

为了减少进行IO操作的频率,操作系统与外设进行IO操作的基本单位大小是4KB(可以调整)。即使只需要修改一个字节的数据,也需要把这个数据所在的4KB大小的数据都加载进内存,修改好后再统一写回磁盘,因此我们把磁盘称为块设备。操作系统需要有一套新的地址来进行块级别的访问。

把磁盘磁道看作一个连续的空间结构:

【Linux】————磁盘与文件系统扇区就相当于连续的数组,此时定位一个扇区只需要一个数组下标。由于操作系统是以4KB为单位进行IO的,所以一个操作系统级别的文件块要包括8个扇区。操作系统不关心扇区的概念,计算机常规的访问地址是通过起始地址和偏移量的方式进行的,因此操作系统访问数据块时,只需要知道数据块的起始地址和4KB就可以了,把数据块看作一种类型。

【Linux】————磁盘与文件系统三、文件系统由于磁盘很大,为了更加方便的管理,操作系统对磁盘块进行了分区。分区后再对每一个磁盘区域进行分组。具体结构如下:

【Linux】————磁盘与文件系统在操作系统对磁盘进行分区时,会在最开始的位置设置一个Boot Block,这段区域主要保存与操作系统相关的内容,比如分区表、镜像地址等。一般而言,这个分区存在于0号盘面的0号磁道的1号扇区。当用户开机时,操作系统会加载磁盘的驱动,读取磁盘的分区表,再从特定分区的开始位置读取到操作系统所在的地址,并加载操作系统,此时操作系统才算真正运行起来。

之后是操作系统对每一个分区进行分组形成的诸多Block group,即块组。每一个Block group都有上图所示的6块区域。

1、Super BlockSuper Block保存的是文件系统的所有属性信息,包括文件系统的类型、整个分组的情况。记录的信息主要有:block和inode的总量,未使用的block和inode的数量,一个block和inode的大小,最近一次挂载的时间,最后一次写入数据的时间,最近一次写入磁盘的时间等其他文件系统的相关信息。

2、Group Descriptor TableGDT为组描述符,保存该组内的详细统计等属性信息。比如本组内从哪里到哪里是哪部分内容,本组被使用了多少等。

Linuxdo Application
Linuxdo Application

为 Linux.do 注册撰写高通过率、去 AI 化的中文小作文。进行自适应调查以了解申请人的真实背景,...

下载

3、inode Table一般而言,我们把文件内部所有属性的集合称为inode节点,一般大小为128字节。一个文件会有一个inode,一个分组内会有大量的文件,也有大量的inode节点,所以在组内会有一个专门的区域来保护这些inode节点,这个区域就称为inode Table,也叫inode表。

在分组内部,每个inode表都有自己的inode编号,inode编号本身也属于对应文件的属性,Linux查找一个文件的时候,也是通过inode编号来查找的。

一个inode对应一个文件,该文件的inode属性和该文件对应的数据块是有映射关系的。

4、Data Blocks文件的内容是变化的,用数据块来进行保存。所以要保存一个有效文件的内容,就需要n个数据块。如果有多个文件就需要多个数据块。这些数据块所在的区域就是Data Blocks。一个数据块的默认大小是4KB。

Linux查找一个文件,首先找到该文件的inode。在inode结构体内部有一个int blocks[NUM]数组,数组内记录了存储该文件内容的数据块的地址。一个分组中,百分之95以上的内容都是Data Blocks。

当操作系统要加载一个文件时,只加载该文件的inode节点。而inode节点中包含该文件内容数据块的映射关系,想要访问哪部分内容,就根据映射关系把哪一部分内容加载到内存中。

5、inode Bitmapinode Bitmap是一个位图结构,每个bit表示一个inode是否空闲可用。

6、Block BitmapBlock Bitmap是一个位图结构,记录着Data Block中哪个数据块已经被占用,哪个数据块没有被占用。

四、Linux下文件系统在Linux中,使用ls命令加上-i选项,就可以观察到文件的inode:

【Linux】————磁盘与文件系统1、inode与文件名Linux系统只认inode值,且inode属性中不会包含文件名,因为文件名只是提供给用户看的

任何一个文件一定存在于目录中,目录其实也是一个文件,也有自己的inode值和对应的数据块,目录的数据库块里保存的是该目录的文件名和inode值对应的映射关系,而且在目录内,文件名与inode编号互为key值

inode number在一个分区内唯一有效,不能跨分区使用。根据inode number可以确定该文件在当前分区的哪一个分组。

2、文件的增删查改2.1、查看文件内容首先要在当前目录下找到目标文件的inode number。一个目录也是文件,也隶属于一个分区,在该分区中通过目标文件的inode number找到分组,在该组的inode Table区域找到目标文件的inode。通过目标文件的inode与对应Data blocks的映射关系,找到该文件的数据块,加载到操作系统,最后显示在显示器上。2.2、删除文件在当前目录下,根据文件名找到目标文件的inode number。根据inode number找到目标文件的inode,结合与对应Data blocks的映射关系,把block bitmap对应的比特位设置为0。根据inode number把inode bitmap对应的比特位设置为0。2.3、创建文件操作系统在目录所处的分组里扫描inode bitmap,找到空余的位置并设置为1,获得inode number。把该文件创建出来后的默认属性填充到对应的inode中。在当前所处的目录文件的Data blocks里追加一条新的文件名与inode number的映射关系。2.4、补充内容>

热门AI工具

更多
Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

相关专题

更多
golang结构体相关大全
golang结构体相关大全

本专题整合了golang结构体相关大全,想了解更多内容,请阅读专题下面的文章。

5414

2025.06.09

golang结构体方法
golang结构体方法

本专题整合了golang结构体相关内容,请阅读专题下面的文章了解更多。

5591

2025.07.04

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

7459

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3545

2024.08.29

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

4668

2025.08.29

C++中int的含义
C++中int的含义

本专题整合了C++中int相关内容,阅读专题下面的文章了解更多详细内容。

3125

2025.08.29

数据库三范式
数据库三范式

数据库三范式是一种设计规范,用于规范化关系型数据库中的数据结构,它通过消除冗余数据、提高数据库性能和数据一致性,提供了一种有效的数据库设计方法。本专题提供数据库三范式相关的文章、下载和课程。

3165

2023.06.29

如何删除数据库
如何删除数据库

删除数据库是指在MySQL中完全移除一个数据库及其所包含的所有数据和结构,作用包括:1、释放存储空间;2、确保数据的安全性;3、提高数据库的整体性能,加速查询和操作的执行速度。尽管删除数据库具有一些好处,但在执行任何删除操作之前,务必谨慎操作,并备份重要的数据。删除数据库将永久性地删除所有相关数据和结构,无法回滚。

4221

2023.08.14

Go-Zero API开发使用教程
Go-Zero API开发使用教程

本专题聚焦Go-Zero的API开发,拆解.api描述文件的语法结构、路由与分组定义、参数绑定与校验规则,说明统一响应体、JWT鉴权、跨域与接口文档生成的落地方式,并给出网关聚合与接口测试的实践建议。

0

2026.11.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Docker Compose使用手册
Docker Compose使用手册

共0课时 | 0人学习

Docker官方入门手册
Docker官方入门手册

共0课时 | 0人学习

Revel 官方开发手册
Revel 官方开发手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn