基本概念

首先讲下inode和块的基本概念。在Linux系统中,文件由元数据和数据块组成。数据块就是多个连续性的扇区(sector),扇区是文件存储的最小单位(每个512字节)。块(block)的大小,最常见的是4KB,也就是连续8个sector组成,存储文件数据和目录数据。而元数据用来记录文件的创建者、创建日期、大小等,这种存储文件元数据信息的区域叫做inode,即索引节点。

由于inode也是用来存储文件相关属性信息的,所以也会消耗硬盘空间。具体包含的信息有inode号,文件的字节数、User ID、Group ID、读、写、执行权限、时间戳(共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间)、链接数(软硬链接)、数据block的位置,注意没有文件名。

在硬盘格式化的时候,操作系统就会将硬盘分为两个区,即数据区和inode区。每个inode节点的大小一般为128B或者256B,inode的总数在格式化文件系统的时候就已经确定。

另外还有几个概念了解一下:

inode Bitmap:即inode位图,用二进制的方式记录了inode的使用情况, 比如inode是否空闲等。

Block Bitmap:即块位图,同Inode Bitmap,用二进制方式记录了块的使用情况。当查找或创建文件时,会扫描此位图来寻找空闲的inode号对应的块。

super block:超级块包含了该硬盘或分区上的文件系统的整体信息,如文件系统的大小等。

dentry:在内核中起到了连接不同的文件对象inode的作用,进而起到了维护文件系统目录树的作用。dentry是一个纯粹的内存结构,由文件系统在提供文件访问的过程中在内存中直接建立。dentry中包含了文件名,文件的inode号等信息。

下图为文件系统inode区block区图:

文件的查找、创建、删除原理

接下来对文件的查找、创建、删除原理三个方面来对inode和块的理解。

文件的查找:比如要查找/var/log/message

文件的创建:比如要创建/backup/test.txt(前提backup目录存在)

文件的删除:删除/backup/test.txt

查找

  1. 首先根目录(目录也是个文件,不是容器!也可以理解为路径的映射表)会自引用。找到inode表中对应的条目。(暂且把inode表中inode号和其对应的块信息成为条目)
  2. inode表中对应的信息指向根目录对应的块,其中有var目录对应的信息和inode号。
  3. 系统根据var目录inode号回头找到inode表中var目录其对应的条目。
  4. 根据var目录对应的块信息找到对应的块,其中有log目录对应的信息和inode号。
  5. 系统又根据log目录inode号在inode表中找到其对应的条目。
  6. 根据log目录对应的块信息找到对应的块,其中有messages文件。
  7. 根据messages文件的inode号在inode表中找到其对应的条目。
  8. 最后系统根据messages对应的条目信息告诉我们messages文件对应了多少的块,最后给我们呈现的就是所看到的数据。

创建

  1. 首先扫描inode位图,找空闲的inode号,找到之后占用。
  2. 根目录自引用找到inode表中对应的条目,并根据条目找到对应的块。
  3. 依据根目录对应的块中backup目录对应的inode号,回头找到inode表中条目。
  4. inode表中条目又找到对应的块,在这个块的dentry中新建了一个文件test.txt。
  5. 然后在最开始扫描占用的inode号给到此test.txt文件。

当要存数据给test.txt文件时,会进行如下:

系统扫描块位图(加速查找磁盘空闲块,记录是否空闲等),找到空闲块,分配大于数据大小的块,最后再回收(避免磁盘碎片)。比如要创建10k大小的test.txt文件,一个块4k,只需要3个块,系统分配4个或者多于,最后再去把这多余的块分配到空闲块中等待使用。

删除

当要删除一个文件时,其实就是把其使用的block位图标记为空闲,inode位图的相关位置成空,相当于不被占用,系统就认为此文件删除。但是数据还在,在下次创建文件时,就可覆盖原已清空block位图和inode位图的文件的数据。

文件粉粹也只是使用一些随机数据填充进原来文件的数据块中,导致文件难以恢复。

以上

