对于磁盘而言,最小单位是sector,多个sector组成了一个block, block译作中文"块",
一般情况下:
1 sector = 512 bytes = 0.5 K
8 sector = 4K = 1block
inode = 128 or 256 bytes
块里面存放了文件数据,但是文件的元数据也需要记录,记录元数据的块叫inode
inode有以下数据:
- 文件的字节数。
- 文件拥有者的User ID。
- 文件的Group ID。
- 文件的读、写、执行权限。
- 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。
- 链接数,即有多少文件名指向这个inode。
- 文件数据block的位置。
除了文件名以外的所有文件信息,都存在inode之中,那么文件名放在哪里呢?
在<unxi高级系统编程>一书中, 对此有详细的解释
图片1解释:1个磁盘分成了很多分区,每个分区可以做不同的文件系统,文件系统内部又分了i节点和数据块等。
这张图解释了为什么硬链接不能跨区,因为硬链接依赖于文件系统而存在, 而文件系统依赖于分区而存在。
图片2解释:数据块由文件块和目录块组成,只有两项重要数据存放在目录块中:文件名和i节点编号,同时i节点编号又指向了i节点,i节点再指向文件块。
这张图解释了为什么取消硬链接不会释放磁盘空间,因为只是删除了指向i节点的指针。
也解释了给文件重命名时,文件的存储位置并不会发生变化,只是新构建了指向已有i节点的新目录块,并删除了旧的目录块。
图片3解释:在目录中新建目录testdir后的变化,对于testdir的父目录来说,有3个链接指向不同的inode,对于testdir来说,有2个链接指向不同的inode,二者指向的inode有重叠部分。
图片3解释了对于一个目录来说,至少有2个链接,分别是点和点点。如果目录下面还有子目录, 链接数会增加.
上述三个图可以说明的是:
无论是目录还是文件,最终都会落到数据块中.
dentry用来记录文件的名字、索引节点指针以及与其他目录项的关联关系。多个关联的目录项,就构成了文件系统的目录结构, 是由内核维护的一个内存数据结构,不同于数据块中的目录块, 但是有关系。