【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文件系统的内部结构,详细分析每个组件的职责和工作原理。

相关推荐
司南-70491 小时前
如何下载无损 bilbili视频?
运维·服务器·动画·技术美术
2401_853087881 小时前
国产化DevOps工具链实践:知识库与需求/任务/版本如何打通?
运维·网络·devops
噗噗121 小时前
企业微信 API 实战系列(一):构建基于“动态行为”的自动化公海流转系统
运维·自动化·企业微信
渡我白衣1 小时前
定时器与时间轮思想
linux·开发语言·前端·c++·人工智能·深度学习·神经网络
zt1985q1 小时前
本地部署开源数据库管理工具 DBeaver 并实现外部访问( Windows 版本)
运维·服务器·网络·数据库·网络协议
Marry Andy1 小时前
Atlas 800T A2部署qwen3-32b
linux·人工智能·语言模型·自然语言处理
珂玥c1 小时前
新增硬盘有脏数据如何处理——ubuntu16.04
linux·数据库·ide
wpeng56411 小时前
LINUX-FSTAB参数/SSD挂载
linux·运维·服务器
NAVI.electroNic1 小时前
纯 IPv6 Debian 12 小主机初始化:国内源 + WARP Proxy + Node.js 开发环境
服务器·网络