学习笔记5
知识点归纳
第11章 EX2文件系统数据结构
Linux一直将EXT2作为默认文件系统。EXT3是EXT2的扩展。EXT3中增加的主要内容是一个日志文件,他将文件系统的变更记录在日志中。日志可在文件系统崩溃时更快地从错误中恢复。没有错误的EXT3文件系统与EXT2文件系统相同。EXT3的最新扩展时EXT4。EXT4的主要变化是磁盘块的分配。在EXT4中,块编号为48位。EXT4是分配连续的磁盘块,称为区段。本书的目的是论述文件系统设计和实现的原则,强调简单性以及与Linux的兼容性。我们选择EXT2文件系统。用户命令:用户可以使用Unix/Linux命令来执行文件操作。
- 在linux下,通过mkfs创建虚拟磁盘,输入命令:
- mke2fs [-b blksize -N ninodes] device nblocks 可创建一个带有nblocks个块(每个块大小为blksize个字节)和ninodes个索引节点的EXT2文件系统
- 虚拟磁盘布局:
- Block#0:引导块文件系统不会使用它,用来容纳一个引导程序,从磁盘引导操作系统
- Block#1:超级块,用于容纳整个文件系统的信息。
在linux下,通过mkfs创建虚拟磁盘,输入命令:mke2fs [-b blksize -N ninodes] device nblocks
可创建一个带有nblocks个块(每个块大小为blksize个字节)和ninodes个索引节点的EXT2文件系统
- EXT2文件系统
Linux使用的默认文件系统就是ext2。ext2文件系统总共有1440个块,每个块大小1KB。
Block#1:超级块,用于容纳整个文件系统的信息
下面是一些重要字段
块和索引节点位图
BLOCK#8:块位图(Bmap)
BLOCK#9:索引节点位图(Lmap)
部分重要字段:
struct ext2_super_block { u32 s_inodes_count; // Inodes count u32 s_blocks_count; // Blocks count u32 s_r_blocks_count; // Reserved blocks count u32 s_free_blocks_count; // Free blocks count u32 s_free_inodes_count; // Free inodes count u32 s_first_data_block; // First Data Block u32 s_log_block_size; // Block size u32 s_log_cluster_size; // Allocation cluster size u32 s_blocks_per_group; // # Blocks per group u32 s_clusters_per_group; // # Fragments per group u32 s_inodes_per_group; // # Inodes per group u32 s_mtime; // Mount time u32 s_wtime; // Write time u32 s_mnt_count; // Mount count u16 s_max_mnt_count; // Maximal mount count u16 s_magic; // Magic signature // more non-essential fields u16 s_inode_size; // size of inode structure };
Block#2块组描述符块(EXT2将磁盘块分成几个组。每个组有8192个块(硬盘上的大小为32K)。每组用一个块组描述符结构体描述):
struct ext2_ group_ desc ( u32 bg_ block_ bi tmap; // Bmap block number u32 bg inode_ bi tmap; //Imap b1ock number u32 bg inode_ table; // Indes begin block number u16 bg_ free_ blocks_ count ; // THESE are OBVIOUS u16 bg_ free_ inodes_ count ; u16 bg_ used_ dirs_ count; u16 bg_ pad; //ignore these u32 bg_ reserved[3] ; };
苏格拉底挑战
问题与解决方案
问题:文件系统的概念和原理可能比较抽象,难以理解。
解决方案:可以通过一些实际的例子或者模拟实验来帮助理解文件系统的基本概念和原理。同时,也可以参考一些相关的教材和资料来加深理解。
问题:不同文件系统之间的差异和特点可能容易混淆。
解决方案:可以通过对比不同文件系统的主要特点来帮助记忆和理解。此外,了解各种文件系统的适用场景和使用限制也能加深理解。
问题:文件系统的设计和实现可能比较复杂,难以掌握。
解决方案:可以参考一些现有的文件系统实现和相关的研究论文,深入了解文件系统的设计和实现细节。同时,也可以通过实践来加深对文件系统设计和实现的理解,比如在虚拟机上实现一个简单的文件系统。
实践过程
让chatgpt给我些实践代码
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异