关键词:
Inode and Block概述
文件储存在硬盘上,硬盘的最小储存单位叫“扇区”(sector),每个扇区拥有512字节。
操作系统从硬盘上读取数据时,不会按照扇区的方式读取,这样读取效率太低,而是一次性连续读取多个扇区,即一次性读取一个“块”(Block,由多个扇区的空间组成)。这种由多个扇区组成的“块”,是文件存取的最小单位。“块”的大小,最常见的是4KB,即连续八个sector组成一个Block。Block存储文件数据。
文件数据存储在“块”中,那么还必须找到一个地方存储文件的元信息,比如文件的所属用户、文件所属组、文件的类型、文件的权限、文件的创建时间、文件的修改时间、文件的访问时间、文件使用的Block信息、文件的硬链接数、文件的大小等等属性信息。这种储存文件元信息的区域叫做Inode。中文译名为“索引节点”,也叫i节点。
Inode 和 Block 是文件系统组成的基本核心概念,文件系统是在分区格式化的时候形成的,文件系统负责组织文件在分区上的存放的。
注意:
Inode不包含文件名。文件名是储存在目录的目录项中。
一个文件必须占用一个inode,至少占用一个block。
查看文件的inode信息:stat
在虚拟机上面实验
读取文件内容,查看Atime的改变
文件写入内容,查看Mtime/Ctime的改变
修改文件权限,查看Ctime的改变
建硬链接,查看Ctime的修改
修改文件名,查看Ctime的改变
Touch更新时间,三个时间全部修改
目录文件的结构
目录也是一种文件
每个inode都有一个号码,操作系统用inode号码来识别不同的文件
文件系统内部不使用文件名引用文件,而是使用inode号码来识别文件。对于文件系统来说,文件名只是inode号码便于识别的别称,文件名是目录的数据。
Inode的号码
文件系统访问文件的步骤:
1.用户在目录中看到要访问的文件名
2.通过目录的数据找到这个文件名对应的inode号码
3.通过inode号码,获取inode信息(文件的元信息)
4.根据inode信息,找到文件数据所在的block,读出数据
查看文件的inode号码
ls -i 文件名
stat 文件名
删除指定inode号所对应的文件
格式:find ./ -inum inode号
示例:当文件名中包含特殊符号时我们可以删除其inode号达到删除文件的目的
从/root/目录下查找3天内修改的文件,并复制到/tmp下
‘-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有效
示例:
加一块磁盘
重启
磁盘分区
格式化时指定文件系统的inode个数与block大小
mkfs.ext4 -N inode数 -b 块大小(单位字节) 设备名
示例:inode数设定为60000个,block大小为1KB
解决inode耗尽导致的磁盘故障
1. 删除不使用的文件,配置磁盘配额
cd /data
touch 1..10000.txt
2.将文件备份,重新格式化此文件系统,指定较多的inode个数
Linux文件系统软硬链接原理
硬链接(hard link)
方法:ln 源文件 目标文件
特点:
硬链接指向的文件inode号,新生成的硬链接文件的inode号与源文件的inode号相同,不可针对目录进行硬链接,必须在同一文件系统内。删除一个文件名,不影响另外一个的访问。
软链接(soft link)
方法:ln -s 源文件或目录 目标文件或目录
特点:
软连接又被称为符号链接
软链接指向的文件名,新生成的软链接文件的inode号与源文件不同,目录也可以生成软链接,软链接文件与源文件可以不在同一文件系统内,软链接文件的内容是源文件的路径,读取时系统会自动导向源文件路径,根据源文件找到文件内容,但当源文件移动或重命名时,软链接将报错。
重命名源文件,硬链接不受影响,但软链接失效
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仅仅是一名普通的研究生而已。原创 【学习日记】《深入浅出:图神经网络》:第四天---表示学习表示学习表... 查看详情