实验概述¶
温(守)馨(住)提(红)示(线)
本课程实验已引入代码自动查重系统,请同学们保持学术诚信!
课程复习和预习要求
本节实验与理论课的 “文件与文件系统” 和 “I/O与存储” 这两章课程内容相关,请同学们复习这两章课程内容。
关于第三次实验课考核
我们将在第六次实验课进行第三次实验现场验收:
-
验收内容 :Lab4 页表,Lab5 基于FUSE的青春版EXT2文件系统。
-
验收目的 :考察同学们是否是自己完成的实验代码,而不是“复制拷贝”。
-
验收形式 :助教与同学们进行一对一问答(📢 注:Lab5验收时需要现场改代码 )。
- duck不必担心,只是修改几行代码:)
- 如果实验代码是你自己写的,那这将是你的现场秀!
请同学们认真对待!
1. 实验目的¶
以Linux系统中的 EXT2 文件系统为例,熟悉该文件系统内部数据结构的组织方式和基本处理流程,并基于 FUSE 设计并实现一个可以 真正在Linux上跑 的文件系统。
2. 实验学时¶
本实验为8学时。
3. 实验内容¶
3.1 必做部分¶
3.1.1 熟悉DDRIVER驱动 (参考实验原理-DDRIVER虚拟磁盘驱动)¶
本实验要求通过 ddriver(disk driver) 驱动来访问ddriver设备,从而简化磁盘访问操作。此后,我们便可以利用ddriver驱动来编写自己的文件系统。“ 工欲善其事,必先利其器 ”,在实验过程中, 请务必保证你已经理解tests/test_ddriver.c目录下给出的案例 。
3.1.2 基于FUSE实现青春版EXT2文件系统(参考实验原理-FUSE介绍与Ext2文件系统原理简介)¶
系统结构参考EXT2文件系统,要求具有SUPER_BLOCK
、DATA_MAP
、INODE_MAP
等主要结构。本实验基于FUSE架构,要求将自己设计的文件系统接入FUSE,使得我们能够在Linux系统中直接访问我们自己的文件系统,是不是很酷炫呢?言归正传,本次实验仅要求完成如下几个功能:
- 挂载文件系统;
- 卸载文件系统;
- 创建文件/文件夹(数据块可预分配);
- 查看文件夹下的文件(读取文件夹内容);
上述功能对应的命令为:
mount
umount
touch/mkdir
ls
以上未提及的功能(如复制、删除、读写文件等) 不要求实现 。 具体要求参见实验要求 。
3.2 选做部分¶
本选做部分仅为学有余力的大佬秀操作提供方向。为防止内卷,实现本部分不会带 来额外加分(但或许会有其他意想不到的惊喜),秀翻车了也不会扣分。
-
EXPERT:完善文件系统基本操作
- 按需分配 文件数据块
- 间接索引和二级间接索引
- 删除操作(
rm
命令,需要支持rm -r
) - 文件移动(
mv
命令) - 读写文件(支持vim、vscode直接修改文件)
- 软硬连接(
ln
命令)
-
SUPERME:丝滑的文件读写体验
- 实现缓存结构(参考 实验原理-磁盘缓存简介 )
-
EPIC:超强的鲁棒性
- 启动时检查系统一致性(孤儿节点、空闲节点与位图是否一致、更多一致性检测)
- 坏块识别与处理(动态识别坏块,并避免使用)
- 日志(参考 实验原理-日志文件系统简介 )
4. 运行实例¶
本小节给出了sfs(simplefs)文件系统的运行示例。你需要参照这个示例调试运行你自己编写的“newfs”(你自己的项目名称)文件系统,调试运行参考实验步骤的项目编译。当自测完成后,你还需要通过./tests/test.sh脚本的基础功能测试,显示“恭喜你,通过所有测试”,即可完成本次实验。
bilibili上观看:https://www.bilibili.com/video/BV1KB4y1z7f2/?spm_id_from=333.999.0.0
为了给同学们演示如何下载、编译、运行simplefs文件系统,我们录制了两个演示视频:“HITSZ FUSE文件系统实验(本地版)”和“HITSZ FUSE文件系统(远程计算节点版)”。
如果视频不太清晰,建议到bilibili上观看。
FUSE文件系统实验(本地版):https://www.bilibili.com/video/BV1Af4y1K7FX/
HITSZ FUSE文件系统(远程计算节点版):https://www.bilibili.com/video/BV1TR4y1b7M3/