实验概述

温(守)馨(住)提(红)示(线)

本课程实验已引入代码自动查重系统,请同学们保持学术诚信

课程复习和预习要求

本节实验与理论课的 “文件与文件系统”“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_BLOCKDATA_MAPINODE_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/