KcheFS 是一个用 Go 实现的简易文件系统项目,目标是帮助理解文件系统的基本原理与实现方法。项目模块化设计,便于逐步扩展功能。
kchefs/
├── cmd/ // 可执行程序入口
│ └── kchefs.go
├── fs/ // 文件系统核心逻辑
│ ├── fs.go // 文件系统主结构体与操作接口
│ ├── inode.go // inode、目录项等基础结构与方法
│ ├── file.go // 文件操作与内容管理
│ ├── dir.go // 目录操作
│ └── errors.go // 错误定义与处理
├── storage/ // 存储(如内存、磁盘)实现
│ ├── memory.go // 内存存储实现
│ └── persist.go // 持久化存储实现(可选)
├── utils/ // 通用工具函数
│ └── helper.go
├── tests/ // 测试用例
│ ├── fs_test.go
│ └── ...
├── go.mod
└── README.md
-
基础数据结构
- 设计文件/目录的结构体(如 File、Directory、Inode)
- 设计元数据结构(文件名、大小、权限、时间戳等)
-
虚拟磁盘或存储管理
- 内存模拟磁盘块(block)分配与释放
- 简单的读写接口(如 ReadBlock、WriteBlock)
-
文件/目录的创建与删除
- 实现 CreateFile、DeleteFile、CreateDir、DeleteDir
- 支持嵌套目录结构
-
文件读写
- 实现 Open、Close、Read、Write 等接口
- 维护文件指针(offset)
-
目录遍历与查找
- 实现 ListDir(列出目录下所有文件/子目录)
- 支持按名称查找文件/目录
-
简单权限管理
- 为文件和目录添加基础读写权限控制
-
基础错误处理
- 对非法操作返回合适的错误信息(如文件不存在、权限不足等)
-
持久化(进阶)
- 将内存中的文件系统结构保存到本地文件,实现重启后数据不丢失
- 设计数据结构,支持内存中的文件树结构
- 实现文件和目录的增删查
- 支持文件内容的简单读写
- 实现目录遍历和查找
- 增加权限管理和基础错误处理
- 完善磁盘块管理和优化存储
- 实现持久化(可选/进阶)
- 更丰富的权限和属性
- 支持符号链接或硬链接
- 文件系统挂载点,或用 FUSE 让操作系统识别
- 并发读写和锁机制
- 块管理与空间优化
每完成一个小功能都建议编写简单的测试(如 main 函数或单元测试)保障正确性,逐步掌握文件系统整体架构,随时迭代优化。
欢迎 issue、PR 和建议!