Linux inode 之我见

Posted john221100

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux inode 之我见相关的知识,希望对你有一定的参考价值。

Linux硬盘组织方式为:引导区、超级块(superblock),索引结点(inode),数据块(datablock),目录块(diredtory block).其中超级块中包含了关于该硬盘或分区上的文件系统的整体信息,如文件系统的大小等;超级块后面的数据结构是索引结点,它包含了针对某一个具体文件的几乎全部信息,如文件的存取权限、所有者、大小、建立时间以及对应的目录块和数据块等;数据块是真正存储文件内容的位置.但是索引结点中不包括文件的名字,文件名是放在目录块里的.目录块里包含有文件的名字以及此文件的索引结点编号

硬盘盘片为圆形,每个硬盘盘片都有一个可以读写的磁头(Head),将这个磁头固定,使硬盘盘片旋转一周,所走轨迹就是磁道(Track)。硬盘内所有盘片的相同磁道号的集合成为磁柱(Cylinder)。每一磁道被划分成许多区域,每个区域叫一个扇区(Sector)硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。

硬盘的0磁道的第一个扇区称为MBR,它的大小是512字节,而这个区域可以分为两个部分。第一部分为pre-boot区(预启动区),占446字节;第二部分是Partition table区(分区表),占66个字节,该区相当于一个小程序,作用是判断哪个分区被标记为活动分区,然后去读取那个分区的启动区,并运行该区中的代码。不属于任何一个操作系统,也不能用操作系统提供的磁盘操作命令来读取它。但我们可以用ROM-Bios中提供的INT13H的2号功能来读出该扇区的内容,也可用软件工具Norton8.0中的DISKEDIT.EXE来读取。

操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB,即连续八个 sector组成一个 block。block的大小在格式化分区的时候就确定了。

硬盘格式化的时候,操作系统自动将硬盘分成两个区域。一个是数据区,存放文件数据;另一个是inode区(inode table),存放inode所包含的信息。每个inode节点的大小,一般是128字节或256字节。

 

inode包含文件的元信息,具体来说有以下内容:

  * 文件的字节数
  * 文件拥有者的User ID
  * 文件的Group ID
  * 文件的读、写、执行权限
  * 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。
  * 链接数,即有多少文件名指向这个inode
  * 文件数据block的位置

eg:

6816307 -rw-r--r-- 1 workherd root 1073741824 Sep 10 11:22 test1126

File: `test1126‘
Size: 1073741824 Blocks: 2097160 IO Block: 4096 regular file
Device: 802h/2050d Inode: 6816307 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 502/ lixiaod) Gid: ( 0/ root)
Access: 2017-09-10 11:22:08.607120512 +0800
Modify: 2017-09-10 11:22:19.665120370 +0800
Change: 2017-09-10 11:28:02.053153370 +0800

    Linux通过文件元信息中的Blocks和Size参数就能定位文件在磁盘的位置了













以上是关于Linux inode 之我见的主要内容,如果未能解决你的问题,请参考以下文章

架构设计原则之我见2

架构设计原则之我见1

架构师之我见

js原型链之我见

MVVMMVVMLightMVVMLight Toolkit之我见

设计模式简单工厂之我见