Linux文件系统:从inode理解软链接与硬链接

什么是inode?

在Linux磁盘存储文件系统中,我们以块划分磁盘为两部分:超级块(superblock)和数据块(data block);同时划分单文件为户数(user data)和元数据(meta data)两个部分。

  • 用户数据记录的是文件的真实内容。比如你的血液、骨骼和各器官等等。

  • 元数据这是附加于文件的属性信息。比如身高、体重、血型和年龄等等。通常包含了文件的大小、访问模式、归属(主和组)、权限、时间戳等等。

为了快速查找分别存储于超级块和数据块的文件,我们引进了索引节点inode(index node)。我们可以理解为元数据+数据块指针=inode。每个inode大小固定为128bytes,每个文件占用一个inode。但是有一个问题,需要记录的文件属性特别多,而且一个文件可能有很多很多block,而inode又太小(记录一个block要用4byte),怎么办?linux的解决办法是:将inode记录block号码的区域定义为12个直接、一个间接、一个双间接与一个三间接记录区。总共可记录的block数量为:12+256+256*256+256*256*256(K)=16G这只符合block大小为1K时的情况。

为了方便理解,我绘制的示例如下图:

wKiom1ecZgKwRz6bAAC_o2O7VB4610.png


Linux是如何查找文件的?

文件的文件名是不包含在inode结构里的,用户通过文件名来引用一个文件,文件名只是为了方便用户识别文件的。

每个inode都有一个编号,我们称为索引编号(inumber),两者虽然极为相似,并且互相关联,但他们却是两个不同的概念。 inode 指的是数据结构;而inumber实际上是 inode 的标识编号,因此也称其为 inode 编号 或者索引编号。索引编号只是文件相关信息中一项重要的内容。Linux的内核内存是通过索引编号定位inode,再从inode里的指针,定位到data block,从而找到文件的。

值得注意的是,目录也是文件,不过目录的 data block 里的数据是目录下的文件名(子目录)它的inode 号之间的映射构成的。

现在我们通过示图来展示 Linux 查找文件

1.假设有文件目录结构如下图:

wKiom1ecn-nyk7qMAAAeJ1kTy7o602.png

系统需要查找/testdir/A/b.txt文件,查找过程是

wKiom1edOQ3AdjhAAAJHnikK1h8934.gif


linux如何创建、删除、移动文件?

创建

当我们直接创建(或通过复制创建)一个普通文件/PATH/file时,系统会分配一个空闲的inode,在inode表中生成inumber,同时父目录/PATH的data block里添加file《═》inumber。这样一个新文件创建成功了。

rm删除

链接数递减,从而释放的inode 号可以被重用,
   

把数据块放在空闲列表中

删除父目录里的映射项

数据实际上不会马上被删除,但当另一个文件使用数据块
   
时将被覆盖。

mv移动

1. 如果mv 命令的目标和源在相同的文件系统,作为mv  命令
   
    用新的文件名创建对应新的目录项

   
    删除旧目录条目对应的旧的文件名

   
    不影响inode 表(除时间戳)或磁盘上的数据位置:没有数据被移动!

   
2. 如果目标和源在一个不同的文件系统, 由于inode不能跨文件系统,所以mv 需要在目标文件系统中执行相当于cp 和rm。


软链接和硬链接

为解决文件的共享使用,Linux 系统引入了两种链接:硬链接 (hard link) 与软链接(又称符号链接,即 soft link 或 symbolic link)。链接为 Linux 系统解决了文件的共享使用,还带来了隐藏文件路径、增加权限安全及节省存储等好处。若一个 inode 号对应多个文件名,则称这些文件为硬链接。换言之,硬链接就是同一个文件使用了多个别名hard link 就是 file 的一个别名,他们有共同的 inode)。硬链接可由命令 link 或 ln 创建。如下是对文件 oldfile 创建硬链接。

硬链接:

wKiom1eentDwLwKUAABg5vuX5bE659.png

从上图中我们可以看到,硬链接与源文件是相同的inode和data block。因此

硬链接的特性为:


  • 只能对已存在的文件进行创建,创建硬链接会在inode里添加计数

           

  • 指向inode相同,与源文件的data block也相同

  • 不能对目录创建硬链接

  • 不能跨文件系统进行硬链接的创建

  • 创建硬链接会在硬链接父目录添加映射条目:hard link映射源文件inode

  • 删除一个硬链接文件,会在父目录清除该条映射,inode计数减一,所以不影响其他有相同 inode 号的文件。


     

硬链接展示:

