1. 从物理磁盘到文件系统的抽象层
当我们谈论"所有文件在磁盘上都是字节序列"时,首先需要理解计算机如何将物理存储介质转化为我们可以操作的文件抽象。现代硬盘驱动器(HDD)或固态硬盘(SSD)的物理结构决定了数据存储的基本方式。
硬盘最基本的存储单元是扇区(Sector),传统机械硬盘每个扇区固定为512字节,而现代高级格式硬盘通常使用4KB大小的扇区。操作系统不会直接以扇区为单位进行读写,而是将多个连续扇区组合成逻辑块(Block),这是文件系统操作的最小单位。典型的块大小为4KB(由8个512字节扇区组成)或与页面大小对齐的更大值。
提示:在Linux系统中可以使用
blockdev --getbsz /dev/sdX命令查看块设备块大小,而fdisk -l则显示物理扇区大小。
文件系统在这套物理存储机制上建立了关键抽象层:
- inode:存储文件元数据的结构(权限、大小、时间戳等)
- 目录项:将人类可读的文件名映射到inode编号
- 数据块:实际存储文件内容的块集合
这种抽象使得:
- 用户通过文件名而非物理地址访问文件
- 文件可以动态增长而不需要连续存储空间
- 支持硬链接等高级功能
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. inode:文件系统的核心元数据结构
每个文件对应一个inode(索引节点),它是理解"文件即字节序列"的关键。inode本质上是一个固定大小的数据结构(通常128或256字节),包含以下核心信息:
c复制struct inode {
mode_t i_mode; // 文件类型和权限
uid_t i_uid; // 所有者ID
gid_t i_gid; // 组ID
off_t i_size; // 文件字节数
time_t i_atime; // 最后访问时间
time_t i_mtime; // 最后修改时间
time_t i_ctime; // inode变更时间
blkcnt_t i_blocks; // 占用块数
