Linux下inode理解及软、硬链接初探

1、Inode是什么?

要理解inode,要从文件储存说起。

文件由元数据和数据构成。

文件储存在硬盘上,最小的存储单位叫做“扇区(Sector)”。每个扇区存储512字节。操作系统读取硬盘时,不会一个扇区一个扇区地读取,这样非常低效;而是一次性连续读取多个扇区,即一次性读取一个“块(block)”。“块”由多个扇区组成,常见的大小有1K、2K、4K等,其中4K较常见。

文件的数据都存储在块(block)中,那么文件的元数据(比如文件的创建者、创建日期、大小等信息)也需要找个空间存储。存储文件元数据信息的区域就叫做inode,中文译作“索引节点”。

在linux系统中,每个文件会分配到一个inode,可以将inode简单理解为指针,它永远指向文件的具体存储位置。系统是通过inode来定位每个文件的。

2、Inode包含的内容

Inode包含下面的信息:

* 文件的字节数

  * 文件拥有者的User ID

  * 文件的Group ID

  * 文件的读、写、执行权限

  * 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。

  * 链接数,即有多少文件名指向这个inode

* 文件数据block的位置

3、inode的大小

       inode也会消耗硬盘空间,所以硬盘格式化的时候,操作系统自动将硬盘分成两个区域。一个是数据区,存放文件数据;另一个是inode区(inode table),存放inode所包含的信息。

查看每个硬盘分区的inode总数和已经使用的数量,可以使用df命令。df  -i

查看每个inode的大小:dumpe2fs –h /dev/sda1| grep “Inode size”

4、inode号码

      每个inode都有一个号码,操作系统用inode号码来识别不同的文件。

这里值得重复一遍,Unix/Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称或者绰号。

表面上,用户通过文件名,打开文件。实际上,系统内部这个过程分成三步:首先,系统找到这个文件名对应的inode号码;其次,通过inode号码,获取inode信息;最后,根据inode信息,找到文件数据所在的block,读出数据。

5、目录文件:

在unix/linux系统中,目录也是一种文件。目录由一系列的目录项(dirent)组成,每个目录项由两部分组成:所包含文件的文件名,以及该文件名对应的inode号码。

简单来说,目录是用来关键文件名与Inode number的。

6、那么在linux中,文件系统查找文件的过程是怎样的呢。

以查找/var/log/somefile文件为例:

       先查找/对应的inode号——>在对应inode表中找到/对应inode信息,通过该信息找到对应磁盘块——>在/磁盘块中找到var的inode号——>再到对应的inode表中找到var对应inode信息,获知其对应的磁盘块——>在var对应的磁盘块中找到log对应的inode号——>根据inode号找到log对应inode信息,找到对应的磁盘——>在log中找到somfile文件对应的inode号——>在inode表中找到somefile文件对应inode信息,查找到对应磁盘块——>再到somefile文件的磁盘块上获取文件的数据内容。至此,文件获取。

7、复制、移动和删除文件在inode上的表现

       复制文件:分配空闲的inode——>在inode table里创建条目——>在目录里创建文件和inode的对应关系——>将文件写入块

       移动文件:文件的移动分为两种情况。

              第一种:源文件和目标文件在同一文件系统/分区上。文件移动的实现方式是:在目标目录下创建目标文件名与inode的对应关系——>删除源目录下的源文件名与inode的对应关系。完成。Ctime会被改写。在此情况下,数据在磁盘上的位置没有移动。

              第二种:源文件与目标文件在不同的文件系统上。文件移动的实现方式是:

找到空闲的inode——>在inode下创建条目——>在目录下创建目标文件名和inode的对应关系——>将文件写入块——>同时源文件将被删除。Ctime会被改写,inode发生变化,数据在磁盘上的位置也相应地移动

       删除文件:

       删除文件的实质是减少inode的链接数,当链接数为0时,删除目录下文件名和inode的对应关系,将inode标记为可用。数据在块中并没有被移除,只是该块也被标记为可用,当有新数据写入并且需要用到该块时,该块上面的数据才会被覆盖。

8、软、硬链接的区别

8.1 什么是硬链接

