Inode与block详解

一个文件系统一般使用块设备上一个独立的逻辑分区。对于ExtX文件系统来说,硬盘分区首先被划分为一个个的Block,一个ExtX文件系统上的每个Block都是一样大小的。但是不同ExtX文件系统,Block大小可能不同,这是在创建Ext2系统决定的,一般为1k或者4k。由于Block数量很多,为了方便管理,ExtX将这些Block聚集在一起分为几个大的块组(Block Group),每个块组包含的等量的物理块,在块组的数据块中存储文件或目录。ExtX文件系统存储结构如下图所示:

data block(数据块)
??data block是用来放置文件内容的地方,在Ext2文件系统中所支持的 block 大小有1kB、2KB及4KB三种。在格式化时,block的大小就固定了,且每个block都有编号,以便inode记录。由于block大小的差异,会导致该文件系统能够支持的最大磁盘容量与最大单一文件容量并不相同。

  • 原则上,block的大小与数量在格式化完就不能再改变了(除非重新格式化)
  • 每个block内最多只能够放置一个文件的数据
  • 如果文件大于block的大小,则就会占用多个block
  • 若文件小于block,则该block的剩余容量就不会被使用(磁盘空间浪费)

inodetable(inode表格)
??inode的内容主要记录文件的属性以及该文件实际数据的位置。

  • 该文件的访问模式(read/write/execute)
  • 该文件的所有者与组(owner/group)
  • 该文件的大小的各个时间(ctime/atime/mtime)
  • 定义文件特性的标志(flag),如SUID等
  • 该文件真正内容的指向(pointer)
  • 每个inode大小固定为128 bytes
  • 每个文件都仅会占用一个inode

Superblock(超级块)
??Superblock主要是记录整个文件系统相关的地方,记录的主要信息有:
*在特定的块组有,内容相同,多个互相备份

  • block 与 inode 的总量未使用和已使用的 inode/block 数量及总量
  • block 与 inode 的大小
  • 文件系统的挂载时间、最近一次写入数据的时间、最近一次检验磁盘(fsck)的时间等
  • 一个 validbit 数值,若此文件系统已被挂载,则valid bit为0,否则为 1

File system Description(文件系统描述说明)
??这个区段可以描述每个 block group 的开始与结束的号码,以及说明每个区段(superblock、bitmap、inodemap、data block)分别介于哪一个 block 号码之间。也能够用dumpe2fs查看。

block bitmap(块对照表)
??我们可以通过block bitmap来知道哪些block是空的,此时系统就可以快速地找到可使用的空间来放置文件。

indoe bitmap(inode对照表)
??这个和block bitmap的功能是类似,只是inode bitmap记录的是使用与未使用的号码。
??在Ext2文件系统中所支持的Block大小有1K、2K、4K三种。在格式化时Block的大小就固定了,且每个Block都有编号,方便Inode的记录。每个Block内最多只能够放置一个文件的数据,如果文件大于Block的大小,则一个文件会占用多个Block;如果文件小于Block,则该Block的剩余容量就不能够再被使用了,即磁盘空间会浪费。下面看看Inode和Block的对应关系。
??Inode要记录的数据非常多,但大小仅为固定的128字节,同时记录一个Block号码就需要4字节,假设一个文件有400MB且每个Block为4K时,那么至少也要十万笔Block号码的记录。Inode不可能有这么多的记录信息,因此Ext2将Inode记录Block号码的区域定义为12个直接、一个间接、一个双间接与一个三间接记录区。Inode存储结构如下图所示:

??最左边为Inode本身(128 bytes),里面有12个直接指向Block号码的对照,这12笔记录能够直接取得Block号码。至于所谓的间接就是再拿一个Block来当作记录Block号码的记录区,如果文件太大时,就会使用间接的Block来记录编号。如上图当中间接只是拿一个Block来记录额外的号码而已。 同理,如果文件持续长大,那么就会利用所谓的双间接,第一个Block仅再指出下一个记录编号的Block在哪里,实际记录的在第二个Block当中。依此类推,三间接就是利用第三层Block来记录编号。
??以每个 block 的大小1KB为例来说,情况如下:
????12个直接指向:12 × 1K = 12K
????间接:256 × 1K = 256K
????双间接:256 × 256 × 1K = 256^2^K
????三间接:256 × 256 × 256 × 1K = 256^3^K
????总额:将上面的加在一起,可得到 12 + 256 + 256^2^ + 256^3^(K) = 16GB 。我们这下也就知道了前面表格的最大单个文件限制是怎么来的了。 按照我的理解 记录一个block需要占用四个字节,则一个1K的block,则可以记录1024/4=256个block。一个inode是128字节,而直接指向+间接指向等没有占完128个字节的原因主要是还考虑文件描述等信息,他们占用的字节数。
??
??上面描述是借鉴了别人的概念的理解,下面说下自己的理解,不一定对,但是提供一种想法: 一个硬盘首先被格式化extX,划分成一个个block,此时block大小(可以是1K,4K等)固定且分配了block编号。但是为了方便管理和维护,将block等量划分,分成一个个block group 。block组按需划分成super block;GDT;block bitmap;inode bitmap;inode table;data blocks, 实际上这些信息都是在物理block基础上划分的,可看做方便管理从而定义的名称而已。比如一个block group含有100个block,其中super block在block1 2 3上,GDT在block4 5上 等等。inode table里面也不止一个inode信息,而datablock占用了大多数blocks。

