今天,笔者要设计一个类似ext2
的文件系统CFS (cunix file-system)
,在https://github.com/pengruiyang-cpu/rlib上的cfs.c和cfs.h。
设计
不管啥样的文件系统,他都是由这几个部分组成的:
- 启动区
- 超级块
- 根目录
- 数据区
(NTFS
, FAT
系列文件系统将超级块放到了启动区内)
所以,咱们就一个个的分析,一个个设计吧。
启动区 + 超级块
CFS的启动区就放在超级块的前512个字节里头,里面只放了代码,文件系统的全部信息都存储在超级块4096字节中。他们分别是(参考了Minix FS):
- 启动区(512字节)
- 魔数 (
1328E3B
) - 块数量(一块是4096字节,4KB)
- 块位图的块号码
- 根目录的块号码
- 保留(可能作为loader,3568字节)
需要特别说明的是第二个魔数
,研究过Linux的应该能想到magic
这个单词,Linux中reboot的magic是他的生日,他大女儿的生日和他二女儿三女儿的生日,CFS中这个字段必须位1328E3B
,否则在进行挂载的时候会警告。
这里面的块位图和根目录都只是指他们的块号码,并不