Linux文件系统存储结构-inode

文章目录

    • 前言
    • 一、文件存储单位
    • 二、inode
      • 1、为什么需要inode
      • 2、inode保存了什么信息
      • 3、inode区和block区
      • 4、inode编号
    • 三、硬链接和软链接

前言

为了更深入了解GFS架构,对linux文件系统进行分析学习。

一、文件存储单位

文件存储在计算机硬盘上,硬盘上最小的存储单位是扇区(Sector),大小为512Byte。操作系统从硬盘读取数据时,以块(block)为单位读取,一个块一般为4KB,即一次性连续读取8个扇区。
注:块在内存中叫做分页(page),4KB。

二、inode

1、为什么需要inode

文件内容以块为单位存储在硬盘上,如果用户想要读取某个文件,需要知道该文件被分成了多少块以及每一块的存储位置。用户不可能每次读取一个文件都要记录这些琐碎的信息,所以需要有一个保存这些信息的节点,用户只需要提供文件名,就可以帮助用户找到文件的内容,这就是inode,也叫做索引节点。除block的信息外,inode还存储了文件的创建者、修改时间、大小等等元信息。

2、inode保存了什么信息

inode保存的是一个结构体,结构体内容如下图所示。
从网上找了一张图片可以看到一个名为mypwd.c的文件的inode保存的内容
注:stat命令用于显示文件的状态信息,输出信息比ls命令输出详细些。
Linux文件系统存储结构-inode_第1张图片

File:文件名 ,Size:文件大小 ,Blocks:文件使用的数据块总数,IO Block:IO块大小(4KB),regular file:文件类型(常规文件),Device:设备编号,Inode:inode编号,Links:链接数,有多少文件名指向这个inode,Access:文件的读写执行权限,Uid:文件所有者的User ID,Gid:文件的Group ID,Access time:文件上一次打开的时间,Modify time:文件内容上一次修改的时间,Change time:inode内容上一次修改的时间,即对文件属性(元信息)修改的时间,Birth time:文件创建时间,crtime,此属性linux已废弃,目前状态显示结果均为-。
inode编号:inode区是以数组的形式存储的,数组下标就是inode编号,对应元素就是该inode的结构体(内容如上图所示)。

3、inode区和block区

硬盘格式化时,操作系统将硬盘分为两个区域。一个是数据区(block区),存放的是文件数据;一个是inode区(inode table),存放的是inode所包含的信息。上文说过,inode区是一个数组,下标为inode编码,元素为对应的inode结构体,inode的结构体中有一个指针,指向存放的文件内容。
Linux文件系统存储结构-inode_第2张图片

既然在inode区每一个inode节点是一个固定格式的结构体,那其大小固定,在操作系统将硬盘分区时,inode区的大小确定,则每块硬盘的inode总数就是固定的。
可以通过df -i指令查看每个硬盘分区的inode总数和已经使用的数量。
Linux文件系统存储结构-inode_第3张图片

4、inode编号

系统在查找一个文件时,步骤如下:
(1)通过文件名找到文件的inode编号
(2)通过inode编号找到文件inode信息
(3)通过inode信息中的block指针找到文件内容
通过ls -i指令查看文件的inode编号
Linux文件系统存储结构-inode_第4张图片

三、硬链接和软链接

1、硬链接
一般文件名和inode编号是一一对应的,但是Unix/Linux系统允许多个文件名指向同一个inode编号,即不同的文件名可以访问同样的内容,不同文件名对文件内容的修改,也会影响其他文件名的访问内容,但是删除一个文件名不会影响其他文件名的访问。(类似于多个指针指向同一个对象)。这种情况就是“硬链接”(hard link). 可以使用ln指令添加硬链接。
在这里插入图片描述
在这里插入图片描述

通过硬链接创建出来的文件的inode编号是一样的,

注:
(1)硬链接相当于一个副本,不会占用实际空间
(2)删除一个硬链接,不会影响其他的inode
(3)不允许给目录创建硬链接。
(4)硬链接只有在同一个文件系统中才能创建。
2、软链接
文件AB的inode号码不同,但文件A的内容是文件B的路径,读取文件A时,系统会自动将访问者导向文件B,无论打开AB哪一个文件最终读取的都是文件B。(类似A为B的双重指针)。这时文件A就是文件B的“软链接”(soft link)或者“符号链接”(symbolic link)。
文件A依赖文件B存在,如果文件B被删除,打开文件A会报错:“No such file or directory”。这是软链接和硬链接的最大不同:文件A指向的是B的文件名,而不是B的inode号码,文件B的inode"链接数"不会因软链接发生变化。ln -s命令可以创建软链接。

Linux文件系统存储结构-inode_第5张图片
在这里插入图片描述
Linux文件系统存储结构-inode_第6张图片

参考资料

你可能感兴趣的:(linux)