竞赛题目:初级文件系统与 Raid

目标

最终提交的内容应当是源码和一系列二进制文件,其应当被解压到 /usr/local/bin

它应当可以正确的将磁盘格式化:

sudo mkfs.myfs /dev/sda1

当然,也可以允许不格式化真正的磁盘,而是一个虚拟磁盘文件:

dd if=/dev/zero of=/tmp/disk.img bs=1G count=1
sudo mkfs.myfs /tmp/disk.img

然后,可以将文件系统挂载到一个目录:

sudo mount -t myfs /dev/sda1 /mnt

并且允许使用/etc/fstab文件自动挂载:

/dev/sda1 /mnt myfs defaults 0 0

限制

整个项目必须使用 C\C++\Rust\Go\Erlang\C#\Java 语言编写。允许使用第三方库。

必须在用户空间实现,不允许使用内核模块。

必须支持 SATA、NVME、USB、SD 卡等设备。

必须在 Linux 上运行。

实现的文件系统必须支持:

  • 文件的创建、删除、读取、写入
  • 文件的扩增、截断
  • 剩余空间的汇报
  • 文件的权限控制
  • 软件 Raid0,Raid1,Raid5

评分

未达到上述标准的提交将被拒绝。

评分将根据以下标准(并非强制要求):

  • 性能:固态 7读3写
  • 性能:机械 7读3写
  • 事故的恢复能力(是否是Copy On Write)
  • Raid0 的速度增益(是否合理实现了Raid)
  • 是否能够作为系统盘(挂载到 / 并运行完整的Linux)

不知道从何起步?先看看 FUSE 吧!

FUSE 提供了非常容易实现的接口,无论你使用何种编程语言。直接对着它写,很快就会发现你写的文件系统可以用了!

作品提交

任何人都可以参赛和提交作品。

如果你想参赛,今天就可以开始写你的代码了。

你的代码必须被赋予 MIT 协议。必须被提交到 https://git.aiursoft.cn 。必须在 REAMDE.md 里清晰简要的写清如何编译,或提供 Dockerfile 用于编译。

编译后,我们将试图使用它来格式化虚拟磁盘和真实的硬盘,并尝试测试各个功能。

提交的截止日期:2024年6月1日。请在截止日期前提交。提交后,请向 anduin@aiursoft.com 发邮件。

评奖

最终所有功能实现最理想、最具有生产意义的三个作品将获得一二三等奖。

  • 一等奖奖品 铭凡 MS01 全能万兆小主机(裸机)一台
  • 二等奖奖品 戴尔Optiplex 小主机一台
  • 三等奖奖品 欧乐B电动牙刷