linux文件系统详解

LINUX文件系统详解linux

 

LINUX系统中有一个重要的概念:一切都是文件。其实这是UNIX哲学的一个体现,而Linux是重写UNIX而来,因此这个概念也就传承了下来。在UNIX系统中,把一切资源都看做是文件,包括硬件设备。UNIX系统把每一个硬件都当作是一个文件,一般称为设备文件,这样用户就能够用读写文件的方式实现对硬件的访问。这样带来优点也是显而易见的:数组

l         实现了设备无关性。spa

l         UNIX 权限模型也是围绕文件的概念来创建的,因此对设备也就能够一样处理了。命令行

  下面咱们来详细的了解Linux文件系统的几个要点。unix

1、             物理磁盘到文件系统指针

咱们知道文件最终是保存在硬盘上的。硬盘最基本的组成部分是由坚硬金属材料制成的涂以磁性介质的盘片,不一样容量硬盘的盘片数不等。每一个盘片有两面,均可记录信息。盘片被分红许多扇形的区域,每一个区域叫一个扇区,每一个扇区可存储128×2N次方(N0.1.2.3)字节信息。在DOS中每扇区是128×22次方=512字 节,盘片表面上以盘片中心为圆心,不一样半径的同心圆称为磁道。硬盘中,不一样盘片相同半径的磁道所组成的圆柱称为柱面。磁道与柱面都是表示不一样半径的圆,在 许多场合,磁道和柱面能够互换使用,咱们知道,每一个磁盘有两个面,每一个面都有一个磁头,习惯用磁头号来区分。扇区,磁道(或柱面)和磁头数构成了硬盘结构 的基本参数,帮这些参数能够获得硬盘的容量,基计算公式为: 索引

存储容量=磁头数×磁道(柱面)数×每道扇区数×每扇区字节数 资源

要点:test

1)硬盘有数个盘片,每盘片两个面,每一个面一个磁头 原理

2)盘片被划分为多个扇形区域即扇区

3)同一盘片不一样半径的同心圆为磁道

4)不一样盘片相同半径构成的圆柱面即柱面

5)公式: 存储容量=磁头数×磁道(柱面)数×每道扇区数×每扇区字节数

6)信息记录可表示为:××磁道(柱面),××磁头,××扇区

那么这些空间又是怎么管理起来的呢?unix/linux使用了一个简单的方法。如图所示。

1

它将磁盘块分为如下三个部分:

1)        超级块,文件系统中第一个块被称为超级块。这个块存放文件系统自己的结构信息。好比,超级块记录了每一个区域的大小,超级块也存放未被使用的磁盘块的信息。

2)        I-切点表。超级块的下一个部分就是i-节点表。每一个i-节点就是一个对应一个文件/目 录的结构,这个结构它包含了一个文件的长度、建立及修改时间、权限、所属关系、磁盘中的位置等信息。一个文件系统维护了一个索引节点的数组,每一个文件或目 录都与索引节点数组中的惟一一个元素对应。系统给每一个索引节点分配了一个号码,也就是该节点在数组中的索引号,称为索引节点号

3)        数据区。文件系统的第3个部分是数据区。文件的内容保存在这个区域。磁盘上全部块的大小都同样。若是文件包含了超过一个块的内容,则文件内容会存放在多个磁盘块中。一个较大的文件很容易分布上千个独产的磁盘块中。

 

2、             建立一个文件的过程

 

咱们从前面能够知道文件的内容和属性是分开存放的,那么又是如何管理它们的呢?如今咱们以建立一个文件为例来说解。

在命令行输入命令:

$ who > userlist

咱们能够经过系统命令ls来查看新建文件userlist的信息:(ls 命令后的i就表示打印i节点信息)

2

当完成这个命令时。文件系统中增长了一个存放命令who输出内容的新文件userlist,那么这整个过程究竟是怎么回事呢?

文件主要有属性、内容以及文件名三项。内核将文件内容存放在数据区,文件属性存放在i-节点,文件名存放在目录中。图2显示了建立一个文件的例子,假如这个新文件要3 个存储块来存放内容。那么整个个程大概以下:

3

建立成功一个文件主要有如下四个步骤:

1)        存储属性 也就是文件属性的存储,内核先找到一块空的i-节点。图3中。内核找到i-节点号921130。内核把文件的信息记录其中。如文件的大小、文件全部者、和建立时间等

2)        存储数据 即文件内容的存储,因为该文件须要3个数据块。所以内核从自由块的列表中找到3个自由块。图3中分别为600200992,内核缓冲区的第一块数据复制到块600,第二和第三分别复制到922600.

