文件系统
- 文件系统是硬盘中的数据结构,是操作系统的一部分
- 文件系统与其说是“数据结构”,不如说它本身也是由一个个文件组成的,每个文件存储着必要的信息。他们构建出一颗类似树的结构,即为文件系统。所以文件系统本身也是文件。文件系统也是“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