Linux文件系统

devtools/2024/9/23 10:35:50/

目录

前言

一.磁盘的结构

磁盘数据定位方法

CHS定位法

LBA寻址法

二.Linux文件系统

1.文件系统结构 

​编辑

2.inode

通过inode找到文件内容

3.重新理解文件

新建/删除文件

 目录文件

软硬链接


前言

        Linux文件系统是操作系统中用来组织和管理文件与目录的结构,  它提供了存储、检索、管理和保护数据的方法,  在Linux下一切皆文件,  理解文件系统以及文件能让我们对Linux的学习有很大帮助

一.磁盘的结构

        磁头(Magnetic Head)是用于读取和写入磁性介质上数据的核心组件。它利用电磁原理在磁性材料表面记录和检索数据, 磁盘高速旋转 ,  磁头来回摆动, 就能访问到磁盘上的所有数据

磁盘的每个盘面,都会被为多个等宽的同心圆环,这样一个圆环叫做磁道。而一个磁道又会被划分为很多个小扇形,每个扇形叫做一个扇区, 一个扇区的大小通常是固定的,  在很长一段时间内,磁盘的大小是512byte,  这种是传统的512字节扇区,  现代还有4KB扇区

磁盘数据定位方法

CHS定位法

CHS定位法曾经是硬盘上数据定位的标准方法,通过柱面、磁头和扇区三者的组合来定位数据位置

  • C(Cylinder,柱面):指示数据位于哪一个柱面。
  • H(Head,磁头):指示数据位于该柱面的哪一个磁盘面(由哪个磁头访问)。
  • S(Sector,扇区):指示数据位于该磁盘面的哪个扇区。
  1. 选择柱面:首先,硬盘的读写头会移动到指定的柱面。柱面由磁盘上的所有盘片的对应磁道组成。
  2. 选择磁头:然后选择特定的磁头,以读取指定磁盘面上的数据。
  3. 选择扇区:最后在选定的磁盘面上,磁头读取或写入指定的扇区。

LBA寻址法

LBA是现代大部分存储设备的标准寻址方式,  通过一个简单的整数来表示存储设备上的数据位置

  • 逻辑块(Logical Block):LBA将整个存储设备视为一个线性连续的块序列,每个块对应一个唯一的LBA编号。这些逻辑块的大小通常是固定的,一个逻辑块通常对应一个扇区,在大多数情况下,逻辑块的大小为512字节或4KB。

  • 线性寻址:LBA通过一个简单的整数值(LBA号)来表示存储设备上的数据位置,而不涉及柱面、磁头和扇区的复杂几何结构。LBA号从0开始,一直到存储设备的最大块数减1。

当需要访问某个数据块时,操作系统或硬盘控制器会生成一个LBA号,该LBA号直接映射到存储设备上的物理位置。硬盘控制器将LBA号转换为设备内部的实际地址,然后访问相应的数据块

二.Linux文件系统

1.文件系统结构 

