当前位置: 首页 > news >正文

linux——文件系统

  • 被打开的文件放到内存中
  • 没有被打开的文件放到磁盘

1. 硬件-->磁盘

  • 磁盘的存储基本单位:扇区(512字节)

512字节写入到磁盘,磁盘如何转动:

磁盘写入的时候是向柱面进行批量写入的

CHS地址:cylind header sector

柱面,磁头,扇区:由这三个CHS地址就能够找到位置

将每一个柱面平面展开就成为了一个线性结构:磁带例子--->卷起来,拉出来一条线。

抽象成线性结构之后,就相当于是一个数组,访问这个数组下标就可以访问磁盘文件。

os访问磁盘不以扇区为单位,而是以块儿为单位,一般为4KB(可以调整),一块一般为8个扇区

  • 文件系统使用磁盘块儿,是以4KB为单位的

2. 文件系统

文件 = 内容+属性。

文件属性存储在inode里面,文件内容存在Data Block里面。

block bitmap

    • 对应记录data block中那些数据空间被占用
    • data block中有多少个bit,block bitmap中就有多少bit

inode bitmap

    • 对应记录inode table
    • inode table中有多少个bit,inode bitmap中就有多少bit

  • block bitmap和inode bitmap通过置0或者1的方式标识对应空间的占用情况。
  • 在删除数据的时候,将iNode/blockbitmap置0,恢复数据的时候将位图里面各个位置置1就行。
  • 每个组里面有多少个inode,data block就决定了整个block group,分别决定了其它的一些块儿信息。

  • inode和data block是跨组(block group)的
  • inode不能跨分区(partition),所以在同一个分区内部,inode编号,块号都是唯一的。
  • 如何确定文件在那个inode里面:除模运算。

上图各个模块儿解释

Block Group:ext2文件系统会根据分区的大小划分为数个Block Group。而每个Block Group都有着相
同的结构组成。政府管理各区的例子
超级块(Super Block):存放文件系统本身的结构信息。记录的信息主要有:bolck 和 inode的总量,
未使用的block和inode的数量,一个block和inode的大小,最近一次挂载的时间,最近一次写入数据的
时间,最近一次检验磁盘的时间等其他文件系统的相关信息。Super Block的信息被破坏,可以说整个
文件系统结构就被破坏了
GDT,Group Descriptor Table:块组描述符,描述块组属性信息,有兴趣的同学可以在了解一下
块位图(Block Bitmap):Block Bitmap中记录着Data Block中哪个数据块已经被占用,哪个数据块没
有被占用
inode位图(inode Bitmap):每个bit表示一个inode是否空闲可用。
i节点表:存放文件属性 如 文件大小,所有者,最近修改时间等
数据区:存放文件内容

格式化: 在使用之前将super block,GDT,block bitmap,inode bitmap这几个字段全部清0——》》写入文件系统的管理信息。

super block

不是所有的组里面都要包含super block,只有个别包含

每个block group中都有super block,他们里面的内容完全一样,为了保证super block的安全性,会在每一个block group中备份以保证文件系统的安全,如果一个block group中的super block挂掉,可以从其他的block group中恢复。

OS如何管理磁盘:

  • OS会将每个partition的super block,GDT的信息加载到内存中,使用链表将他们链接起来,对链表管理,就是对文件系统的增删查改。
  • 将inode bitmap和block bitmap置0或者1就行了

如何根据inode找到data block:

  • 在struck inode中存储了一个data block的编号信息,根据inode就可以找到文件数据。