3)        记录分配状况,数据保存到了三个数据块中。因此必需要记录起来,之后再找到正确的数据。分配状况记录在文件的i-节点中的磁盘序号列表里。这3个编号分别放在最开始的3个位置。

4)        添加文件名到目录,新文件的名字是userlist 内核将文件的入口(47,userlist)添加到目录文件里。文件名和i-节点号之间的对应关系将文件名和文件和文件的内容属性链接起来,找到文件名就找到文件的i-节点号,经过i-节点号就能找到文件的属性和内容。

 

3、             建立一个目录的过程

 

前面说了建立一个文件的大概过程,也了解文件内容、属性以及入口的保存方式,那么建立一个目录时又是怎么回事呢?

我如今test目录使用命令mkdir 新增一个子目录child

4

从用户的角度看,目录child是目录test的一个子目录,那么在系统中这层关系是怎么实现的呢?实际上test目录包含一个指向子目录childi-节点的连接,原理跟普通文件同样,由于目录也是文件。目录在系统中的保存方式和结构大概以下:

5

 

目录其实也是文件,只是它的内容比较特殊。因此它的建立过程和文件建立过程同样,只是第二步写的内容不一样。

1)      系统找到空闲的i-节点号887220,写入目录的属性

2)      找到空闲的数据块1002来存储目录的内容,只是目录的内容比较特殊,包含文件名字列表,列表通常包含两个部分:i-节点号和文件名,这个列表其实也就是文件的入口,新建的目录至少包含三个目录”.””..”其中”.”指向本身,”..”指向上级目录,咱们能够经过比较对应的i-节点号来验证,887270 对应着上级目录中的child对应的i-节点号

3)      记录分配状况。这个和建立文件彻底不样

4)      添加目录的入口到父目录,即在父目录中的child入口。

 

通常都说文件存放在某个目录中,其实目录中存入的只是文件在i-节点表的入口,而文件的内容则存储在数据区。图3中,咱们通常会说“文件userlist在目录test中”,其实这意味着目录test中有一个指向i-节点921130的连接,这个连接所附加的文件名为userlist,这也能够这样理解:目录包含的是文件的引用,每一个引用被称为连接。文件的内容存储在数据块。文件的属性被记录在一个被称为i-节点的结构中。I-节点的编号和文件名关联起来存在目录中。

注意:其中“.”表示是当前目录。而“..”是当前目录的父目录。但也有特殊状况:如咱们查看根目录/的状况:

6

发现“.”和“..”都指向i-节点2。实际上当咱们用mkfs建立一个文件系统时,mkfs都会将根目录的父目录指向本身。因此根目录下...指向同一个i-节点也不奇怪了。

 

4、             理解连接

 

连接分为两种,1是硬连接,2是符号连接(也称为软连接)

一、 硬连接

硬连接(had link),是将目录连接到文件树的指针,硬连接同时也是将文件名和文件自己连接起来的指针

咱们如今进入目录child:并输入法如下命令

7

 咱们发现经过ln创建的连接文件mylink对应的i-节点也是921130.和上一级目录下的userlist指向的i-节点号是同样的。由此咱们能够知道mylink../userlist实际上是指向同一个i-节点号,也能够理解为这二者实际上是同一个文件。

8

建立一个连接的步骤大概以下:

1)  经过原文件的文件名找到文件的i-节点号

2)  添加文件名关联到目录,新文件的名字是mylink 内核将文件的入口(921130,mylink)添加到目录文件里。

和建立文件的过程比较发现,连接少了写文件内容的步骤,彻底相同的是把文件名关联到目录这一步

如今.i- 节点号921130对应了两个文件名。连接数也会变成2个,文件的内容并不会发生任何变化。前面咱们已经讲了:目录包含的是文件的引用,每一个引用被称为连接。因此连接文件和原始文件本质上是同样的,由于它们都是指向同一个i-节点。因为此缘由也就能够理解连接的下列特性:你改变其中任何一个文件的内容,别的连接文件也同样是变化;另外若是你删除某一个文件,系统只会在所指向的i-节点上把连接数减1,只有当连接数减为零时才会真正释放i-节点。

硬连接有两个特色:

1)不能跨文件系统

2)不能对目录

2、符号连接

另外还有一种符号连接,也称“软连接”,符号连接是经过文件名引用文件,而不是i-节点号,这和硬连接的原理彻底是不一样的,咱们先看属性:

9

发现经过ln –s 建立的软连接mylink2i-节点是1574059,和../userlist的不相同。软连接的好处就是能够跨不一样的文件系统,并且能够连接目录

相关文章
相关标签/搜索