0

0

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

星夢妙者

星夢妙者

发布时间: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为组描述符,保存该组内的详细统计等属性信息。比如本组内从哪里到哪里是哪部分内容,本组被使用了多少等。

浚心时尚购物商城程序
浚心时尚购物商城程序

时尚购物程序v1.01、全立体设计。此系统由3个Flash动画为主线(正式版带原文件),设计更形象,网站更有吸引力。这种设计在网店系统内绝无仅有,使您的网店与众不同。2、内置音乐播放器,简单灵活的操作即可完成设置,前台任意调用。并带详细说明文件,一看就懂。合理使用此功能,可使网站更富渲染力。3、支持多图显示,每件产品最多可以上传9张图片。4、后台功能强大,销售管理,财务管理,在线支付平台管理等功能

下载

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、补充内容>

相关专题

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

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

197

2025.06.09

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

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

190

2025.07.04

string转int
string转int

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

338

2023.08.02

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

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

542

2024.08.29

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

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

53

2025.08.29

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

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

197

2025.08.29

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

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

352

2023.06.29

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

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

2075

2023.08.14

菜鸟裹裹入口以及教程汇总
菜鸟裹裹入口以及教程汇总

本专题整合了菜鸟裹裹入口地址及教程分享,阅读专题下面的文章了解更多详细内容。

0

2026.01.22

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.6万人学习

Django 教程
Django 教程

共28课时 | 3.4万人学习

Excel 教程
Excel 教程

共162课时 | 12.9万人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号