深入解析文件系统原理

author author     2023-02-26     458

关键词:

Inode and Block概述

文件储存在硬盘上,硬盘的最小储存单位叫“扇区”(sector),每个扇区拥有512字节。

操作系统从硬盘上读取数据时,不会按照扇区的方式读取,这样读取效率太低,而是一次性连续读取多个扇区,即一次性读取一个“块”(Block,由多个扇区的空间组成)。这种由多个扇区组成的“块”,是文件存取的最小单位。“块”的大小,最常见的是4KB,即连续八个sector组成一个Block。Block存储文件数据。

文件数据存储在“块”中,那么还必须找到一个地方存储文件的元信息,比如文件的所属用户、文件所属组、文件的类型、文件的权限、文件的创建时间、文件的修改时间、文件的访问时间、文件使用的Block信息、文件的硬链接数、文件的大小等等属性信息。这种储存文件元信息的区域叫做Inode。中文译名为“索引节点”,也叫i节点。

Inode 和 Block 是文件系统组成的基本核心概念,文件系统是在分区格式化的时候形成的,文件系统负责组织文件在分区上的存放的。

 

注意:

Inode不包含文件名。文件名是储存在目录的目录项中。

一个文件必须占用一个inode,至少占用一个block。

查看文件的inode信息:stat

在虚拟机上面实验

深入解析文件系统原理_源文件

读取文件内容,查看Atime的改变

深入解析文件系统原理_源文件_02

文件写入内容,查看Mtime/Ctime的改变

深入解析文件系统原理_文件系统_03

修改文件权限,查看Ctime的改变

深入解析文件系统原理_文件系统_04

建硬链接,查看Ctime的修改

深入解析文件系统原理_文件名_05

修改文件名,查看Ctime的改变

深入解析文件系统原理_文件名_06

Touch更新时间,三个时间全部修改

深入解析文件系统原理_文件名_07

目录文件的结构

目录也是一种文件

每个inode都有一个号码,操作系统用inode号码来识别不同的文件

         文件系统内部不使用文件名引用文件,而是使用inode号码来识别文件。对于文件系统来说,文件名只是inode号码便于识别的别称,文件名是目录的数据。

Inode的号码

文件系统访问文件的步骤:

1.用户在目录中看到要访问的文件名

2.通过目录的数据找到这个文件名对应的inode号码

3.通过inode号码,获取inode信息(文件的元信息)

4.根据inode信息,找到文件数据所在的block,读出数据

 

查看文件的inode号码

ls -i 文件名

stat 文件名

深入解析文件系统原理_源文件_08

删除指定inode号所对应的文件

格式:find ./ -inum inode号

示例:当文件名中包含特殊符号时我们可以删除其inode号达到删除文件的目的

深入解析文件系统原理_源文件_09

从/root/目录下查找3天内修改的文件,并复制到/tmp下

深入解析文件系统原理_文件名_10

-amin +n 查找n分钟以前被访问过的所有文件。


-atime -n 查找n天以内被访问过的所有文件。


-cmin +n 查找n分钟以前文件状态被修改过的所有文件。


-ctime +n 查找n天以前文件状态被修改过的所有文件。


-mmin +n 查找n分钟以前文件内容被修改过的所有文件。


-mtime +n 查找n天以前文件内容被修改过的所有文件。

查看文件系统的inode与block的信息

df -i 设备名(文件系统已挂载时查询,查询inode总数与已用数量)

dumpe2fs -h 设备名(文件系统无需挂载)ext有效

tune2fs -l 设备名(文件系统无需挂载)ext有效

 

示例:

加一块磁盘

深入解析文件系统原理_文件系统_11

重启

深入解析文件系统原理_文件名_12

磁盘分区

深入解析文件系统原理_文件系统_13

深入解析文件系统原理_文件系统_14

深入解析文件系统原理_文件系统_15


深入解析文件系统原理_文件名_16


格式化时指定文件系统的inode个数与block大小

mkfs.ext4 -N inode数 -b 块大小(单位字节) 设备名

 

示例:inode数设定为60000个,block大小为1KB

深入解析文件系统原理_文件系统_17

深入解析文件系统原理_文件系统_18

深入解析文件系统原理_源文件_19

解决inode耗尽导致的磁盘故障

1.  删除不使用的文件,配置磁盘配额

cd /data

touch 1..10000.txt

深入解析文件系统原理_文件系统_20

2.将文件备份,重新格式化此文件系统,指定较多的inode个数

Linux文件系统软硬链接原理

硬链接(hard link)

方法:ln 源文件 目标文件

特点:

         硬链接指向的文件inode号,新生成的硬链接文件的inode号与源文件的inode号相同,不可针对目录进行硬链接,必须在同一文件系统内。删除一个文件名,不影响另外一个的访问。

 

深入解析文件系统原理_文件系统_21

深入解析文件系统原理_文件名_22


软链接(soft link)

方法:ln -s 源文件或目录 目标文件或目录

特点:

         软连接又被称为符号链接

         软链接指向的文件名,新生成的软链接文件的inode号与源文件不同,目录也可以生成软链接,软链接文件与源文件可以不在同一文件系统内,软链接文件的内容是源文件的路径,读取时系统会自动导向源文件路径,根据源文件找到文件内容,但当源文件移动或重命名时,软链接将报错。

深入解析文件系统原理_文件系统_23

重命名源文件,硬链接不受影响,但软链接失效

深入解析文件系统原理_文件名_24

深入解析文件系统原理_文件名_25









ios之深入解析渲染的底层原理

一、计算机渲染原理①CPU与GPU的架构对于现代计算机系统,简单来说可以大概视作三层架构:硬件、操作系统与进程。对于移动端来说,进程就是App,而CPU与GPU是硬件层面的重要组成部分。CPU与GPU提供了计算能力,通过操作系统... 查看详情

