到底什么是inode呢 ? 这个和我们程序开发到底有多大的关系?
首先,必须共识的两点: 1,数据是存放在磁盘中; 2,对于存放位置与其它对应的描述信息亦放在磁盘中; (1,2会在不同的区域)
其次,既然是存在磁盘中,我们常说按块存取,这个块是怎么来的呢,大小又是多大? 其实按块存取目的就是尽量多读数据,比如你一个扇区一个扇区的读效率要低些(要多次进行磁盘i/o)所以一次要多读几个扇区具体读几个取决于块由几个扇区组成,一般一个块大小是4096,即4k, 而一个扇区是512个字节,所以一般一个块对应8个扇区
再次,数据存放到磁盘上后需要有个索引目录来知道数据都存在什么位置了,这个就是inode
例如 查看test2.log对应inode信息:
stat test2.log
File: “test2.log”
Size: 0 Blocks: 0 IO Block: 4096 一般空文件
Device: 6830h/26672d Inode: 1352646089 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 3345/muyanxue) Gid: ( 3345/muyanxue)
Access: 2013-11-27 16:42:07.083289015 +0800
Modify: 2013-11-27 16:42:07.083289015 +0800
Change: 2013-11-27 16:42:07.083289015 +0800
这些信息就是inode中对应的描述信息
其中有一个inode: 号码 ,这个号码就是inode的号码,在磁盘中唯一标识
Links: 数字,即为有几个链接到这个文件
对于操作系统来说只关注inode即可,这样可以直接对数据进行存取,但是我们常用的是文件描述符fd 而不是inode
这样就可能多个fd对应一个inode, 我们操作fd时只是对inode作一个映射,这样可以保持各自对fd操作时互相没有干扰
当处理fd时最终也会从fd对就在结构中找到inode
所以,对于数据的存放与inode有关,而对于程序开发来讲关注的是fd
比如你程序中stat某个文件得到ctime/atime/mtime等,这个也是用fd找到inode后从inode结构中得到的信息