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

相关推荐
ltl2 小时前
大多数「无锁」代码其实不是无锁的
linux
ltl2 小时前
Linux 内核的内存屏障:一个让我调了三天的 bug
linux
Dontla3 小时前
预置known_hosts如何防止中间人攻击(MITM)?(服务器公钥、服务器私钥)Runner、DNS污染、BGP劫持、同网络ARP欺骗、SSH握手
服务器·网络·ssh
Lonely 净土4 小时前
Rocky Linux 安装教程
linux·运维·服务器
光影少年4 小时前
RN的Fabric 渲染流程
运维·前端·javascript·react native·react.js·fabric
A 糖醋排骨5 小时前
grafana loki alloy轻量级日志采集
运维·grafana·loki
林间码客8 小时前
从DevOps到DevSecOps:构建现代软件交付的基石与护城河
大数据·运维·devsecops·devops
李白你好8 小时前
Windows 离线 Linux 提权辅助查询工具
linux
Lust Dusk9 小时前
记一次Linux应急响应题目解析
linux·运维·服务器·网络·安全·网络安全
ShineWinsu9 小时前
对于Linux:五种IO模型以及非阻塞IO的详细解析
linux·c++·面试·io·阻塞·非阻塞·fcntl