Linux下对inode和块的理解的更多相关文章

  1. Linux下按扇区读写块设备

    本文介绍Linux下按扇区读写块设备(示例TF卡),实际应用是在Android系统上,主要方法如下: 1.找到sdcard的挂载点,在android2.1系统下应该为/dev/block/mmcblk ...

  2. linux下的inode记录

     我们经常在Linux下可以看到inode,都不知道是什么东东,那么我们现在来慢慢了解下.   一.inode是什么? 理解inode,要从文件储存说起. 文件储存在硬盘上,硬盘的最小存储单位叫做&q ...

  3. Linux下使用inode删除文件

    Linux 下有时候某些文件无法使用 rm 直接删除, 比如该文件的文件名含有终端不能正确显示的字符.# ls -litotal 0441511 -rw-r--r-- 1 root root 0 Ap ...

  4. linux下利用inode删除指定文件文件

    本文主要介绍使用inode删除异常文件名的文件的方法,供大家参考: 在Linux中,有时候会遇到文件名是乱码或者是某些特殊中文的文件,这时候通过文件名就很难删除. 同时,对于linux中的任何一个文件 ...

  5. Linux下为何都是文件的理解

    所谓“文件”,就是在我们的电脑中,以实现某种功能.或某个软件的部分功能为目的而定义的一个单位. Linux都是以文件的形式存在,当我们访问某个文件(Linux中的文件有目录,连接,普通文本),由于Li ...

  6. Linux下对于inode的理解

    0x01 什么是inode 文件存储在硬盘上,硬盘的最小存储单位叫做“扇区”(Sector),每个扇区储存512字节: 操作系统读取硬盘时,不会一个个扇区地读取,这样效率低,而是一次性连续读取多个扇区 ...

  7. Linux下方便的块设备查看工具lsblk

    之前在Linux下看有什么块设备,通常都用fdisk什么的或者直接ls /dev/ 去看很不方便. 这个工具属于util-linux-ng包,在RHEL 6.1上是安装好的啦,直接用就好. ubunt ...

  8. linux下创建与删除用户详细步骤 ***

    linux下用户的操作还是相对容易理解的,基本操作如下: 1.新增用户 只有root用户能创建新用户 #useradd user1 新建后将会在/home目录下生成一个与用户名相同的用户主目录.同时会 ...

  9. 理解Linux文件系统之inode

    很少转发别人的文章,但是这篇写的太好了. 理解inode   作者: 阮一峰 inode是一个重要概念,是理解Unix/Linux文件系统和硬盘储存的基础. 我觉得,理解inode,不仅有助于提高系统 ...

随机推荐

  1. Python全栈学习_day005作业

    ,有如下变量(tu是个元祖),请实现要求的功能 tu = (, , {,,)}, ]) a. 讲述元祖的特性 b. 请问tu变量中的第一个元素 "alex" 是否可被修改? c. ...

  2. 微信小程序Map组件踩坑日记

    刚刚又发生一个bug,搞得我头皮发麻,本来该美滋滋的回家准备度过愉快的周末,瞬间变成了日常修bug,来,开始填坑之路 情景再现: 首先说一说我们项目的需求, 点击下方,弹出抽屉 点击对应的地图打开相应 ...

  3. CSS中的sprites

    CSS的sprites(雪碧图,精灵图)          *三个名字都要记住 定义:就是将界面上需要的小的导航按钮图标,小图标整合成一张背景图片 然后用background-position来实现背 ...

  4. java集合类学习

    以下基于jdk1.8 一. 集合类关系图 1. 接口关系图 2.集合中的类,(不包含线程安全的) 二.ArrayList 1.类定义 /** * 用“可伸缩数组”来实现List接口.实现了所有List ...

  5. Salesforce的基础用户界面定制

    Salesforce的用户界面 Salesforce的用户界面易于定制.本文将讲述如何定制: 主菜单和选项卡 自定义按钮和链接 视图列表 页面布局 定制主菜单和选项卡 Salesforce的主菜单默认 ...

  6. 接口自动化 基于python+Testlink+Jenkins实现的接口自动化测试框架[V2.0改进版]

    基于python+Testlink+Jenkins实现的接口自动化测试框架[V2.0改进版]   by:授客 QQ:1033553122 由于篇幅问题,,暂且采用网盘分享的形式: 下载地址: [授客] ...

  7. Python 利用Python操作excel表格之xlwt介绍

    利用Python操作excel表格之xlwt介绍   by:授客 QQ:1033553122 直接上代码   案例1 #!/usr/bin/env python # -*- coding:utf-8 ...

  8. tinypng upload一键压缩上传工具,告别人肉

    地址 项目地址:tinypng-upload 有兴趣的可以玩一玩,因为平时经常会用到图片压缩,上传,如果你也觉得很繁琐的话,这个将会解决你的痛点. 关于 tinypng-upload 这是一个基于 e ...

  9. Djanggo ORM操作

    Django ORM那些相关操作  一般操作 看专业的官网文档:https://docs.djangoproject.com/en/1.11/ref/models/querysets/,做专业的程序员 ...

  10. [Linux.NET]Nginx 泛解析配置请求映射到多端口实现二级域名访问

    由于想实现一个域名放置多个应用运行的目的,而不想通过域名后加端口号方式处理,这种方式处理记起来太麻烦,偷懒党简直不能忍,故而考虑了使用二级域名来处理多个应用同时运行.Google了一番资料并进行了尝试 ...