linux下如何看待目录 :

  • 目录也有自己的inode,他也是按照内容和属性相分离存储的。目录的内容保存的是文件名和inode的映射关系,文件名和inode是互为键值,都是唯一的。所以在磁盘中保存文件没有了目录的概念,磁盘中保存的所有数据就是inode和数据。目录和普通文件保存方案一样。
  • 文件名不会作为属性保存在文件的inode中,保存在当前文件所需的目的数据内容当中
  • 访问磁盘上的文件只认inode。打开路径+文件名—>
  • 先打开所在路径。读取目录里面的数据内容,得到文件名和inode的映射关系,文件名→inode→inode 进行文件内的查找
  • 找到一个目录也要找到一个目录名的inode的,如何找到呢?→开机的时候固定打开“/”目录。→找到任何文件都必须要有路径。
    • 访问文件的时候进程提供路径,进行路径解析。
  • 自己提供的文件名+文件路径组成了文件。
  • OS在进行路径解析的时候,会把我们历史访问的所有的目录(路径)形成一颗多叉树,进行保存。—>linux系统树状目录结构。—>目录结构是内存级(里面是临时数据)的。—>实验现象:在第一次查目录文件的时候会比较慢,第二次后面就会快很多。

文件加载过程:

磁盘→分区→格式化→我们依旧不能使用这个分区。我们的分区,一定要和特定的一个目录进行关联→通过进入这个目录,就相当于进入这个分区→挂载。要使用分区就需要挂载得到目录。

inode存储文件属性结构:

3. 软硬链接

软连接

软连接是一个独立的文件,因为他有独立的inode number

软连接能干啥:相当于是windows下的快捷方式

软连接内容保存的是文件的路径

设置软连接:

  • 增加软连接:
//为文件建立软链接
ln -s ./soft.txt soft_link
//为目录建立软链接
ln -s ./FileSystem/ link_file
  • 删除软连接

直接rm 删除对应的文件就可以了

硬链接

ln code.c code-hard

硬链接本质不是一个独立的文件,没有独立的inode。本质是一组新的文件名和目标inode number的映射关系。

硬链接数相当于是一个引用计数。

硬链接作用:

  1. 对文件进行备份
  • 任何一个目录文件下都有一个” . ”文件,这个文件就是当前目录的硬链接。所以目录的硬链接数为2。
  1. 硬链接只能给普通文件进行建立,linux系统下,不支持给目录建立硬链接
  2. . 和 .. 本质是对目录进行硬链接
  3. 为什么不允许用户给目录进行硬链接:
    1. 容易形成路径环问题
    2. 因为软链接是一个独立的文件,所以不存在成环问题。

http://www.xdnf.cn/news/765829.html

相关文章:

  • 使用API网关Kong配置反向代理和负载均衡
  • IoTGateway项目生成Api并通过swagger和Postman调用
  • Fisher准则例题——给定类内散度矩阵和类样本均值
  • 数据库系统概论(十六)数据库安全性(安全标准,控制,视图机制,审计与数据加密)
  • 好用的C/C++/嵌入式 IDE: CLion的下载安装教程(保姆级教程)
  • 专注成就技术传奇:一路向前的力量
  • 设备驱动与文件系统:03 生磁盘的使用
  • Android高级开发第三篇 - JNI异常处理与线程安全编程
  • HarmonyOS鸿蒙Taro跨端框架
  • STM32CubeDAC及DMA配置
  • 高效微调方法简述
  • 网络地址转换
  • Python趣学篇:用Pygame打造绚烂流星雨动画
  • Nacos 2.4.3 登录配置
  • 云计算数据治理
  • 大模型的开发应用(六):使用 Xtuner QLoRA 微调模型
  • 使用 PHP 和 Guzzle 对接印度股票数据源API
  • Java 2D 图形类总结与分类
  • Node.js 中使用 Express 框架系统详细讲解
  • 3516cv610在sample_aiisp上多创一路编码流,方法
  • 移动AI神器GPT Mobile:多模型自由切换
  • 2018ToG | 可逆的灰度图像
  • [蓝桥杯]最优包含
  • Linux --TCP协议实现简单的网络通信(中英翻译)
  • Linux 脚本文件编辑(vim)
  • dvwa4——File Inclusion
  • 面向对象进阶 | 深入探究 Java 静态成员与继承体系
  • 常见算法题目5 -常见的排序算法
  • 详解鸿蒙仓颉开发语言中的计时器
  • 审计- 3- 风险评估:内部控制