参考文章如下:
磁盘IO那些事
磁盘IO那些事

原文地址:http://blog.51cto.com/9406836/2124935

时间: 2024-10-29 02:32:13

Inode与block详解的相关文章

从零开始的linux 第二十一章(Inode以及Block详解其二与软链接)

从零开始的linux 第二十一章 在紧张的学习中,又迎来了新的一周~~小编也在同学们的迫切要求下继续来更新博客咯~~ 同学们:"我们才没要求你!" 唉??同学们一点都不配合呢~~别不好意思嘛~~ 好啦~不逗你们了,小编就节省大家的时间,赶快开始这章的课程吧~~ 在上一章中,小编给同学们讲了 Inode号 和 Block,不过还没有给同学们讲完哦~所以上一章的题目是 其一 ,那么毫无疑问这一章就是其二的内容咯~从上一章同学们已经了解了什么是Inode和Block,以及Inode中包含哪些

Linux的Ext2文件系统(Inode&Block)详解

前述:Linux系统管理员很重要的任务之一就是管理好自己的磁盘文件系统,每个分区不可太大也不可以太小,太大会导致磁盘容量的浪费,太小会导致产生的文件无法存储的问题.在Linux里面文件是由两部分数据组成,一部分是metadata,另一部分是data.那么这些数据都存放在文件系统的什么地方呢?这就让我们必须得了解文件系统的Inode与Block的基本原理了,而Linux最传统的磁盘文件系统使用的是Ext2,所以我们了解下它的内部原理. 第一部分:磁盘的组成和分区(基础) 磁盘的机械部分: 1.圆形

IOS Block详解

这是我原先写的OC中关于协议和代理的文章,建议大家阅读此篇文章的时候先阅读此文章,便于大家理解:  IOS Protocol与Delegate详解(一)  IOS Protocol与Delegate详解(二) 官方中对于Block的用途为:  You can use blocks to compose function expressions that can be passed to API, optionally stored, and usedby multiple threads. Bl

iOS开发-语法篇-block详解

一:基本定义 /*初步上式block定义的一些理解和解释,接下来会详解: *block名为myBlock,结合C的函数指针,myBlock为block体的指针,指向block体的入口地址 *int result = myBlock(5) <==> ^(int num){return num*num}(5)//将5传给num *回调时可以将myBlock作为参数传入,也可以直接传入block体^(int num){…};// *整个block体作为参数传入时,往往没有参数,只是进行延迟运算作用,

block、inode、superblock详解

Ext2 文件系统 block 原则上,block 的大小与数量在格式化完就不能够再改变了(除非重新格式化): 每个 block 内最多只能够放置一个文件的数据: 承上,如果文件大于 block 的大小,则一个文件会占用多个 block 数量: 承上,若文件小于 block ,则该 block 的剩余容量就不能够再被使用了(磁盘空间会浪费). inode 记录的文件数据至少有底下这些: 该文件的存取模式(read/write/excute): 该文件的拥有者与群组(owner/group): 该

iOS Block详解3

——译自Apple Reference Library<Blocks Programming Topic> 简介 块对象是C语言的句法和运行时特性.它类似于标准C函数,但可以将代码.变量绑定到堆(heap).栈(stack).一个块还维护了一系列的状态,这些状态或数据影响着执行的结果. 可以把块组成函数表达式,用于传递给API,或者使用在多线程里.最有用的是回调,因为块在回调时能把代码和数据一起传送. 在OSX 10.6的Xcode中,可以使用块,它随GCC和 Clang一起集成.在OSX 1

iOS Block详解4

代码块本质上是和其他变量类似.不同的是,代码块存储的数据是一个函数体.使用代码块是,你可以像调用其他标准函数一样,传入参数数,并得到返回值. 脱字符(^)是块的语法标记.按照我们熟悉的参数语法规约所定义的返回值以及块的主体(也就是可以执行的代码).下图是如何把块变量赋值给一个变量的语法讲解: 按照调用函数的方式调用块对象变量就可以了:int result = myBlock(4); // result是 28 1.参数是NSString*的代码块 [cpp] view plaincopy voi

CSS position属性整理详解

在css布局中position的使用非常广泛.在一些面试题目中也会常见到position的问题.所以在这篇博客里面整理一下position属性的使用,在以后的深入学习中还会在补充的. 1.position有哪些属性? static:所以元素的默认定位是position:static,这意味着元素没有被定位,元素出现在正常流中. relative:生成相对定位的元素,相对于其正常位置定位,还占有原来的位置,元素通过top,right,left,bottom属性进行规定. absolute:生成绝对

Linux系统inode和block知识详解

1. inode和block概述 在每个Linux存储设备或存储设备的分区被格式化(ext3,ext4等)之后,一般都有两部分:一部分是inode,另一部分是block.block是用来存储实际数据的,而inode用来存储这些数据的属性信息,包括文件的大小.属主.归属的用户组.读写权限.文件类型.修改时间,还包含指向文件实体的指针功能(inode节点到block的对应关系)等,但并不包含文件名.文件名一般被存储在其所在目录的block里面. inode除了记录文件属性信息外,还会为每个文件进行信