在C语言中编写EXT4文件系统?

5
这可能听起来有点新手(尤其是你可能已经猜到了)我正在尝试编写操作系统。目前,我卡在尝试制作文件系统上。
我想要的是类似于Linux Ubuntu的文件系统,即EXT4(至少是我的)。我想尝试使用C语言编写它。
你有什么想法可以帮助我实现这个目标吗?或者你找到的任何教程都可以帮助我(我已经尝试过搜索,但没有结果):L
提前感谢!
杰米。

1
你可能想考虑尝试实现一种较旧的文件系统。ext4提供了很多耐久性保证,而你可能不需要从它开始。尝试研究一下具有相同基本思想的ext2。 - Michael
@Michael - 有没有一些用于生成/实现ext2文件系统的源代码?如果有,我在哪里可以找到它? - user1114683
1
@JamieEdwards:mkfs.ext2的源代码以及Linux内核源代码都是公开可用的。 - Dietrich Epp
2
你已经制作了一个带有物理和虚拟内存(以及缓存)管理器的引导内核吗?如果是这样,那真的很令人印象深刻。:) 如果没有,那么你可能只想担心创建一个“原始”的内核,没有任何磁盘/文件系统,只有纯代码(第一个扇区将是引导扇区,其余部分将是内核)...在你建立好系统之后,然后再考虑实现文件系统。 - user541686
2个回答

4
非常聪明且经验丰富的人已经广泛研究了这个问题,他们制造出的漏洞会吃掉用户的数据。在计算层(例如内核崩溃)中出现的漏洞和存储层中出现的漏洞之间的区别在于默默吃掉用户的数据是非常糟糕的 - 远比电子表格中给出错误答案(Excel有缺陷但很受欢迎)或偶尔因保留磁盘上的数据而发生段错误(这可以通过频繁自动保存轻松缓解)更糟糕。

从学习简单的设计开始,比如旧操作系统书中的minix文件系统[1](二十年前Linus Torvalds开始使用的那本书)。

正如其他人所说,没有日志、范围或ACL的ext2比ext4更适合作为起点。它的源代码在Linux内核中和e2fsprogs用户空间工具包[2]中。格式已被很好地记录。

至于教程,请考虑谁制作了它们以及为什么他们花费精力进行此任务。教程通常由平台利益相关者制作,旨在吸引新人使用该平台进行开发,利用网络效应来扩大平台并从已经建立的更大生态系统中获利。

你能否看到在增加实现自己不兼容的有缺陷文件系统的人数中存在商业模式?只有在你销售软件工程学位的情况下。因此,微软只编写有关如何使用NTFS的教程,而不是有关如何实现它的教程。Sun和ZFS、Red Hat和Google与EXT2/3/4、SGI与XFS、IBM与JFS、Oracle与BTRFS等都是如此。
如果你想要的是教育而不是培训,那么你需要阅读书籍并研究聪明人在生产中使用的代码,而不是寻找教程。
  1. http://en.wikipedia.org/wiki/Operating_Systems:_Design_and_Implementation(操作系统:设计与实现)
  2. http://e2fsprogs.sourceforge.net/(e2fsprogs:用于ext2/ext3/ext4文件系统的扩展文件系统工具集)
  3. 在多少不同的使用模式中使用了多少次?考虑在数百万台计算机上使用多年后发现的生产文件系统中的错误。即使你像Matthew Dillon一样聪明,你的代码也不太可能比这些文件系统更少出错。

1
信不信由你,有时候人们写教程只是因为他们想帮助那些曾经和他们一样的人...例如,可以看看这里:http://www.osdever.net/tutorials/view/brans-kernel-development-tutorial - user541686
1
是的,像我这样的人在SO上回答问题只是因为他们喜欢帮助别人。但你能期望某人为帮助陌生人付出多少努力呢?有时我看到一些问题可以总结为“教我如何构建Facebook/Android等”,而提问者似乎没有进行最基本的研究来了解所需工作量。阅读维基百科上关于文件系统的文章并不过分。 - Z.T.

0

尝试查看现有的实现,比如Linux中的实现。


1
那个链接无法加载。这里有一个可能的替代链接:https://www.kernel.org/doc/Documentation/filesystems/ext4.txt - user559633
1
网站一段时间前崩溃了,谢谢您的注意! - Michael Foukarakis
没问题 - 群组网站和所有的东西。感谢编辑答案。 - user559633

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接