首页 > 运维 > linux运维 > 正文

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

星夢妙者
发布: 2025-06-20 14:44:34
原创
204人浏览过

一、磁盘的物理结构

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

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

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

以上就是【Linux】————磁盘与文件系统的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

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