linux的磁盘文件系统使用的的EXT2(Linux second extended file system),要想了解文件系统必须从认识EXT2开始.而标准的linux文件系统使用是一种以inode为基础的文件系统。
1.何为inode
首先我们搞明白文件存储的问题
文件储存在硬盘上,硬盘的最小存储单位叫做”扇区”(Sector)。每个扇区储存512bytes。操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个”块”(block)。这种由多个扇区组成的”块”,是文件存取的最小单位。”块”的大小,最常见的是4KB,即连续八个 sector组成一个 block。
文件数据都储存在”块”中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为”索引节点”。
inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的block号码,记录的文件数据至少有以下几个方面:
文件的访问模式(rwx)
文件的所有者与组(owner/group)
文件的大小
文件创建或状态改变的时间(ctime)
最近一次的读取时间(atime)
最近修改时间
链接数,即有多少文件名指向这个inode
文件数据block的位置
2.查看文件inode信息
以查看ttw.txt文件为例
stat ttw.txt
3.inode的数量和大小
inode的数量和大小在格式时就已经固定了,每个inode的大小为128bytes或256bytes,我们可能会有这样的疑问:inode要记录的数据那么多,但inode的大小又那么小?是怎么做到的呢?(这部分可以看一下鸟哥的私房菜),另外:
查看每个硬盘分区的inode总数和已经使用的数量,用df命令:
df -i
查看每个inode节点的大小,可以用如下命令:
sudo dumpe2fs -h /dev/sda10 | grep "Inode size"
我的Inode size这里显示是 256 ,另外上述命令中dev/sda10是g根目录磁盘文件名,我们需要事先用 df 命令调出目前挂载的设备,插查看根目录磁盘文件名,也就是下面这张图:
4.inode号码
每个inode都有一个号码,操作系统用inode号码来识别不同的文件。系统读取文件时需要找到这个文件名对应的inode号码,分析inode所记录的权限与用户是否符合,若符合再根据inode的信息,找到文件数据所在的block,这样才能实际读取block的内容。
查询文件名对应的inode号码,使用 ls -i命令:
ls -i ttw.txt
参考资料:《鸟哥的私房菜》
http://www.ruanyifeng.com/blog/2011/12/inode.html