目录
[1. 引言](#1. 引言)
[2. 块(Block)------文件系统的读写单位](#2. 块(Block)——文件系统的读写单位)
[3. 分区(Partition)](#3. 分区(Partition))
[4. inode(索引节点)](#4. inode(索引节点))
[4.1 什么是inode?](#4.1 什么是inode?)
[4.2 查看inode信息](#4.2 查看inode信息)
[4.3 文件系统如何组织inode?](#4.3 文件系统如何组织inode?)
[5. 分区与文件系统的关系](#5. 分区与文件系统的关系)
[6. 小结](#6. 小结)
1. 引言
磁盘裸设备只能按扇区读写,但用户希望按文件(名称、大小、权限等)操作。文件系统正是为了组织和管理磁盘上的数据而设计的。本文将介绍文件系统的三个核心概念:块 、分区 和inode。
2. 块(Block)------文件系统的读写单位
-
磁盘读写最小单位是扇区(512字节),但操作系统一次读写多个连续扇区以提高效率。
-
块 是文件系统读写的最小单位,通常为4KB,即连续8个扇区。
-
块的好处:减少I/O次数,提高数据传输效率;但也可能造成内部碎片。
块的地址计算:
-
已知LBA,块号 = LBA / 8
-
已知块号,该块的第一个扇区LBA = 块号 * 8
文件系统的块大小在格式化时确定,常见的有1KB、2KB、4KB。过大的块会浪费空间(对于小文件),过小的块会增加I/O次数。
3. 分区(Partition)
-
分区是将一块磁盘划分为多个独立的逻辑区域,每个区域可以单独格式化并存放文件系统。
-
Windows中的C、D、E盘,Linux中的
/dev/sda1、/dev/sda2等就是分区。 -
分区的最小单位是柱面 (传统),现代分区工具(如
fdisk、gdisk)使用LBA地址进行分区。
分区的好处:
-
隔离系统与用户数据
-
支持多操作系统
-
方便备份与恢复
-
限制某个分区的空间使用
4. inode(索引节点)
4.1 什么是inode?
-
文件 = 属性(元数据) + 内容。
-
inode 是存储文件属性的数据结构,每个文件对应一个唯一的inode,并有一个inode号。
-
inode中不包含文件名,文件名存储在目录文件中。
-
inode大小通常为128字节或256字节(ext2/ext3/ext4),在格式化时确定。
inode包含的信息(示例ext2_inode结构体):
-
文件类型与权限(
i_mode) -
文件大小(
i_size) -
时间戳(
i_atime,i_mtime,i_ctime) -
硬链接计数(
i_links_count) -
数据块指针数组(
i_block[15]) -
等等
4.2 查看inode信息
bash
stat test.c
ls -li test.c # 显示inode号
4.3 文件系统如何组织inode?
文件系统将分区划分为若干块组(Block Group),每个块组内部包含:
-
超级块(Super Block)
-
块组描述符表(GDT)
-
块位图(Block Bitmap)
-
inode位图(Inode Bitmap)
-
inode表(Inode Table)
-
数据块(Data Blocks)
这些内容将在下一篇详细讲解。
5. 分区与文件系统的关系
-
一个分区可以格式化为某种文件系统(如ext4、xfs、NTFS、FAT32)。
-
格式化过程会创建文件系统元数据(超级块、位图、inode表等)。
-
挂载(mount)将一个分区与一个目录关联,之后该目录下的所有文件都存储在这个分区中。
补充:
/proc/partitions和lsblk可查看分区信息。
6. 小结
本文引入了块、分区和inode三个核心概念。文件系统通过将分区划分为块组,并在每个块组内部分配inode和数据块,实现了对文件的高效管理。下一篇我们将深入ext2文件系统的内部结构,详细分析每个组件的职责和工作原理。