一、物理磁盘到文件系统

文件系统用来存储文件内容、文件属性、和目录。这些类型的数据如何存储在磁盘块上的呢?unix/linux使用了一个简单的方法。如图所示.

它将磁盘块分为三个部分:
1)超级块,文件系统中第一个块被称为超级块。这个块存放文件系统本身的结构信息。比如,超级块记录了每个区域的大小,超级块也存放未被使用的磁盘块的信息。
2) i-节点表。超级块的下一个部分就是i-节点表,每个文件都有一些属性,如文件的大小、文件所有者、和创建时间等,这些性质被记录在一个称为i-节点的结构中。所有i-节点都有相同的大小,并且i-节点表是这些结构的一个列表,文件系统中每个文件在该表中都有一个i-节点。
3)数据区。文件系统的第3个部分是数据区。文件的内容保存在这个区域。磁盘上所有块的大小都一样。如果文件包含了超过一个块的内容,则文件内容会存放在多个磁盘块中。一个较大的文件很容易分布上千个独立的磁盘块中.

二、创建一个文件的过程
我们现在知道文件的内容和属性是分开存放的,那么又是如何管理它们的呢?现在我们以创建一个文件为例来讲解。在命令行输入命令:
$ who > userlist
当完成这个命令时。文件系统中增加了一个存放命令who输出内容的新文件,那么这整个过程到底是怎么回事呢?
文件的属性和内容:内核将文件内容存放在数据区,文件属性存放在i-节点,文件名存放在目录。图2显示了创建一个文件的例子,假如这个新文件要3 个存储块来存放内容。

包括如下四个步骤:

1)存储属性,也就是文件属性的存储,内核先找到一块空的i-节点。图2中。内核找到i-节点号47。内核把文件的信息记录其中。如文件的大小、文件所有者、和创建时间等
2)存储数据 ,即文件内容的存储,由于该文件需要3个数据块。因此内核从自由块的列表中找到3个自由块。图2中分别为627、200、992,内核缓冲区的第一块数据复制到块627,第二和第三分别复制到200和992.
3)记录分配情况,数据保存到了三个数据块中。所以必须要记录起来,以后再找到正确的数据。分配情况记录在文件的i-节点中的磁盘序号列表里。这3个编号分别放在最开始的3个位置。
4)添加文件名到目录,新文件的名字是userlist,   内核将文件的入口(47,userlist)添加到目录文件里。文件名和i-节点号之间的对应关系将文件名和文件和文件的内容属性连接起来,找到文件名就找到文件的i-节点号,通过i-节点号就能找到文件的属性和内容。

三、创建一个目录的过程

前面说了创建一个文件的大概过程,那么创建一个目录时又是怎么回事呢?
我们知道,目录其实也是文件,只是它的内容比较特殊:包含文件名字列表,列表一般包含两个部分:i-节点号和文件名。所以它的创建过程和文件创建过程一样,只是第二步写的内容不同。一个目录创建时至少包括两个链接:“.”,“..”
我们可以通过系统命令来查看目录的内容:#ls -lia

上图的结果是文件名和对应的i-节点号,其中“.”表示是当前目录,而“..”是当前目录的父目录。但也有特殊情况,我们查看根目录的情况:

 
  1. <span style="font-family:Microsoft YaHei;">[root@localhost ~]# ls -i1a /

  2. 2 .

  3. 2 ..

  4. 98305 .autofsck

  5. 1310721 backup</span>

我们发现“.”和“..”都指向i-节点2.实际上当用mkfs创建一个文件系统时,mkfs会将根目录的父目录指向自己

四、如果有大文件如何实现
文件内容的分配情况是必须记录在i-节点的磁盘序号列表里的。但是i-节点只包含一个最多含有13个项的分配链表,如果分配的数据块超过13个块时怎么办?
Linux用到一个间接块来解决此问题.比如我们要记录14个块的编号,可以把前面10个记录在i-节点的磁盘序号列表里。另外4个编号放在一个数据块中。在i-节点的第11项里记录存放编号的数据块的指针,通过这个指针就能找到余下的4个数据块的编号,这个用来存放编号的数据就叫间接块。道理就和某些货物放在架上而把剩下的放在仓库里,并打个标签记下在仓库中具体位置的编号一样。
但当间接块也存满了时我们还可以再开第二个间接块,甚至3、4、5。。。更多额外块。但内核并不会把这些块记录在文件的i-节点的第12、13项里。而是开辟一个新的块的来存放这些间接块的列表,并在i-节点的第12项存放这一新额外块的编号。这存放着那个存储着第2、3、4、及后继额外块的编号的块的编号,这个块称为二级间接块.
同理当二级间接块饱和时还可以开辟第三级。

