zhjx922 De Blog

inode介绍及用途

Linux空间还有不少剩余,但有些时候会提示空间已满,这是为啥?

df查看空间

在日常使用中,有时候会发生如下情况,输入: df,显示如下:

文件系统 已用(I)%
/dev/xvda1 70%

但是你创建文件或者文件夹的时候会提示你,空间已满!

输入:df -i

文件系统 已用(I)%
/dev/xvda1 100%

问题就在这里,-i表示:显示inode信息而非块使用量,那么inode又是什么呢?

inode

inode中文意思为索引节点,这个索引的就是文件,我们知道Linux下一切皆为文件,inode记录的就是文件在硬盘获取其它设备上对应的储存位置。
文件名与目录名是便于使用的别名。一个文件系统对象可以有多个别名(比如软、硬连接),但只能有一个inode,并用这个inode来索引文件系统对象的存储位置。
Linux中硬盘在格式化,后会将硬盘分为inode区、数据区、目录区。

  • inode区记录的就是每个节点的节点类型、字节数、权限、创建时间等相关属性
  • 数据区当然是数据真正储存的地方了
  • 目录区记录的是目录下面文件的名称以及对应的inode

inode在生成分区的时候已经定义好了数量,如果inode使用完了,也就不能继续创建新的文件了

POSIX inode

POSIX标准强制规范了文件系统的行为。每个“文件系统对象”必须具有:

  • 以字节为单位表示的文件大小。
  • 设备ID,标识容纳该文件的设备。
  • 文件所有者的User ID。
  • 文件的Group ID
  • 文件的模式(mode),确定了文件的类型,以及它的所有者、它的group、其它用户访问此文件的权限。
  • 额外的系统与用户标志(flag),用来保护该文件。
  • 3个时间戳,记录了inode自身被修改(ctime, inode change time)、文件内容被修改(mtime, modification time)、最后一次访问(atime, access time)的时间。
  • 1个链接数,表示有多少个硬链接指向此inode。
  • 到文件系统存储位置的指针。通常是1K字节或者2K字节的存储容量为基本单位。

查询inode属性

执行stat file会输出类似如下信息:

1
2
3
4
5
6
7
8
文件:"a.php"
大小:4096 块:8 IO 块:4096 目录
设备:ca01h/51713d Inode:276961 硬链接:2
权限:(0755/drwxr-xr-x) Uid:( 0/ root) Gid:( 0/ root)
最近访问:2017-02-18 17:16:02.916390626 +0800
最近更改:2017-02-18 17:16:02.916390626 +0800
最近改动:2017-02-18 17:16:02.916390626 +0800
创建时间:-

使用inode删除文件

有时候服务器上因为各种原因会生成一些名字很奇怪的文件或者目录,想删除掉的话,可以直接通过inode删除

ll -i查看文件列表:

1
2
276893 -rw-r--r-- 1 root root 0 2月 18 17:30 a.php
268121 drwxr-xr-x 3 root root 4096 2月 14 18:25 blog

执行

1
rm `find -inum 276893` //通过find查询inode为276893的文件名,然后删除

zhjx922 wechat
欢迎关注二维码,一起交流学习!