含源码解析,深入java线程池原理

从池化技术到底层实现,一篇文章带你贯通线程池技术。1、池化技术简介在系统开发过程中,我们经常会用到池化技术来减少系统消耗,提升系统性能。在编程领域,比较典型的池化技术有:线程池、连接池、内存池、对象池... 查看详情

深入解析composer的自动加载原理(转)(代码片段)

深入解析composer的自动加载原理转自:https://segmentfault.com/a/1190000014948542前言PHP自5.3的版本之后,已经重焕新生,命名空间、性状(trait)、闭包、接口、PSR规范、以及composer的出现已经让PHP变成了一门现代化的脚本语言。PHP的生... 查看详情

androidbinder原理系统服务的注册过程(代码片段)

...oidAOSP基础系列Android系统启动系列应用进程启动系列Android深入四大组件系列Android深入理解Context系列Android深入理解JNI系列Android解析WindowManagerAndroid解析WMS系列Android解析AMS系列Android包管理机制系列Android输入系统系列本文首发于微... 查看详情

git内部原理之深入解析git对象(代码片段)

一、Git的核心部分Git是一个内容寻址文件系统,听起来很酷,但这是什么意思呢?这意味着,Git的核心部分是一个简单的键值对数据库(key-valuedatastore),可以向Git仓库中插入任意类型的内容,它... 查看详情

vue响应式原理深入解析(代码片段)

Vue最明显的特性之一便是响应式系统,其数据模型即是普通的JavaScript对象。而当你读取或写入它们时,视图便会进行响应操作。响应式data:<divid="exp">message</div>constvm=newVue(el:‘#exp‘,data:message:‘ThisisA‘)vm.message=‘ThisisB... 查看详情

git内部原理之深入解析git的引用和包文件(代码片段)

一、Git分支本质如果对仓库中从一个提交(比如1a410e)开始往前的历史感兴趣,那么可以运行gitlog1a410e这样的命令来显示历史,不过需要记得1a410e是查看历史的起点提交。如果我们有一个文件来保存SHA-1值,而... 查看详情

ios之深入解析类方法+load与+initialize的底层原理

一、前言Objective-C作为一门面向对象语言,有类和对象的概念。编译后,类相关的数据结构会保留在目标文件中,在运行时得到解析和使用。在应用程序运行起来的时候,类的信息会有加载和初始化过程。App启动到执行main函数之... 查看详情

git内部原理之深入解析维护与数据恢复(代码片段)

一、维护Git会不定时地自动运行一个叫做“autogc”的命令,大多数时候,这个命令并不会产生效果。然而,如果有太多松散对象(不在包文件中的对象)或者太多包文件,Git会运行一个完整的gitgc命令。“g... 查看详情

androidbinder原理servicemanager的启动过程(代码片段)

...oidAOSP基础系列Android系统启动系列应用进程启动系列Android深入四大组件系列Android深入理解Context系列Android深入理解JNI系列Android解析WindowManagerAndroid解析WMS系列Android解析AMS系列Android包管理机制系列Android输入系统系列前言在上一篇... 查看详情

jvm——深入解析原理和运行机制类加载器

      上次我们说了一下jvm中类加载的过程,大概有加载,连接(验证,准备,解析),初始化这么几个步骤,当然要实现这些功能就需要有加载器,今天我们就来说说jvm中的类加载器。一、... 查看详情

git内部原理之深入解析引用规范(代码片段)

一、引用规范在Git使用的过程中,会使用一些诸如远程分支到本地引用的简单映射方式,这种映射可以更复杂。假设现在在本地创建了一个小的Git仓库,现在想要添加一个远程仓库:$gitremoteaddoriginhttps://github.com/sc... 查看详情

androidbinder原理学习binder前必须要了解的知识点

...oidAOSP基础系列Android系统启动系列应用进程启动系列Android深入四大组件系列Android深入理解Context系列Android深入理解JNI系列Android解析WindowManagerAndroid解析WMS系列Android解析AMS系列Android包管理机制系列Android输入系统系列前言Binder原理... 查看详情

全文搜索原理简单解析

...欢迎指正。   今年的计划是存储领域,希望能深入的了解其原理,如果能有创造性的写出一个自己的文件系统出来 查看详情

路由及路由器工作原理深入解析3:路由与port

    日志“路由及路由器工作原理深入解析1”http://user.qzone.qq.com/2756567163/blog/1438322342介绍了“为什么要使用路由器”和“TCP/IPV4 协议网络的分段原理”2个问题。日志“路由及路由器工作原理深入解析2”http://use... 查看详情

unity协程深入解析与原理

先来直接放一段代码1usingSystem.Collections;2usingSystem.Collections.Generic;3usingUnityEngine;45publicclassCoroutineTest:MonoBehaviour6{78voidStart()9{10Debug.Log("StartBegin");1112CustomCoroutine=DelayPrint(" 查看详情

深入浅出spring原理及实战「源码原理实战」从底层角度去分析研究propertysourcesplaceholderconfigurer的原理及实战注入机制

Spring提供配置解析功能主要有一下xml文件占位符解析和Java的属性@Value的占位符解析配置这两种场景进行分析和实现解析,如下面两种案例。xml文件的占位符解析配置<beanid="dataSource"class="com.alibaba.druid.pool.DruidDataSource"init-method="i... 查看详情

《深入浅出图神经网络:gnn原理解析》

 深入浅出图神经网络:GNN原理解析https://cread.jd.com/read/startRead.action?bookId=30567027&readType=1 作者:ZZU_chenhao仅仅是一名普通的研究生而已。原创 【学习日记】《深入浅出:图神经网络》:第四天---表示学习表示学习表... 查看详情