前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >linux文件系统进阶篇

linux文件系统进阶篇

作者头像
咬咬
发布2024-06-12 14:13:23
590
发布2024-06-12 14:13:23
举报
文章被收录于专栏:学习笔记学习笔记

目录

前言:

认识磁盘:

CHS寻址法:

LBA寻址法:

Data blocks数据块:

Block Bitmap(块位图):

Inode Table(inode 表):

Inode Bitmap(Inode位图):

Group Description Table(组描述表):

Super Block(超级区块):

文件系统的挂载:


前言:

在之前我写过一篇关于linux的虚拟文件系统的博客,不过那篇主要是介绍打开的文件是如何在linux系统中被管理和存储的,那么这篇进阶版文件系统就要介绍一下,当文件没有被打开的时候,它在linux系统中是如何被管理和存储的。

认识磁盘:

对于文件的不带电存储,肯定第一想到的是磁盘,当然现在磁盘已经几乎没有民用的了,民用的磁盘已经被固态硬盘取代了,因为固态硬盘的读取效率更高,但也意味着成本更高。所以对于企业级的存储设备,大多数企业还是会选择磁盘这种性价比更高的存储设备,下面我们来简单认识一下磁盘:

磁盘:圆形的碟片,主要存储数据的地方,磁盘工作时会被中间的马达带动高速转动,磁盘上面其实就是有很多小磁铁,用于存储数据。 磁头臂:被马达带动上面的磁头左右扫描磁盘。

注意磁盘不止一片,下面还有好几片,磁头臂也不止一个,每个磁盘上面都有一个磁头臂,磁头臂和磁盘是不接触的!!!磁头臂是悬浮在磁盘上的,工作时通过磁头改变对应磁盘上的小磁铁的磁极来实现数据0和1的转换。

CHS寻址法:

如上图所示,我们要找到一个文件,就得先确定它在哪个磁盘也就是找到柱面(Cylinder),然后再通过这个柱面找到这个柱面上得磁头(Header),磁头左右扫描定位磁道,磁盘的高速旋转来确定数据在哪个扇区(Sector), 这就是CHS寻址法。所以我们只要有每一个文件的CHS就能找到每一个文件。

上述讲的是物理的寻址方法,但liunx操作系统并不是这样定位文件的,因为CHS方法耦合度太高了,linux是采用LBA(Logical Block Address)逻辑区块地址的方法来对磁盘的存储进行逻辑抽象。

LBA寻址法:

想必大家小时候都见过磁带:

磁带在里面的数据一开始卷在一起的,当开始读取的时候就会转动齿轮开始读取,然后卷着得数据,我们就可以线性读取,我们的磁盘也可以做到。磁盘被操作系统扫描后,也可以看作成一个线性的数组,这样对磁盘的管理就是对数组的管理,所以整个磁盘可以抽象成下图:

我们将数组的每4kb规定为一个逻辑块,以后我们的文件都以块为单位存储,内存大于一个块的,用多个块存储,小于一个块的,就用一个块存储(这个块中剩余的被浪费) ,分为块后,因为数组可能太大不好管理,就进行了分区,进行分组管理,接下来就看看每个分组里面是怎么管理的吧:

每个分区内部又都被分为块组,每个块组里面又还有细分不同的功能区,下面我来详细介绍一下这些功能区:

Data blocks数据块:

顾名思义这里是用来存放文件数据的地方,里面的结构大致如下图:

里面都是以块为单位的,块的大小有1kb,2kb,4kb,一般使用4kb大小,每个块都有编号,这样方便inode记录,每个区块只能存放一个文件的数据。

Block Bitmap(块位图):

这里面存放的是01序列,用来表示Data blocks里的哪些块被占用了,哪些块没有被占用,占用的用1表示,没占用的用0表示。

Inode Table(inode 表):

这块表非常重要,里面存放了文件的属性主要有:

文件的权限。 文件的拥有者和所属组。 文件的大小。 文件的建立和改变状态的时间。 最近一次读取时间。 文件的inode编号。 文件的真正内容指向。(int datablocks[N])

注意这里面是没有文件名的哦!!!为什么?后面讲。

里面文件内容的指向仅用了一个数组(datablocks[N])这里面的N一般是15,这里你肯定会有疑问,这么小的一个数组,如果我有一个大文件他该怎么办呢?这就需要我们看看这个数组内部:

0-11号直接寻址,12号间接寻址,13号双间接寻址,14号三间接寻址,通过这样的方法就可以找到更多的块,实现大文件的存储。

再来谈谈inode编号,inode编号对文件来说很重要,一个文件对应一个inode编号,我们每次查找文件都必须先得到文件得inode,如何得到呢?文件属性里面是没有文件名的,那文件名在哪呢?在目录的文件内容里,目录也是一个文件,它的文件内容就是文件名和它的inode,没错目录文件就像一张映射表,里面有这个目录下每个文件的文件名和inode编号,所以每次查找文件linux都会先查找目录文件的内容来获取该文件的inode编号,再通过inode编号去inode table里面查找该文件的属性,在属性里面找到databalock数组,通过这个数组最后找到文件的数据。

Inode Bitmap(Inode位图):

和block bitmap功能相似,里面是01序列,用来表示inode table里哪些块被占用了。

Group Description Table(组描述表):

这个主要用来描述这个群组在这个分区的开始与结束区块,以及说明每个区段(inode table,inode bitmap,data block等等)分别介于哪个区块之间。

Super Block(超级区块):

这个区块对文件系统来说很重要,里面主要存放了:

数据区块与inode的总量。 未使用与已使用的inode与数据区块的数量。 数据区块与inode的大小。 文件最近一次修改时间,最近一次检验磁盘。 一个有效位数值,若此文件系统已被挂载,则有效位为0,若未被挂载则有效位为1。

看似Surper Block里面存放的数据关乎整个分区,但它不是放在这个分区的最开始,而是放在了这个分区的几个组里,为什么?因为Surper Block太过重要,如果磁盘不小心被刮花,刮到这片区域,整个文件系统就彻底报废,所以多设置几个Surper Block同步更新里面的数据,当部分Surper Block里的数据损坏时,就可以用其他没有损坏的Surper Block里的数据来对其进行恢复,从而保证了文件系统的稳定性。

文件系统的挂载:

上述讲到的文件系统是linux入门级文件系统ext2,在之后还有ext3,ext4,在最初一个分区只能使用一个文件系统,要使用这个文件系统我们就要先挂载该文件系统,再使用。

如何挂载:

查看挂载的文件系统:

代码语言:javascript
复制
mount

查挂载的分区:

代码语言:javascript
复制
df -h

先创建一个目录:

代码语言:javascript
复制
makdir mymnt

先准备一个分区disk.img,其实就是一个文件,这个文件的大小决定了分区的大小,在这个分区挂载目录mymnt:

代码语言:javascript
复制
mount disk.img mymnt

以后在目录mymnt里面新建文件,就是在新建的分区disk.img里面新建文件。

卸载分区:

代码语言:javascript
复制
umount mymnt/
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-06-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言:
  • 认识磁盘:
  • CHS寻址法:
  • LBA寻址法:
  • Data blocks数据块:
  • Block Bitmap(块位图):
  • Inode Table(inode 表):
  • Inode Bitmap(Inode位图):
  • Group Description Table(组描述表):
  • Super Block(超级区块):
  • 文件系统的挂载:
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档