用C编写EXT4文件系统?

用C编写EXT4文件系统?,c,ext4,C,Ext4,这听起来可能很无聊,尤其是当我(你可能已经猜到)试图编写一个操作系统时。目前,我一直在尝试制作一个文件系统 我想要的是一个类似于Linux Ubuntu的文件系统,它是EXT4(至少我是这样)。我想试着用C写 你知道我该怎么做吗?和/或您可能找到的可能对我有帮助的任何教程(我尝试过搜索,但没有运气):L 提前谢谢 Jamie。尝试查看现有的实现,如中的实现。非常聪明且经验丰富的人广泛研究了这个问题,他们制造了一些bug,吞噬了用户的数据。计算层的bug(例如内核崩溃)和存储层的bug之间的区别在

这听起来可能很无聊,尤其是当我(你可能已经猜到)试图编写一个操作系统时。目前,我一直在尝试制作一个文件系统

我想要的是一个类似于Linux Ubuntu的文件系统,它是EXT4(至少我是这样)。我想试着用C写

你知道我该怎么做吗?和/或您可能找到的可能对我有帮助的任何教程(我尝试过搜索,但没有运气):L

提前谢谢


Jamie。

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

非常聪明且经验丰富的人广泛研究了这个问题,他们制造了一些bug,吞噬了用户的数据。计算层的bug(例如内核崩溃)和存储层的bug之间的区别在于,默默地吃掉用户的数据是非常糟糕的,这比在电子表格中给出错误答案(excel有缺陷但很流行)或在磁盘上保存数据时间歇性地出错要糟糕得多(这很容易通过频繁的自动保存来缓解)

从研究更简单的设计开始,比如老操作系统书[1]中的minix文件系统(二十年前,Linus Torvalds也开始了这本书)

正如其他人所说,没有日志记录、数据块或ACL的ext2是比ext4更好的起点。它的源代码在Linux内核和e2fsprogs用户空间工具包[2]中。该格式有很好的文档记录

<> P>至于教程,考虑他们是谁制造的,为什么他们要在这个任务上花费精力。教程通常是由平台中的利益相关者来开发的,利用这个平台来开发新的人,使用网络效应来成长平台和从一个更大的生态系统中已经建立的参与者获益。 你认为越来越多的人实施他们自己不兼容的buggy[3]是一种商业模式吗文件系统?只有在出售软件工程学位的情况下才可以使用。因此,Microsoft只编写有关如何使用NTFS的教程,而不编写如何实现NTFS的教程。Sun和ZFS、Red Hat和带有EXT2/3/4的Google、带有XFS的SGI、带有JFS的IBM、带有BTRFS的Oracle等都是如此

如果你想接受教育而不是培训,你需要阅读书籍,学习聪明人在生产中使用的代码,而不是寻找教程

  • 在使用多少种不同的使用模式时,它有多少用途?考虑在数百万台计算机上使用多年后在生产FSS中发现的bug。即使你和Matthew Dillon一样聪明,也不太可能会减少代码。
    您可能需要考虑尝试实现和更旧类型的文件系统。Ext4提供了许多可能不需要开始的耐用性保证。请尝试查看具有相同基本思想的Ext2。@米迦勒,是否有一些生成/实现Ext2fs的源代码?如果有的话,我在哪里可以找到它?@ JAMIEDEDWADS:
    mkfs.ext2
    的源代码以及Linux内核源代码都是公开的。您是否已经用物理和虚拟内存(和缓存)管理器制作了一个引导内核?如果是这样,那真是令人印象深刻。:)如果不是,那么您可能只需要担心创建一个没有磁盘/文件系统的“原始”内核,只是纯代码(第一个扇区是引导扇区,其余的是内核)。。。在你安装好系统之后,再考虑实现一个文件系统。信不信由你,有时候人们写教程只是因为他们想帮助那些和他们一样的人。。。e、 看,是的,像我这样的人回答问题就是因为他们喜欢帮助别人。但是你能期望有人花多少精力来帮助陌生人呢?我有时会看到一些问题,可以总结为“教我构建facebook/android/等等”,而OP似乎没有对所需的工作量做过最少的研究。阅读wikipedia上的文件系统并没有太多的要求,这个链接没有加载。这里有一个潜在的替代者:网站不久前就坏了,谢谢你的注意!没有问题-小组网站和所有这些。为编辑答案干杯。