源文件不存在, 无法创建硬链接:

 

wKiom1eeqAbhNrv5AAAYG0WlQBI604.png

不能对目录进行创建硬链接:

 

wKioL1eepw6AqBD3AAAPdaAzfp4261.png

不能跨文件系统创建硬链接:

wKiom1eeqVujeiCsAABO6p2D5IE953.png

与源文件有相同的inode,inode里计数增加1:

 

wKiom1eeqI_CeCPyAADfjNj_s-A119.png


软连接:

 
wKioL1eenzmTZVryAACSx5d6mCQ903.png

从上图中我们可以看到,软连接和源文件是两个独立inode的文件,因此

软链接的特性为:


  • 可以指向一个目录

  • 可以跨文件系统(分区)

  • 是一个指向源文件名称的指针,是个一个文件

  • 指向的是另一个文件的路径;其大小为指向的路径字符串的长度;不增加或减少目标文件inode 的引用计数


     

软链接展示:

可以对目录创建软链接:

wKiom1eeqnqi2T-jAAAcA66lwkc466.png

可以跨文件系统创建软连接:

wKioL1eeq3rzyAbsAABL6t0Q5Us428.png

软链接是指向源文件的指针,与源文件是两个独立inode的文件:

wKioL1eerdTjOzLRAAD6GKcF9MU758.png


写在结束

本文描述了 inode 的结构体。通过索引节点结构体,区分硬链接与软链接的不同存在。

本文参考资料主要来源于:

《理解 Linux 的硬链接与软链接》http://www.ibm.com/developerworks/cn/linux/l-cn-hardandsymb-links/#fig2

《学习 Linux,101: 创建和更改硬链接和符号链接》http://www.ibm.com/developerworks/cn/linux/l-lpic1-v3-104-6/

文中主要通过个人理解进行描述,由于初学Linux,限于本人水平有限,文中难免错误纰漏。欢迎各位看官不吝指教、讨论相关技术。谢谢。联系我:jacky18676887374@aliyun.com

原创文章,作者:昭其,如若转载,请注明出处:http://www.178linux.com/30437

(0)
昭其昭其
上一篇 2016-08-07
下一篇 2016-08-07

相关推荐

  • HAProxy七种调度方法的简单示意图

    看了三个月,中间因出差和其他事没有看估计也有十几天,刚把35天的视频看完。很多内容都记不住,待第一次看完后再回头看吧。 现在想,对内容进行简单的画图,把基本的体现出来,对记忆和回顾应该有帮助。

    Linux干货 2016-07-26
  • varnish浅述

    安装varnish,安装包需要到官网下载http://www.varnish-cache.org/releases/index.html varnish的程序环境: /etc/varnish/varnish.params:配置varnish服务进程的工作特性,例如监听的地址、端口及缓存机制等; /etc/varnish/default.vcl:配置各Chil…

    2016-11-15
  • keepalived的初级使用

        1、双主模型的ipvs高可用   一、双主模型的ipvs高可用     1)网络结构图       2)、ipvs的类型是dr模型,调度算法是rr       RS1和RS2都是centos6.8 对RS1和RS2的配置:…

    Linux干货 2017-05-15
  • Linux系统的软硬连接的区别

    Linux系统的软硬连接的区别 M21-陆东贵 CentOS 7.2 Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情况下,ln命令产生硬链接。 一、  硬链接: 硬连接是指通过索引节点来进行连接Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接…

    Linux干货 2016-10-19
  • 网络管理

                 网络管理 一、 OSI七层模型   OSI七层模型结构如下            OSI七层模式基本只是用于我们学习时候使用,因为其将每层协议定义的太规范,导致缺乏灵活性,所以现实中仍然以tcp/ip四层模型为主,OSI七层模型从下至上依次为:      1、 物理层( physical layer)   物理层是通过网络介质(如网…

    Linux干货 2016-09-06
  • 让运维工程师不再蓝瘦、香菇

    最近广西一小哥失恋后录的视频风靡互联网,也让“蓝瘦、香菇”这两个词火了一把。虽然原故事男主角是因为失恋才蓝瘦、香菇,但想想作为运维“狗”的我们也时常因强大的工作压力而蓝瘦,常常在晚上睡得香呼呼的时候因为要处理故障从温暖的被窝爬起来,看着铝朋友鄙视的眼神,真的好香菇……本来作为技术大牛的我们,工作应该是很酷的事情,享受的应该是小白美铝们崇拜的眼神,可现在却那么…

    系统运维 2017-01-09