超级块,i节点,数据块,目录块,间接块相关推荐

  1. 超级块 i节点 数据块 目录块 间接块

    一.物理磁盘到文件系统 文件系统用来存储文件内容.文件属性.和目录.这些类型的数据如何存储在磁盘块上的呢?unix/linux使用了一个简单的方法.如图所示. 它将磁盘块分为三个部分: 1)超级块,文 ...

  2. linux 重定向类型 超级块 i节点

    超级块:定义文件系统的元数据(总大小.块大小.空闲.......):在格式化的时候确定 查看超级块信息:tune2fs  -l   目录 i节点:定义文件的元数据(名称.大小.存放位置.权限.修改时间 ...

  3. Hdfs NameNode中数据块管理与数据节点管理分析

    数据块管理 在上一节介绍了BlockManager中的数据块副本状态,主要是保存各个数据块副本状态的存储对象.名字节点第二关系的管理包括数据块管理和数据节点管理,其对数据块的管理是依托于BlockMa ...

  4. Oracle ADG备库SYSAUX数据文件坏块恢复处理(ORA-00600,ORA-10567,ORA-10564......

    点击上方"蓝字" 关注我们,享更多干货! 本文阐述了Oracle ADG备库SYSAUX数据文件坏块恢复处理(ORA-00600,ORA-10567,ORA-10564,ORA-0 ...

  5. Linux Shell 判断块设备节点是否存在

    /************************************************************************** Linux Shell 判断块设备节点是否存在* ...

  6. 如何下载矢量建筑楼块轮廊数据(含建筑高度)

    水经注万能地图下载器除了有强大的谷歌高清卫星影像下载.历史地下载.高程等高线数据下载.栅格电子地图下载.栅格地形图下载.影像坐标系投影转换.矢量坐标系投影转.矢量标注和坐标纠偏等一系列专业功能之外,还 ...

  7. python代码块-python小数据池,代码块的最详细、深入剖析

    一,id,is,== 在Python中,id是什么?id是内存地址,那就有人问了,什么是内存地址呢? 你只要创建一个数据(对象)那么都会在内存中开辟一个空间,将这个数据临时加在到内存中,那么这个空间是 ...

  8. [20161031]rman备份与数据文件OS块.txt

    [20161031]rman备份与数据文件OS块.txt --每个数据文件都有一个OS块,位于数据文件的第1块(也是0块).通过bbed无法访问: BBED> set dba 7,0 BBED- ...

  9. 重复数据删除:块级技术VS.字节级技术

    重复数据删除技术能够识别重复的数据,消除冗余,减少需转移或存储的数据的总体容量.在本文中,我将分别对这两种技术加以评论.与块级技术相比,字节级删除技术对数据的检查更加细微,精度更高,但同时需要更加了解 ...

最新文章

  1. linux中awk下 gsub函数用法
  2. JAVA中的并发工具 -- CountDownLatch、CyclicBarrier、Semaphore
  3. Cissp-【第4章 通信与网络安全】-2021-3-12(446页-475页)
  4. spark task和stage划分原理
  5. 【GPU精粹与Shader编程】(一) 全系列核心知识点总览
  6. 台式机自动关机+自动重启问题
  7. c# winform 程序打包部署
  8. Java基础---网络编程
  9. Eclipse中的Tomcat:6个流行的“如何”问题
  10. CentOS6.4之Linux软件包管理
  11. 侠客行手游如何用电脑玩 侠客行手游PC电脑版教程
  12. python usb摄像头 截图_python实现摄像头远程截图功能
  13. python实现论文查重系统_python 手把手教你基于搜索引擎实现文章查重
  14. 一款提升程序员生产力的黑科技神器
  15. 做软件销售在中国有前途吗?
  16. Apache POI操作Excel文件
  17. 上buff——状态模式
  18. 【并发编程】- 基础篇
  19. pytorch CUDNN_STATUS_MAPPING_ERROR
  20. 汽车潮流新能向,“大魔王”实力出道

热门文章

  1. 开发必备 之 为你的谷歌浏览器润色一波~
  2. 基于物联网技术的智慧教室重点设备监控系统设计与实现
  3. Word中怎样添加快速访问工具栏?这样操作很简单,20秒完成
  4. c51单片机学习笔记-LED流水灯实验
  5. Python爬虫教程003:爬取豆瓣电影信息(更加丰富的信息)
  6. 数据治理第1期 | 简单聊一聊数据治理的策略
  7. 【会员卡计费管理系统】
  8. linux64位系统兼容32位程序(不下载兼容包)
  9. 案例:搭建Zabbix监控系统
  10. 【180630】VC++数独游戏源码