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

相关推荐

  • Linux下各类颜色文件的意思

    Linux下各类颜色文件的意思   Linux系统对在终端下的各文件进行了颜色区分,了解各个颜色文件对应的意思对是学习Linux必须要掌握的。Linux文件颜色如下图: 1、白色:表示普通文件(-) 2、蓝色:表示目录(d) 3、绿色:表示可执行文件(-) 4、红色:表示压缩文件(-) 5、浅蓝色:链接文件(l) 6、黄色:表示设备文件(c) 7、…

    Linux干货 2016-10-18
  • 20160804正则表达式作业

    正则表达式表示18位身份证号 正则表达式表示手机号 正则表达式表示邮箱 Ø  截取出ifconfig命令结果中所有的本机的ipv4地址   Ø  查看分区中使用率最大的百分比 Ø  查看UID最大的用户名、UID以及shell类型 Ø  查看/tmp权限,并且以数字方式显示 思路:先找到如何才能查看到/tmp…

    Linux干货 2016-08-08
  • linux内核及centos系统启动流程

    Linux组成 Linux: kernel+rootfs(根文件系统) kernel功能: 进程管理、内存管理、网络管理、驱动程序、文件系统、安全功能 rootfs:程序和glibc  库:函数集合, function, 调用接口(头文件负责描述)      过程调用:proce…

    Linux干货 2016-09-10
  • LAMP 编译安装基于2.4

    一 安装前准备 说明:     操作系统:CentOS 6.7 64位     MySQL数据库版本:mariadb-5.5.48-linux-x86_64.tar.gz     Apache 版本:httpd-2.4.12.tar.bz2…

    Linux干货 2016-11-21
  • mysql备份还原

    一、前言 数据对于一个公司来说有多重要这点不说大家也知道,数据还在,服务崩溃还可重建。为什么要备份?很简单,天灾人祸。比如硬件故障,软件故障,自然灾害,黑客攻击或自身误操作等因素。这时候备份,恢复数据就显得至关重要了。 二、基础概念 由于备份与恢复需要用到一些必要的知识,故在此先讲解下 2.1二进制日志 myql日志有多种,其中二进制日志文件对数据恢复有很大…

    Linux干货 2015-11-30
  • Systemd服务

    POST –> Boot Sequence –> Bootloader –> kernel + initramfs(initrd) –> rootfs –> /sbin/initinit:CentOS 5: SysV initCentOS 6: UpstartCentO…

    Linux干货 2015-03-02