# newfs **Repository Path**: designer7458/newfs ## Basic Information - **Project Name**: newfs - **Description**: 2024-操作系统lab5。基于simplefs实现newfs。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2024-12-11 - **Last Updated**: 2025-11-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 基于 FUSE 的青春版 EXT2 文件系统 ## 1. 项目简介 本项目为HITSZ秋季学期操作系统课程的lab5。基于 **FUSE (Filesystem in Userspace)**,实现了一个简化版的 **EXT2 文件系统**(newfs)。该文件系统支持 **文件创建、目录管理、文件读写、挂载与卸载** 等功能,旨在加深对操作系统文件系统原理的理解。 ## 2. 代码结构 ``` |-- .vscode/ # VSCode 配置文件 |-- build/ # 编译输出目录 |-- CMake/ # CMake 构建配置目录 |-- src/ # 源代码目录 |-- newfs.c # 核心文件系统逻辑 |-- newfs.utils.c # 辅助工具函数 |-- include/ # 头文件目录 |-- newfs.h # 主要头文件 |-- types.h # 定义通用数据类型 |-- fs.layout # 文件系统布局配置文件 |-- ddriver_ctl_user.h # 用户空间设备驱动控制头文件 |-- ddriver.h # 设备驱动头文件 |-- tests/ # 测试代码目录 |-- README.md # 说明文档 |-- CMakeLists.txt # CMake 构建文件 |-- SPEC.txt # 项目规格说明文档 ``` ## 3. 功能实现 - **磁盘管理**:采用 **索引节点 + 数据块位图** 方式管理文件系统数据。 - **文件操作**:支持文件的 **创建、删除、读取、写入**。 - **目录管理**:实现 **目录创建、目录项管理、目录读取**。 - **挂载/卸载**:支持 **FUSE 挂载**,并通过 `umount` 释放资源。 ## 4. 遇到的问题及解决方案 ### 4.1 目录项存储不足 - **问题**:最初每个目录 inode 仅分配 **1 个数据块**,导致测试失败。 - **解决方案**:采用 **链表存储目录项**,并支持 **动态分配数据块**。 ### 4.2 递归刷写问题 - **问题**:目录 inode 需要 **递归同步所有子目录项**。 - **解决方案**:实现 **递归遍历所有 inode 并刷写**,确保数据一致性。 ## 5. 参考资料 - FUSE 官方文档: https://libfuse.github.io/ - EXT2 文件系统结构解析 - simplefs 文件系统示例