Linux 文件系统的数据结构335
Linux 文件系统是一个由内核管理的层次结构数据存储系统。它使用多种数据结构来组织和管理存储在磁盘或其他块存储设备上的文件和目录。这些数据结构的基础是 inode,它记录了每个文件或目录的元数据,包括其大小、时间戳和所有权。
Inode
Inode 是 Linux 文件系统中最重要的数据结构。它是一个包含有关文件或目录元数据的固定长度记录。inodes 存储在 inode 表中,该表是一个包含所有系统 inodes 的数组。每个 inode 由一个唯一的 inode 编号标识,该编号由内核分配给文件系统中的每个文件或目录。
inode 包含以下信息:* 文件类型(文件、目录、符号链接等)
* 文件大小
* 创建时间、修改时间和访问时间
* 文件所有者和组
* 文件权限
* 指向数据块的指针
数据块
数据块是文件系统中存储文件实际内容的固定大小的块。每个数据块由一个块号标识,该块号由内核分配。inodes 中的指针指向与文件关联的数据块。
数据块的大小通常为 4KB 或 8KB。较大的块大小可以提高顺序 I/O 操作的性能,但会增加查找文件特定部分的开销。
文件系统超级块
文件系统超级块是一个包含有关文件系统本身的信息的特殊块。它存储以下信息:* 文件系统类型
* 块大小
* inode 大小
* inode 表位置
* 数据块位置
目录项
目录项是文件系统中用于表示目录中文件和目录的记录。每个目录项包含以下信息:* 文件或目录名称
* 与文件或目录关联的 inode 编号
目录项存储在目录块中,目录块是存储特定目录中所有文件和目录信息的专用数据块。
磁盘分配表
磁盘分配表 (FAT) 是一个简单的数据结构,用于跟踪哪些数据块已被文件系统分配。FAT 中的每个条目表示一个数据块,并且条目中的值指示该数据块分配给哪个 inode。
EXT4 日志
EXT4 文件系统使用一个日志来记录事务并确保在系统故障的情况下文件系统的一致性。日志是一个循环缓冲区,存储有关创建、删除和修改文件和目录的事务的条目。
当事务提交时,它会记录在日志中。如果在事务完成之前发生系统故障,则内核可以从日志中重新播放事务以恢复文件系统的完整性。
其他数据结构
Linux 文件系统还使用许多其他数据结构来支持其操作,包括:* 间接块:当文件包含太多数据块时使用,以存储指向数据块的指针。
* 双重间接块:当文件包含太多间接块时使用,以存储指向间接块的指针。
* 三重点块:当文件包含太多双重间接块时使用,以存储指向双重间接块的指针。
* 扩展属性:用于存储与文件或目录关联的附加元数据。
* 元数据块组:文件系统中的区域,用于存储 inode 表、超级块和其他元数据。
2024-11-15