目录
知识点归纳
第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给我些实践代码