Linux Ext2文件系统结构

  • 超级块(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是否空闲可用。
  • inode Table:存放文件属性如文件大小,所有者,最近修改时间等
  • Data blocks:存放文件内容

2.inode

文件=内容和属性

        在Linux中文件的内容和属性是分开储存的,文件的属性储存在inodeTable中,内容存储在Data Block中,  struct inode 是 Linux 内核中用于描述文件系统中每个文件的核心数据结构,  里面包含了文件的各个属性,  比如文件的inode编号,  文件的修改时间,  文件的权限,  文件的数据块等,  其中inode编号用来标识唯一一个文件或目录,  文件属性中记录的这个文件的内容存储的块下标,  通过这个就能直接找到文件的内容,

使用 ls -i 选项查看文件的inode

注意 :  文件名不是文件的属性,  不存在struct inode中

通过inode找到文件内容

struct inode 
{...int i_block[15];//记录文件内容存放的Data Block下标...
}

i_blick数组分为[0,11] [12] [13] [14]区域

        其中[0,11]为直接映射,  当文件数据过大,  这些块不够,  [12]为一级映射,  所指向的块存储的是直接映射的块下标,  这些才是文件的内容,  [13]为二级映射同上,  所指向的是一级映射的块下标,  再从一级映射存储的块找,   [14]为多级映射,  同理

3.重新理解文件

现在我们有了文件系统的理解, 再来重新理解一些文件

新建/删除文件

        所谓新建文件,  就是再inode bitmap中找到一个没有被使用的inode,  初始化文件的属性,  分配block 块,  然后在当前目录文件建立新建的文件的文件名和inode编号的映射关系  

        所谓删除文件,  就是删除当前目录文件中文件名和inode的映射关系,  文件系统释放inode 和block

 目录文件

        目录也是一个文件,  目录文件也有自己的内容,  在目录文件会储存该目录下所有文件的文件名和inode编号的映射关系

        文件名存在于目录中,而不存在于文件本身。我们通过目录来访问文件名,本质是去目录文件中,通过文件名找到对应的inode编号,然后通过inode编号找到文件的属性,再通过属性中的i_block就能访问到文件内容。所以我们通过一个个目录文件就能访问到各种文件,  根目录的inode是确定的,  从根目录开始就可以依次找到所有文件

软硬链接

使用 ln -s [指向文件名][文件名] 来建立软连接

直接使用 ln [指向文件名][文件名] 建立硬连接

看起来好像这两个差不多,  都相当于快捷方式,  但它们本质有区别

通过查看它们的inode编号

我们可以发现,  软连接创建了新文件,  而硬连接并没有

实际上,  软连接会创建一个新文件,  新文件的内容就是要连接的文件路径,  通过这个路径就能找到该文件,  而硬连接没有创建新的文件,  相当于引用计数,  只是多了一个新的文件名与该inode的映射关系,  因为inode编号在分区内有效,  所以硬连接也只在分区内有效


http://www.ppmy.cn/devtools/91775.html

相关文章

2024年6月 青少年python一级等级考试真题试卷

202406 青少年软件编程等级考试Python一级真题 试卷总分数:100分 第 1 题 在使用turtle绘制图形时,如果要控制小海龟移动到 x 坐标为 200,y 坐标为150 的位置,以下代码能够实现效果的是?( ) …

IntelliJ IDEA 打包教程

前言 当你完成了项目的编写,并准备将项目打包成可部署的文件时,IntelliJ IDEA 提供了多种方式来帮助你轻松完成这一任务。本教程将详细介绍如何使用 IntelliJ IDEA 对项目进行打包。 准备工作 在开始之前,请确保你已经安装了以下软件&…

docker和Helm Chart的基本命令和操作

一、docker基本命令和操作 1. docker login【登录】 登录 docker client,登录成功之后会显示 Login Succeeded。 docker login登陆到指定的镜像仓库,docker pull 和 docker push 操作都需要预先执行 docker login 操作; 指令:&a…

1018 Public Bike Management

比较复杂的模拟题&#xff0c;Dijstra和dfs结合&#xff0c;注意记牢回溯算法框架&#xff1a; #include<bits/stdc.h> using namespace std; #define ipair pair<int,int> int cmax,n,sp,m; vector<vector<int>> pre; vector<vector<ipair>…

kubernets学习笔记——使用kubeadm构建kubernets集群及排错

使用kubeadm构建kubernets集群 一、准备工作1、repo源配置&#xff1a;阿里巴巴开源镜像源2、更新软件包并安装必要的系统工具3、同步时间4、禁用selinux5、禁用交换分区swap6、关闭防火墙 二、安装docker-ce、docker、cri-docker1、安装docker-ce2、开启内核转发&#xff0c;转…

基于YOLOv8的船舶检测系统

基于YOLOv8的船舶检测系统 (价格85) 包含 【散货船&#xff0c;集装箱船&#xff0c;渔船&#xff0c;杂货船&#xff0c;矿砂船&#xff0c;客船】 6个类 通过PYQT构建UI界面&#xff0c;包含图片检测&#xff0c;视频检测&#xff0c;摄像头实时检测。 &#xff08;该…

江科大/江协科技 STM32学习笔记P21

文章目录 ADC模数转换器ADC简介逐次逼近型ADCSTM32的ADCADC基本结构输入通道转换模式单次转换&#xff0c;非扫描模式连续转换&#xff0c;非扫描模式单次转换&#xff0c;扫描模式连续转换&#xff0c;扫描模式 触发控制数据对齐转换时间校准硬件电路电位器产生可调电压的电路…

zookeeper集群+kafka集群

zookeeper集群kafka集群 zookeeper是一个开源的&#xff0c;分布式的&#xff0c;为分布式架构提供协调服务的APACHE的项目 保存元数据。 zookeeper&#xff1a; zookeeper的工作机制&#xff1a; 观察者模式设计的分布式服务器管理架构 负责存储和管理元数据&#xff0c…