本文转载自:https://blog.csdn.net/jhndiuowehu/article/details/50788287

一.基本概念:

     1.block:文件系统中存储数据的最小单元,ext3文件系统中,创建时默认4k,分为存储文件数据的data block和存储目录数据的directory block
     2.inode:又称“索引节点”,每一个inode对应一个文件或目录,记录了文件的大小、所占用的block以及目录的directory block信息。
    3.Inode Bitmap:翻译成中文就是“inode位图”,用二进制的方式记录了inode的使用情况。
    4.Block Bitmap:翻译成中文就是“块位图”,同Inode Bitmap,用二进制方式记录了块的使用情况。
    5.super block:超级块包含了该硬盘或分区上的文件系统的整体信息,如文件系统的大小等。
二.工作原理
    这里使用几个常用的操作来解释这几个文件系统组件的工作机制。
    1.    读取文件
            以读取/tmp/test文件为例,流程如下图:
                                        
             共分为以下几步:
                  (1)启动系统时,自动加载“/”目录的inode。
                  (2)根据该inode,找到“/”目录的directory block,从而定位到“/”目录文件。
                  (3)根据“/”所在的block,定位到“/”目录文件,该文件中记录了"/tmp"目录文件的名称和inode。
                  (4)根据(3)中找到的inode,找到"/tmp"目录文件,其中记录了“test”的文件名和inode。
                  (5)同理,根据(4)中找到的inode,定位到“test”的data block,从而可以访问test文件。
            注:所谓一切皆文件,连目录也是文件,该文件记录了里面的一级子目录和文件的名称和inode,所谓cd进这个目录,其实就是执行该目录文件,ls则读取该目录文件,创建一个文件或子目录,则意味着向该文件中写入有关该文件或目录所对应的条目。
    2.创建文件,删除文件
              (1)  创建文件
                      创建文件,其实就是根据inode位图和block位图,确定哪写inode和block是空闲的,然后分别向这些block中写入数据,同时,将整个文件(可能是多个block) 对应一个空闲的inode。 如下图(这里“1”表示空闲,“0”表示占用,可能不准确~),这样,访问inode"E"定位到A块、C块、E块,实现了访问“test文件”。
                                      
               (2) 删除文件
                        删除文件,其实就是把block位图和inode位图的相关位置成空,相当于不被占用,注意:数据还在,下次创建文件时,覆盖原已清空block位图和inode位图的文件的数据。
            

block(data block,directory block)、inode、块位图、inode位图和super block概念详解【转】的更多相关文章

  1. Linux文件系统属性和权限概念详解(包含inode、block、文件权限、文件软硬链接等)

    Linux中的文件属性 ls -lih 包括:索引节点(inode),文件类型,权限属性,硬链接数,所归属的用户和用户组,文件大小,最近修改时间,文件名等等 索引节点:相当于身份证号,系统唯一,系统读 ...

  2. 【Big Data - Hadoop - MapReduce】通过腾讯shuffle部署对shuffle过程进行详解

    摘要: 通过腾讯shuffle部署对shuffle过程进行详解 摘要:腾讯分布式数据仓库基于开源软件Hadoop和Hive进行构建,TDW计算引擎包括两部分:MapReduce和Spark,两者内部都 ...

  3. (转) html块级元素和内联元素区别详解

    http://blog.csdn.net/chen_zw/article/details/8713205 块级元素(block)特性: 总是独占一行,表现为另起一行开始,而且其后的元素也必须另起一行显 ...

  4. html块级元素和内联元素区别详解

    块级元素(block)特性: 总是独占一行,表现为另起一行开始,而且其后的元素也必须另起一行显示; 宽度(width).高度(height).内边距(padding)和外边距(margin)都可控制; ...

  5. 监控hdfs 块迁移数量脚本及 metasave 日志内容详解

    把以下脚本配置到 crontab 下 ,10分钟一次,进行打点,记录复制块的进度. 想让节点快速退役(下线)的方法可以参考我的 https://www.cnblogs.com/jiangxiaoxia ...

  6. OpenGL之位图的绘制和gluOrtho2D等函数详解

    位图绘制 先来段代码吧: #include <iostream> #include <gl/glut.h> using namespace std; #pragma comme ...

  7. Linux_僵尸进程、挂载、block块、inode号

    僵尸进程: 基本概念: 进程分为父进程和子进程 父进程一死 子进程都会死 杀死主进程的时候  子进程也会被杀死 僵尸进程:主进程被杀死了  但是子进程还活着    子进程不会占用cpu但还是会占着内存 ...

  8. Oracle corrupt block(坏块) 详解

    转自:http://blog.csdn.net/tianlesoftware/article/details/5024966 一. 坏块说明 1.1 相关链接 在看坏块之前,先看几个相关的链接,在后面 ...

  9. Linux 文件的详解[分类/扩展名/inode/block]

    关于Linux文件的介绍 Linux里文件扩展名和文件类型没有关系,Linux系统中一切皆文件 关于Linux文件分类 纯文本文件(可以cat的)     二进制文件(Linux的可执行文件等,如/b ...

随机推荐

  1. [转]Netbeans IDE默认UTF-8编码

    NetBeans是一款优秀的开源集成开发环境,可以用于Java,C/C++,PHP等语言的开发.同时它也是一个可扩展的开发平台,可以通过插件来扩展官方版本没有的功能. NetBeans有一个很弱智的地 ...

  2. javascript对象定义

    转载自:http://blog.sina.com.cn/s/blog_75a8cfac0100pif0.html javascript定义对象写法 javascript定义对象的几种简单方法 1.构造 ...

  3. MEF笔记 之延迟加载

    文章参考:在MEF中实现延迟加载部件  作者:TianFang 仅有一个服务提供者时候 using System; using System.Collections.Generic; using Sy ...

  4. mysql 年龄计算(根据生日)

    生日(DATE) 计算方法1: ))) 计算方法2: year( from_days( datediff( now( ), birthdate))) now() 当前时间,精确到秒 datediff( ...

  5. yii rule

    https://blog.csdn.net/ljfrocky/article/details/46373691 http://www.yiichina.com/tutorial/997 http:// ...

  6. 信息属性列表关键字 info.plist

    本文转载至  http://blog.csdn.net/zaitianaoxiang/article/details/6650491 本附录说明了那些可以在束和包的属性列表文件中定义的关键字. 束关键 ...

  7. TP【连接数据库配置及Model数据模型层】

    [连接数据库配置及Model数据模型层] convertion.php config.php 在config.php做数据库连接配置 制作model模型 a) model本身就是一个类文件 b) 数据 ...

  8. hdu1754(splay tree 单点更新,成段查询)

    题意就是简单的点更新,成段查询. splay tree 果真是常数比较大的log(n)操作. 比线段树还慢了这么多. // // main.cpp // splay // // Created by ...

  9. RTSP安防摄像机(海康大华宇视等)如何推送到RTMP流媒体服务器进行直播

    方案介绍 目前互联网直播的CDN和标准RTMP流媒体服务器通常只能接收RTMP格式的音视频推流.目前市场上有一些自带RTMP推流的摄像机和编码器,可以直接在其rtmp推流配置里面配置推送到RTMP流媒 ...

  10. eval()和exec()函数的区别

    (1)eval(str [,globals [,locals ])函数将字符串str当成有效Python表达式来求值,并返回计算结果.(2)exec()函数将字符串str当成有效的Python表达式来 ...