详解Inode

详解inode

索引节点(inode)

什么是inode:文件存储在硬盘上,硬盘最小单位为扇区,每个扇区大小为512字节

系统提高硬盘读取效率是一次连续读取多个扇区,而多个扇区整合一个块(block)

块就是文件存取最小单位,一个块大小4k,而文件属性、创建时间、权限、所占块大小、数量等这些信息即为inode信息

所以硬盘分区都有一个对应inode

inode中信息包括:

文件类型、权限、UID、GID

链接数

文件大小和不同的时间戳

指向磁盘上文件的数据块指针

有关文件的数据

Inode特点

  • 每个inode 大小均固定为128 bytes (新的ext4 与xfs 可设定到256 bytes);
  • 每个档案都仅会占用一个inode 而已;
  • 承上,因此档案系统能够建立的档案数量与inode 的数量有关;
  • 系统读取档案时需要先找到inode,并分析inode 所记录的权限与使用者是否符合,若符合才能够开始实际读取 block 的内容

 

使用命令:ls -i/ll -i

 

 

Inode表结构如下图:

 

 

 

从上图inode 结构表可以算出一下表结构图

 

 

inode和三个文件管理命令关系 

cp和inode

分配一个空闲的inode号,在inode表中生成新条目

在目录中创建一个目录项,将名称与inode编号关联

拷贝数据生成新的文件

rm 和inode:

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

把数据块放在空闲列表中

删除目录项

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

mv和inode

1、如果mv命令的目标和源在相同的文件系统,作为mv 命令

用新的文件名创建对应新的目录项

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

不影响inode表(除时间戳)或磁盘上的数据位置:没有数据被移动!、如果目标和源在一个不同的文件系统, mv相当于cp和rm

 

查询磁盘inode使用量

 

 

结论:影响磁盘空间可能是文件大小和节点编号

  • 一个文件系统对象可以有多个名字,具有硬链接关系的文件系统对象名字具有相同的inode号码,彼此是平等的。即首个被创建的文件并没有特殊的地位。这与符号链接不同。一个符号链接文件有自己的inode,符号链接文件的内容是它所指向的文件的名字。因此删除符号链接所指向的文件,将导致这个符号链接文件在访问时报错。
  • 删除一个文件或目录,实际上是把它的inode的链接数减1。这并不影响指向此inode的别的硬链接。
  • 一个inode如果没有硬链接,此时inode的链接数为0,文件系统将回收该inode所指向的存储块,并回收该inode自身。
  • 从一个inode,通常是无法确定是用哪个文件名查到此inode号码的。打开一个文件后,操作系统实际上就抛掉了文件名,只保留了inode号码来访问文件的内容。库函数getcwd()用来查询当前工作目录的绝对路径名。其实现是从当前工作目录的inode逐级查找其上级目录的inode,最后拼出整个绝对路径的名字。
  • 历史上,对目录的硬链接是可能的。这可以使目录结构成为一个有向图,而不是通常的目录树的有向无环图。一个目录甚至可以是自身的父目录。现代文件系统一般禁止这些混淆状态,只有根目录保持了特例:根目录是自身的父目录。ls /..就是根目录的内容。
  • 一个文件或目录在文件系统内部移动时,其inode号码不变。文件系统碎片整理可能会改变一个文件的物理存储位置,但其inode号码不变。非UNIX的FAT及其派生的文件系统是无法实现inode不变这一特点。
  • inode文件系统中安装新库十分容易。当一些进程正在使用一个库时,其它进程可以替换该库文件名字的inode号码指向新创建的inode,随后对该库的访问都被自动引导到新inode所指向的新的库文件的内容。这减少了替换库时重启系统的需要。而旧的inode的链接数已经为0,在使用旧库的进程结束后,旧的inode与旧库文件会被系统自动回收。

 

参考-马哥教育《linux-文件管理》

 

posted @ 2019-05-19 22:08  月黑风高人不善  阅读(3101)  评论(0编辑  收藏  举报