【Linux】从磁盘到文件系统——块、分区与inode

目录

[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等就是分区。

  • 分区的最小单位是柱面 (传统),现代分区工具(如fdiskgdisk)使用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/partitionslsblk 可查看分区信息。

6. 小结

本文引入了块、分区和inode三个核心概念。文件系统通过将分区划分为块组,并在每个块组内部分配inode和数据块,实现了对文件的高效管理。下一篇我们将深入ext2文件系统的内部结构,详细分析每个组件的职责和工作原理。

相关推荐
wdfk_prog2 小时前
嵌入式面试真题第 10 题:高优化等级下共享状态可见性、内存模型与系统级同步设计
java·linux·开发语言·面试·职场和发展·架构·c
x-cmd3 小时前
Mac 涨价后,本地 AI 还能千元入门吗?
linux·人工智能·macos·ai·agent·amd·本地ai入门
Sirius Wu4 小时前
OpenClaw Skill:Matplotlib 可视化技能 + 沙箱双层隔离完整详解
服务器·网络·人工智能·安全·ai·架构·aigc
J-Tony115 小时前
【Redis】 Redis 是单线程还是多线程
服务器·数据库·mysql
AOwhisky6 小时前
下一代容器来了?Docker 宣布原生支持 WebAssembly
java·运维·docker·容器·rust·wasm
YYYing.9 小时前
【C++大型项目之高性能服务器框架 (七) 】Socket与ByteArray模块
服务器·c++·后端·框架·高性能·c/c++
摇滚侠10 小时前
Linux 零基础教程 09、11、77
linux·运维·服务器
Lottie202610 小时前
电商自动化提质增效:API接口落地的核心价值与实战用法
运维·自动化
Hardworking66611 小时前
第6章 数据工程
运维·服务器·数据库·数据工程
jieyucx12 小时前
Docker 入门第六阶段:综合实战项目
运维·docker·容器