Skip to content

文件系统

  • 文件系统是硬盘中的数据结构,是操作系统的一部分
  • 文件系统与其说是“数据结构”,不如说它本身也是由一个个文件组成的,每个文件存储着必要的信息。他们构建出一颗类似树的结构,即为文件系统。所以文件系统本身也是文件。文件系统也是“linux下一切视为文件”的基础。

初始化

低级初始化(物理初始化)-- 出厂设置

高级初始化(逻辑初始化)-- 操作系统完成

常见的文件系统:

  • windows:NTFS

  • linux:EXT3,EXT4等

  • macOS:APFS

文件系统构成

  • BOOT block,启动块:大小确定,1KB。启动块是由PC标准规定的,用来存储磁盘分区信息和启动信息,任何文件系统都不能使用启动块。位于整个磁盘的首部。
  • Super Block,超级块:描述一个分区的信息,例如块大小、文件系统版本号、上次mount 的时间等等。超级块在每个块组的开头都有一份拷贝。
  • Group Descriptor Table(GDT),块组描述符表:一个分区又分成多个块组,一个块组对应一个描述符,组描述符(Group Descriptor)存储一个块组的描述信息。块组描述符表在每个块 组的开头也都有一份拷贝。
  • Block Bitmap,块位图:同样位于整个分区首部,在描述符表后面。它表示分区中每个块是否空闲可用。
  • inode Table,inode表:一个文件的所有描述信息存储在文件的inode中,通过inode可用直接寻址到文件的存储块的位置。inode表中inode的数量最大值是初始化文件系统的时候就已经计算出来的,默认按照每个文件8KB来预估算出inode数量,即存储的最大文件数量。如果inode用完,意味着分区占满。当存储大文件的时候,分区基本上利用率很高,每个inode都被占满,只有每个文件尾部的最后一个inode的数据块尾部被浪费。存储大量小文件(如源代码,单个文件通常小于8KB)的时候,可能会造成大量的浪费,因为每个inode的数据块尾部均被浪费。
  • inode Bitmap, inode位图:同样位于分区首部,在块位图后面。大小为一个块,其中每个bit表示一个inode是否空闲可用。
  • Data Block, 数据块:存储实际信息的位置。
    • 根据不同的文件类型有以下几种情况。
    • 对于常规文件,文件的数据存储在数据块中,通过inode寻址到,inode一般在相应目录的存储文件中。
    • 对于目录,该目录下的所有文件的inode和目录名存储在数据块中,ls -l命令 看到的其它信息都保存在该文件的inode中。注意这个概念:目录 也是一种文件,是一种特殊类型的文件。
    • 对于符号链接,如果目标路径名较短则直接保存在inode中以便更 快地查找,如果目标路径名较长则分配一个数据块来保存。
    • 设备文件、FIFO和socket等特殊文件没有数据块,设备文件的主 设备号和次设备号保存在inode中。

测试

  • ln -s和ln
  • df和du的区别

数据块寻址

inode的结构:Blocks[]数组的多级寻址块

VFS

linux下不同的文件系统通过VFS的通用数据结构,让我们用起来一模一样。

一些命令

bash
dd if=/dev/zero of=fs count=256 bs=4K

mke2fs fs

dumpe2fs fs

sudo mount -o loop fs /mnt

od -tx1 -Ax fs

debugfs fs

C函数

C