IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> linux-inode -> 正文阅读

[系统运维]linux-inode

文件系统的理解

  • 当我们创建文件时,如果创建一个空文件,那么还是有相应的文件信息给它。这说明文件包括内容+属性。我们文件的属性信息是放在inode结构体中,每一个文件对应一个inode。文件的内容放在block中,每一个文件可以对应多个block,如果这个文件比较大的话。
  • 而系统中的文件一定相当多,那么就需要管理。怎么管理呢?先描述再组织。而inode就是描述信息。我们的文件系统就是对磁盘的整体认知,其中包括了磁盘的使用情况和如何对磁盘的数据进行操作等等。
struct inode{
	//各种属性信息
	//包括关联的block位置
}
struct block{
	//文件内容
}
struct filesystem{
	//基本情况
	//该分区空间
	//已经使用和未被使用
	//inode
	//block
	//group
	//操作方法(大量的函数指针)
}
  • 当我们使用ls -al的时候我们可以看到文件的各种信息,而这实际上就是将文件的inode加载到内存中,然后打在显示器上。
    ls

磁盘

  • 此时我们需要了解一下磁盘的结构。
    磁盘

  • 一个磁盘分为好多个盘片,上图显示了3个盘面。而每个盘面有两个盘面,每个盘面都可以写数据。所以上图有6个盘面。而每个盘面上面又分为数个同心圆,每个同心圆上面又划分各个扇区。这样我们寻找一块磁盘区域需要三个步骤:1,找到盘片。2,找到同心圆。3,找到扇区。

  • 但是这样有些复杂。所以我们使用了常用的方法!!在磁盘外面敷上一层虚拟的数据结构来模拟磁盘!这种手法在系统中可太常见了。

  • 可以认为,我们使用数组来模拟磁盘。磁盘的大小是固定的,那么这个数组大小也是固定的。我们将磁盘中的每个盘片映射到不同的区域。然后将同心圆再次划分,然后再次划分到扇区。这样我们查找磁盘中的内容就转换成了查找数组。
    -磁盘数组

  • 然后我们基于这个数组再分区,比如1个扇片(不同的系统分区不同)为一个区。这样每个分区就有一个文件系统来帮助操作系统管理文件。文件系统中包含着这个分区的使用情况,比如使用多少,未使用多少,当然还包含文件的inode和block。

分区

  • 但是分区还是太大,文件系统又会划分出groups,而每个groups又分为不同的部分。我们现在来研究一下一个group。因为我们知道一个group的原理后,我们就可以知道整个分区,最终整个磁盘的原理,因为每个group的原理相同。

group的各个部分分析

  • 在每个分区最前面都有1个boot block group,这个可以认为是启动时操作系统的信息。
  • 每个group都有一个Super Block,这个可以说是这个分区的信息,包括分区使用情况,未使用情况,inode使用情况等等。为什么每个group都包含这玩意呢?因为防止一个group的这部分损坏,这样还有备份,给文件系统加保险。
  • 而Group Descriptor Table就是每个group的信息,包括使用情况,使用多少inode等等。
  • group中还包含inode table,这就是文件的属性信息,其中就有该文件占据的block信息,比如该文件内容占用第200,300个block,那么inode就有到200,300的链接。inode的数量是固定的,也就是说如果你的文件每个都很小,那就可能会出现一种情况:内存还剩很多,但是无法创建文件了。因为inode使用完了。
  • Data Blocks就是存储文件内容的区域,这个区域又被划分多个blocks。而如果文件较大可能占用多个block。

好了,现在我们知道如果想访问一个文件,那么只需要拿到它的inode就可以。那么问题来了,inode怎么拿到?

  • 文件系统为每个inode分配inode id号,这个id号每个分区唯一!我们只需拿到inode id就能拿到这个文件。那么如何保证inode id唯一?inode id也需占用空间,那么inode id存放在磁盘中哪个位置?
  • 我们可以在ls中加入i选项查看文件的inode。
  • 在每个group中使用inode Bitmap位图来存放inode id! 没错,假设每个group最多可以存放10万个文件,那么就给位图分10万个bit位,每个位初始化为0.等到分配的时候,哪个位为0,就占用哪个inode id,然后将位图中对应的位置变成1即可。
  • 类似的,block也有很多,每个block需要进行标识,是否被使用,那么也使用Block bitmap位图来标识,如果一个block被使用,就将其对应的位图位置变成1,反之变成0即可。

文件的存储过程

  • 怎么存储一个文件?
  • 去inode位图中找到未使用的inode id,然后给这个文件分配inode。找到未使用的block,将数据存入这些block,然后建立文件名和inode id和block的关系,最后将inode位图和block位图对应位置变成1即可。
  • 怎么查找一个文件?
  • 拿到文件的inode id,找到对应的inode,然后找到存储的block,拷贝数据到内存中即可。
  • 怎么删除数据呢?
  • 难道还要真正的删除数据吗?有没有发现一个现象,当你下载什么很慢。但是删除就几秒钟的事。其实,文件的删除只需按照inode id找到inode,断开inode与该文件的block关系。然后断开该文件与inode的关系。最后将inode位图和block位图对应的位置变成0即可。
  • 同时目录也是文件,那么目录也需要分配inode id和inode。那么目录的block中存储什么呢? 目录的内容存储着该目录下文件名和它们inode的映射关系,所有文件的属性信息都保存在文件的inode中,而非目录的inode和block中。这样的好处是减少存储消耗,只需要在目录中找到和文件的inode映射关系,就找到了文件的属性。

软硬链接

linux下有链接的概念,还分为软硬链接,链接就是为我们定位文件。在linux下使用ln创建软硬链接:
链接

  • 观察h_link和s_link的内容,我们发现都和链接的文件的内容相同。观察这张图,我们会发现软硬链接的本质。
    硬链接:
  • 硬链接的inode id跟它链接的文件相同,这说明硬链接不是一个文件。它只是一个链接关系。这两个文件可以通过任意一个访问同一个inode。删除其中一个文件,硬链接就变成了原文件,只是名字变量而已。
  • 我们还看到属性信息中还有一列是链接数。这实际上是硬连接数,即有多少个文件对应同一个inode。因为file.c和h_link对应一个inode,所以这两个文件的链接数都是2.实际上,我们删除一个文件,系统会将该文件的硬链接数-1,如果为0,那么释放该文件。
  • 新建的目录默认是2个链接数,因为当前目录的上级目录有一个硬链接。该目录里面还有一个链接。

新目录

  • test_dir的链接数是2.因为可以通过名字访问该目录的inode。也可以进入该目录通过 “一个点” 访问该目录。如果在该目录下再创建目录,那链接数就会变成3,因为可以通过“两个点”访问该目录。

软链接:

  • 通过观察inode,发现软链接的inode跟链接文件不同。所以软链接本质是一个独立的文件。但是软链接里面的数据跟链接文件一样。你可以认为软链接的block中存放着链接文件的路径。当我们干掉软链接的链接文件时,软链接的内容也被清空。软链接也就失去了意义。
  • 软链接类型windows中的桌面快捷方式。
    软链接的作用:当你的可执行文件不在当前路径,或者路径比较深的时候,你可以建立一个软链接去执行这个软链接即可。 为什么不用硬链接呢?因为硬链接就不是快捷方式了,删除原文件还会残留下来。
  • 还有一张网图,我觉得形容软硬链接很厉害。
    软硬链接
  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-09-12 13:32:23  更:2021-09-12 13:34:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 15:14:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码