# extFS **Repository Path**: vieyahn/ext-fs ## Basic Information - **Project Name**: extFS - **Description**: ext2文件系统实现,杭电操作系统实验 - **Primary Language**: C - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2021-11-21 - **Last Updated**: 2021-11-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # extFS #### Description ext2文件系统实现,杭电操作系统实验 ### 设计说明 1 参考linux文件系统ext2设计实现, 见书6.7.5 2 主要数据结构: superblock(超级块), inode(索引节点), catalog(文件项), block_bitmap(块位图), inode_bitmap(索引节点位图) 3 Ext2磁盘布局见书P304, 与之不完全相同, 实际布局如下: 磁盘起始地址 -> | superblock | block_bitmap | inode_bitmap | inode area | block area | / \ / \ | block group | block group | block group | ... | block group | first block in block group store free stack info 4 块大小1KB, 块数1048576, 磁盘容量为1GB, 索引节点大小128B, 索引节点数8192, 可根据需要调整 4 空闲块采用成组链接法来分配和回收 5 采用三级混合索引, 支持单个最大文件大小约为16GB 6 catalog 大小设计为32字节, 减去4字节的inode地址, 可用于存储文件名的大小为28字节, 可扩大至64字节, 能支持更长的文件名 ### 可用命令 1 ls 打印当前目录下文件项 2 cd 切换目录 cd _dirname_ 3 mkdir 创建目录 mkdir _dirname_ 4 rmdir 删除目录 rmdir _dirname_ 5 diskinfo 打印磁盘信息 6 touch 创建一个空白文件 touch _filename_ 7 write 对一个文件覆盖写 write _filename_ 8 cat 将文件内容打印 cat _filename_ 9 rm 删除文件 rm _filename_ 10 cls 清屏 11 pwd 打印当前目录 12 bigfile 大文件测试, 生成一个500M文件, 足够测试三级混合索引的分配和回收,系统实际最大支持16G, 但当前磁盘容量设定为1G 13 chmod 更改文件访问权限 chmod 777 _filename_ 14 format 格式化磁盘 15 exit 退出文件系统 ### 存在问题 1 退出文件系统必须使用exit命令, 直接退出, 会导致此次运行的操作和内容丢失 2 前后写了四天, 代码有点混乱, 之前写的部分没考虑三级混合索引, 只使用了10个直接块 3 绝对路径和多级路径未实现, 只能操作当前目录 4 还有很多小问题, 发现了再慢慢改, 从头检查一遍代码太累了。