详解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-文件管理》
原文出处:https://www.cnblogs.com/pansn/p/10891114.html
来源:oschina
链接:https://my.oschina.net/u/4299308/blog/3263537