首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >深入了解linux inode

深入了解linux inode

作者头像
Steve Wang
发布2020-11-12 11:18:21
2.7K0
发布2020-11-12 11:18:21
举报

inode

文件是储存在硬盘上的,硬盘最小的存储单位叫做扇区sector,每个扇区存储512个字节。操作系统读取硬盘的时候,不会一个个扇区地读取,而是一次性地读取多个扇区,这个逻辑单位叫做块block。由多个扇区构成的快,才是文件存取的最小单位。块的大小,最常见的是4KB,即连续八个sector组成一个block

文件数据存储在块中,那么就需要一个地方来存储文件的元信息(meta information),比如文件的创建者、创建日期、大小等关键信息。在linux系统中,存储文件元信息的区域就叫做inode,中文译名为索引结点,也叫i结点

  • 元信息 -> inode
  • 数据 -> block
inode内容

inode包含除文件名以外的很多文件元信息,例如:字节数、属主UserID、属组UserGroup、读写执行权限、时间戳等。

文件名存放在目录中,但linux系统内部并不适用文件名,而是使用inode号标识文件。也就是说linux系统里文件名其实是inode号便于识别的别称。

stat

stat命令查看inode存储的文件信息。

>> mkdir test
>> echo "this is test file" > test.txt
>> stat test.txt

  File: ‘test.txt’
  Size: 18              Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 33574994    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2019-08-28 19:55:05.920240744 +0800
Modify: 2019-08-28 19:55:05.920240744 +0800
Change: 2019-08-28 19:55:05.920240744 +0800
 Birth: -
file

可以使用file命令查看文件类型

>> file test
test: directory
>> file test.txt
test.txt: ASCII text

Linux如何通过inode读取文件

在UI层面,用户通过文件名来打开文件,实际上,Linux内部将该过程分为四步:

  1. 系统找到这个文件名对应的inode号
  2. 通过inode号,获取inode信息;
  3. 根据inode信息,判断当前用户是否具有访问权限,有就指向对应的数据block,没有就返回权限拒绝。
  4. 根据inode信息,找到文件数据所在的block,并读出数据。
ls -i

ls -i命令可以查看目录下所有文件对应的inode号

>> ls -i
33574991 anaconda-ks.cfg      2086 test  33574994 test.txt
inode

inode本身也需要占据硬盘存储空间。linux系统在格式化的时候,操作系统会自动将硬盘分为两个区域。一个是数据区,存放文件数据;另一个是inode区,存放inode所包含的信息。每个inode的大小,一般是128字节或者256字节。通常情况下不需要关注单个inode的大小,只需要计算inode的总数。而inode总数需要在格式化的时候确定。

df -i

df -i命令可以查看硬盘分区的inode总数和已使用情况。

>> df -i
Filesystem               Inodes IUsed   IFree IUse% Mounted on
/dev/mapper/centos-root 8910848 26029 8884819    1% /
devtmpfs                 230602   384  230218    1% /dev
tmpfs                    233378     1  233377    1% /dev/shm
tmpfs                    233378   487  232891    1% /run
tmpfs                    233378    16  233362    1% /sys/fs/cgroup
/dev/sda1                524288   328  523960    1% /boot
tmpfs                    233378     1  233377    1% /run/user/0

linux使用inode机制所产生的特有现象

linux inode号与文件名分离,因为会导致Linux系统会出现不同于window的特殊现象。

  1. 文件名如果包含特殊字符,可能无法正常删除。这时可以通过直接删除inode,就能够起到删除文件的作用。
find ./* -inum 节点号 -delete
  1. 移动文件或者重命名文件,只是改变文件名,并不会影响inode号。
  2. 打开一个文件以后,系统就以inode号来识别这个文件,不在考虑文件名。

这种情况下软件更新会变得简单,可以在不关闭软件的情况下进行更新,而不需要重启。因为系统通过inode号,识别运行中的文件,不通过文件名。更新时就以同样的文件名,生成一个新的inode,不会影响运行中的文件。等到下一次运行这个软件的时候,文件名自动指向新的inode,旧版文件的inode则被回收。

inode耗尽故障

前面提到过,硬盘分区的inode总数在格式化之后就已经固定,而每个文件必须要有一个inode,因此就有可能发生inode节点耗光的情况,但硬盘空间还剩不少,却无法创建新文件。同时这也是一种攻击方式,所以一些共用的文件就必须做磁盘限额,以防止系统正常运行被干扰。

修复该故障需要找出大量占用inode的文件并删除。

硬链接与软连杰

硬链接

通过文件系统的inode链接来产生新的文件名,而不是产生新的文件,这称为为硬链接。

一般情况下,每个inode号对应一个文件名,但是Linux允许多个文件名指向同一个inode号。这意味着可以使用不同的文件名访问同一个文件。

ln命令可以实现这一点。

ln 源文件或目录 目标文件或目录

运行该命令之后,源文件与目标文件的inode号相同,都指向同一个inodeinode信息中的链接数会增加1。

注意:不能对目录使用硬链接。 通过mkdir命令创建一个新目录,其硬链接数只能有2个:目录本身为1个硬链接,目录下面的隐藏目录.(点号)是该目录的又一个硬链接,也占一个链接数。

软链接

软连接类似于windows的快捷方式,可以快速链接到文件或目录。

ln -s 源文件或目录 目标文件或目录

软链接就是再创建一个独立的文件,而这个文件会让数据的读取指向它连接的文件的文件名。例如:文件A和文件B的inode号虽然不一样,但是文件A的内容是文件B的路径。读取文件A时,系统会自动将访问者导向文件B。这时,文件A就被称为文件B的软连接soft link或者符号连接symbolic link

这意味着,文件A依赖于文件B存在,如果B文件被删除,打开文件A会报错。这也是软连接和硬链接最大的不同。文件A指向B的文件名而不是inode号,文件B的inode链接数不会因此发生变化。

参考

Linux inode 详解

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-11-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • inode
    • inode内容
      • stat
      • file
      • ls -i
      • inode
      • df -i
  • Linux如何通过inode读取文件
  • linux使用inode机制所产生的特有现象
  • inode耗尽故障
  • 硬链接与软连杰
    • 硬链接
      • 软链接
      • 参考
      相关产品与服务
      对象存储
      对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档