实验目的
- 掌握文件系统的工作机理
- 理解文件系统的主要数据结构
- 学习较为复杂的Linux下的编程
- 了解EXT2文件系统的结构
准备知识
外存管理
文件系统层次结构如下
目录管理
文件系统接口
命令接口
程序接口
Linux的EXT2文件系统
EXT2文件系统结构
数据地址安排
实验步骤
输入命令
make
编译该文件系统:成功build modules
(该实验是在root用户下实现的,不需要输入sudo
)输入命令
insmod aufs.ko
安装模块使用
dmesg
命令查看模块是否安装成功在使用
dmesg
命令后,输出了相当多的模块信息在输出信息的最后,可以发现语句如下,表示模块已经安装成功.
1
2
3[ 1861.402049] create inode cache success
[ 1861.402056] register filesystem success
[ 1861.402059] aufs module loaded输入命令
mount -o loop -t aufs ./image ./dir
挂载设备使用命令
dmesg
再次打印模块输出,可以查看挂载是否成功.获得了
super block
的相关信息super block
结构是指文件系统在磁盘分区的特殊位置中存储的文件系统参数集,包括:magic
- 索引节点块——
inode blocks
- 块大小——
block size
- 根节点——
root inode
- 块中的索引节点数——
inodes in block
卸载模块前必须先卸载已挂载的文件系统,否则会出现以下错误 :
输入
mount
指令查看已挂载的设备,找到挂载的文件系统及其挂载点为/root/桌面/filesystem/image
和/root/桌面/filesystem/dir
卸载系统后,卸载模块。在卸载已挂载的设备时,该设备不能有进程在运行。
再输入
dmesg
命令显示已卸载。
核心代码分析
本次实验代码的核心在inode
分配函数
aufs_fill_sb
函数
在为根目录创建dentry
(目录项)之前,应创建根目录的索引节点(索引节点)。索引节点结构可能是文件系统中最重要的一种。每个文件系统对象(文件,文件夹,特殊文件,杂志等)都用inode
标识。
1 | static int aufs_fill_sb(struct super_block *sb, void *data, int silent) |
aufs_inode_fill
函数
负责填充
1 | static void aufs_inode_fill(struct aufs_inode *ai, |