一般情况下,文件名和inode号码是"一一对应"关系,每个inode号码对应一个文件名。

但是,Unix/Linux系统允许多个文件名指向同一个inode号码。这意味着,可以用不同的文件名访问同样的内容;对文件内容进行修改,会影响到所有文件名;但是,删除一个文件名,不影响另一个文件名的访问。这种情况就被称为"硬链接"(hard link)。

       源文件与目标文件的inode号码相同,都指向同一个inode。inode信息中有一项叫做"链接数",记录指向该inode的文件名总数,这时就会增加1。反过来,删除一个文件名,就会使得inode节点中的"链接数"减1。当这个值减到0,表明没有文件名指向这个inode,系统就会回收这个inode号码,以及其所对应block区域。

这里顺便说一下目录文件的"链接数"。创建目录时,默认会生成两个目录项:"."和".."。

前者的inode号码就是当前目录的inode号码,等同于当前目录的"硬链接";后者的inode号码就是当前目录的父目录的inode号码,等同于父目录的"硬链接"。

所以,任何一个目录的"硬链接"总数,总是等于2加上它的子目录总数(含隐藏目录)。

       硬链接创建方式:ln  源文件  链接文件

blob.png

8.2 什么是软链接

文件A和文件B的inode号码虽然不一样,但是文件A的内容是文件B的路径。读取文件A时,系统会自动将访问者导向文件B。因此,无论打开哪一个文件,最终读取的都是文件B。这时,文件A就称为文件B的"软链接"(soft link)或者"符号链接(symbolic link)。

这意味着,文件A依赖于文件B而存在,如果删除了文件B,打开文件A就会报错:"No such file or directory"。

软连接创建方式:ln –s 源文件 链接文件

    

blob.png

这是软链接与硬链接最大的不同:软链接指向文件的文件名,而不是文件的inode号码,文件的"链接数"不会因此发生变化。

原创文章,作者:M20-1钟明波,如若转载,请注明出处:http://www.178linux.com/26632

(0)
上一篇 2016-07-29 15:23
下一篇 2016-07-29 15:23

相关推荐

  • Linux进程与计划任务

    Linux进程与计划任务 linux进程及作业管理 进程 内核的功用:进程管理、文件系统、网络功能、内存管理、驱动程序、安全功能等特权操作模式切换(理想状态):70%CPU时间用户模式+30%CPU时间内核模式进程(Process):是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的存在生命周期的基本单位,是操作系统结构的基础。在早期…

    Linux干货 2016-09-23
  • 建立私有CA的方法

    建立私有CA的方法 建立私有CA的工具:     OpenCA     Openssl 证书申请及签署步骤:     1,生成申请请求:     2,RA核验;    &…

    Linux干货 2016-09-19
  • 第七周作业,分区格式化及一些脚本练习

    1、创建一个10G分区,并格式为ext4文件系统;    (1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl;       fidsk划分10G分区,partx命令强制内核重新读磁盘分区表,cat /proc/partitions是否内核识别到新分区 …

    Linux干货 2017-02-01
  • 第一周作业:计算机的组成及其功能

    第一周作业 主要是对应了马哥视频前两天共八节课的内容,作业一共有六道题 01.描述计算机的组成及其功能 02.按系列罗列Linux的发行版,并描述不同发行版之间的联系与区别 03.描述Linux的哲学思想,并按照自己的理解对其进行解释性描述 04.说明Linux系统上命令的使用格式;详细介绍ifconfig、echo、tty、startx、export、pw…

    2017-09-12
  • sed与vim相关练习

    sed 练习 以行为单位的新增/删除功能 1将 /etc/passwd 的内容列出并且打印行号,同时,请将第 2~5 行删除! 2在第二行后(亦即是加在第三行)加上“the is xing line?”字样! 3在第二行前(亦即是加在第而行)加上“the is xing line?”字样! 4在第二行后面加入两行字,例如“the is xing line &…

    Linux干货 2016-08-10
  • 第四周博客分享

                    时间匆匆,转眼来马哥已经快一个月了,这一个月对我来说是收获满满,每天都在学到新的东西。       &nbs…

    2017-08-06