当前位置:首页 > 技术 > 正文内容

EXT2文件系统结构与磁盘管理详解

访客 技术 2026年6月2日 1

EXT2文件系统核心机制

EXT2(Second Extended File System)是Linux系统中广泛采用的传统文件系统,其设计源自Minix文件系统并进行了功能扩展。该文件系统以高效的数据存取性能著称,通过索引节点(inode)实现对文件的唯一标识与管理。

磁盘物理结构与分区原理

硬盘由多个物理组件构成:旋转的磁盘盘片、机械臂及其上的读写头、以及驱动盘片高速旋转的主轴马达。数据以最小单位"扇区"(Sector)存储,每个扇区固定为512字节。多个扇区组成一个磁柱(Cylinder),磁柱是逻辑分区的基本单位。

磁盘的第一个扇区至关重要,包含:

  • 主引导记录(MBR):占用446字节,负责系统启动加载
  • 分区表(Partition Table):占64字节,记录各分区信息

在Linux中,不同接口的磁盘设备命名规则如下:

  • /dev/sd[a-p][1-15]:适用于SCSI、SATA、U盘等新型接口设备
  • /dev/hd[a-d][1-63]:传统IDE接口设备的命名方式

虚拟磁盘创建与文件系统初始化

可通过以下命令在指定设备上创建EXT2文件系统:

mke2fs [-b blksize -N inodes] device blocks

其中:

  • blksize:指定块大小,默认为1KB
  • inodes:指定索引节点数量,若未指定则根据块数自动计算
  • device:可为真实磁盘或虚拟文件

示例:创建一个1440个1KB块的虚拟软盘文件系统:

dd if=/dev/zero of=vdisk bs=1024 count=1440
mke2fs vdisk 1440

块组与块组描述符

EXT2将磁盘划分为若干"块组"(Block Group),每组通常包含8192个数据块(约32KB)。每个块组由一个块组描述符结构体进行管理,关键字段包括:

  • bg_block_bitmap:指向该组的块位图
  • bg_inode_bitmap:指向索引节点位图
  • bg_inode_table:指向索引节点表起始位置

对于小容量虚拟磁盘(如1440块),仅需一个块组,其余描述符字段置零;大容量磁盘则可能跨多个块存放描述符。

索引节点(Inode)结构与布局

每个文件对应一个128字节(EXT4为256字节)的索引节点,用于存储文件元信息。其核心字段为block[15]数组,支持多级间接寻址:

  • 直接块block[0]block[11] 直接指向数据块
  • 一次间接块block[12] 指向一个包含256个块号的中间块
  • 二次间接块block[13] 指向一个块表,每个条目再指向256个块
  • 三次间接块block[14] 支持更深层嵌套,适用于大型文件系统

索引节点按固定大小排列,确保每块可容纳整数个节点。例如,在默认配置下,共184个索引节点,分布在23个索引节点块中(从B10至B32)。索引节点编号从1开始,0表示无有效节点。根目录的inode编号为2,且所有数据块编号也从1起始,块0保留未使用。

数据块与目录项组织

在索引节点块之后是实际数据存储区域。以184个inode为例,首个可用数据块为B33,即根目录的首个数据块。

目录项由ext2_dir_entry_2结构体表示:

struct ext2_dir_entry_2 {
    u32 inode;           // 索引节点编号(从1开始)
    u16 rec_len;         // 本条目的长度(字节)
    u8 name_len;         // 文件名长度(字节)
    u8 file_type;        // 文件类型(保留)
    char name[EXT2_NAME_LEN]; // 名称(1–255字符,无结尾空字符)
}

该结构为可变长度格式,名称不以空字符结尾,因此每条目长度由rec_len动态决定。

标签: EXT2inode

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。