i-node

Linux文件概览

  1. 磁盘是由一个一个分区组成的,即磁盘=分区+分区+分区…
  2. 每一个分区内都有一个文件系统,且一个分区内有且仅有一个文件系统。
  3. 每个分区内都依次包含这些内容:自举块(也叫引导块),超级块,柱面组0,柱面组1,…柱面组n。即分区=自举块+超级块+柱面组(若干)
  4. 每个柱面组又包括了这些内容:超级块副本,配置信息,i节点图(记录哪些i节点可用),块位图(记录哪些块是否可用),i节点(许多),数据块(也叫逻辑块)

链接计数

每个inode中都存有一个链接计数,其值是指向该i节点的目录项数。
只有当链接技术减少到0时,才可删除该文件(释放该文件占有的数据块)
能够增加链接数的链接为硬链接。
软链接也叫符号链接,它的inode的文件类型是S_IFLNK。它只是存储了另一个文件的路径和名称而已。
任何一个叶目录(不包含任何其他目录的目录)的链接计数总是2,数值2来自于命名该目录的目录项以及在该目录中的.项。
父目录中的每一个子目录都会使该父目录的链接计数增1。

软链接和硬链接

硬链接:
只能对已存在的文件进行创建
不能交叉文件系统进行硬链接的创建
不能对目录进行创建,只可对文件创建;
删除一个硬链接文件并不影响其他有相同 inode 号的文件。
硬连接使得该文件存在另外一个别名,也就是另外一个入口。

软链接:
就是符号链接,创建了一个新的目录项,一个新的inode,只不过数据区里放的是被引用的文件路径和名称。

点击↓”阅读全文”

目录

如果我们建立了一个目录,那么系统会分配给该目录一个inode和至少一个块。这个inode就记录该目录的相关属性,并将其中的指针指向分配的那个数据块。而所分配的块内则记录了这个目录下的相关文件(和子目录)的关联性,更通俗的说,目录块中存储了一个包括三列的表,三列分别为:inode,文件名或目录名,指向数据块的指针。

一个目录其实也是一个文件,只不过它其中不存储用户数据,而是存储目录下的文件和子目录列表。
如果在Linux中新建一个普通文件,则系统会为该文件分配至少一个inode与相对于该文件大小的块数量。例如,假设一个块为4KB,要建一个100KB的文件,则Linux将分配一个inode与25个块来存储该文件。
inode本身并不记录文件名,而是记录文件的相关的属性,文件名则记录在目录所属的块区域。正因为这个原因,使得如果Linux读取一个文件的内容,就要先由根目录/获取该文件的上层目录所在的inode,再由该目录所记录的的文件关联性获取该文件的inode,最后通过inode内提供的块指针来获取最终的文件内容。

柱面详细

超级块(superblock)
存储文件系统的大小、空的和填满的块,以及它们各自的总数和其他诸如此类的信息。要使用一个分区来进行数据访问,那么第一个要访问的就是超级块。所以,如果超级块坏了,那磁盘也就基本没救了。
i节点
由于Linux操作系统是一个多用户、多任务的环境,为了保护每个用户所拥有数据的隐密性,就将每个文件分成了两个部分来存储:一个是文件的属性,另一个则是文件的内容。i节点(i-node)就是用来存储文件的属性的;而数据块(逻辑块)是用来存储文件的内容的。如果要格式化一个分区,就要指定inode的大小和块的大小才行。

也叫逻辑块,数据块,它是数据存储的最小单位。
而inode除了包含文件的属性之外,还包括一个指针,这个指针就指向文件内容放置的数据块的位置,好让操作系统可以方便的去读取文件内容。
inode中包括的文件属性信息:
文件的拥有者和所属用户组;
文件的访问权限设定;
文件的类型;
文件的访问、修改等时间
文件的大小;
文件的各种标志,如SUID和SGID等;
指向文件内容数据块的指针。
一个inode的大小通常为128字节。(ext4中的inode大小扩展到256字节)