inode

有时候系统提示磁盘提示满了,不能写入数据,然后查看时候发现空间还有很多,原因可能是因为磁盘的inode满了。inode是什么呢?
文件的数据分为元数据(metadata)和数据(data)两类。元数据用来储存文件的属性,就放在inode中,inode为‘index node’的缩写,意思为索引节点,用stat命令可以查看一个文件的inode:

[root ~]#stat anaconda-ks.cfg
  File: "anaconda-ks.cfg"
  Size: 1342        Blocks: 8          IO Block: 4096   普通文件
Device: 802h/2050d  Inode: 3014665     Links: 1
Access: (0600/-rw-------)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2017-05-16 19:12:09.498999452 +0800
Modify: 2017-05-16 19:12:10.254999454 +0800
Change: 2017-05-16 19:12:16.394999445 +0800

其中各个选项表达的意思

  • size:文件大小
  • Blocks:几个扇区组成一个块
  • IO Block:一个块的大小,单位为字节
  • Device:
  • Inode:文件节点号
  • Links:有几个硬链接
  • 第一个Access: 用户权限 用户ID 用户组ID
  • 第二个Access:文件最后一次访问时间
  • Modify:文件最后一次修改时间
  • Change:文件属性最后一次修改时间

文件在存取的时候,是有三个步骤的:

  • 1、根据文件名里的对应关系,找到文件对应的Inode number
  • 2、通过节点号读取到文件的Inode table
  • 3、再根据Inode table中的指针读取到相应的Blocks

所以,有时候磁盘还有空间,但是inode满了的情况下,系统也会提示磁盘空间已满,查看inode使用情况可以使用df -i选项:

[root app]#
[root app]#df -i
Filesystem      Inodes IUsed   IFree IUse% Mounted on
/dev/sda2      6406144 71647 6334497    2% /
tmpfs           125514     1  125513    1% /dev/shm
/dev/sda3      3203072    41 3203031    1% /app
/dev/sda1        64000    38   63962    1% /boot
/dev/sr0             0     0       0     - /mnt

硬链接和软链接

硬链接就是在目录文件中创建一个新的名字,节点号和原文件的节点号相同,所以也会指向同一个Inode table,所以最后找到的数据其实也就是相同的数据了。
软链接是一个文件,他包含了另一个文件的路径名,而不是指向的原文件的inode tables,所以他依赖原文件,当原文件路径发生变化时,软链接就会失效。

cp,mv和rm

cp的过程为分配一个空闲的inode号,在inode表中生成新条目
在目录中创建一个目录项,将名称与inode编号关联
拷贝数据生成新的文件。

rm是删除目录中的文件名和对应的节点号,删除节点表,不删除数据,而是将数据标记为空闲,有别的数据写入时才会覆盖。

mv分为两种情况

  • 如果mv命令的目标和源在相同的文件系统,作为mv 命令
    用新的文件名创建对应新的目录项并删除旧目录条目对应的旧的文件名,不影响inode表(除时间戳)或磁盘上的数据位置:没有数据被移动!

  • 如果目标和源在一个不同的文件系统, mv相当于cp和rm

    原文作者:fengkaipeng
    原文地址: https://www.jianshu.com/p/870c8608d0e0
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