【问题标题】:Writing an EXT4 file system in C?用 C 写一个 EXT4 文件系统?
【发布时间】:2012-04-27 08:20:33
【问题描述】:

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

我想要的是一个与 Linux Ubuntu 类似的文件系统,它是 EXT4(至少我的是)。我想试试,也可以用 C 来写。

有什么想法可以解决这个问题吗?和/或您可能发现的任何可能对我有帮助的教程(我尝试过没有运气的搜索):L

提前致谢!

杰米。

【问题讨论】:

  • 您可能需要考虑尝试实现旧类型的文件系统。 ext4 提供了许多您可能不需要开始使用的持久性保证。尝试研究具有相同基本思想的 ext2。
  • @Michael - 是否有某种源代码用于生成/实现 ext2 fs?如果有,我在哪里可以找到它?
  • @JamieEdwards:mkfs.ext2 的源代码是公开的,Linux 内核源代码也是如此。
  • 您是否已经制作了带有物理和虚拟内存(和缓存)管理器的引导内核?如果是这样,那真是令人印象深刻。 :) 如果没有,那么您可能只想担心创建一个没有任何磁盘/文件系统的“原始”内核,只是纯代码(第一个扇区是引导扇区,其余的是内核)......系统就绪后,然后担心实现文件系统。

标签: c ext4


【解决方案1】:

对这个问题进行了广泛研究的非常聪明和经验丰富的人制造了会吞噬用户数据的错误。计算层中的错误(例如内核崩溃)和存储层中的错误之间的区别在于,默默地吃掉用户的数据非常糟糕 - 比在电子表格中给出错误答案(excel有问题但很受欢迎)或在磁盘上保留数据时间歇性地出现 sigfaulting(这很容易通过频繁的自动保存来缓解)。

从研究更简单的设计开始,例如旧操作系统书籍 [1] 中的 minix 文件系统(与 Linus Torvalds 二十年前开始使用的相同)。

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

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

您是否看到一种商业模式会增加实现自己不兼容的 buggy[3] 文件系统的人数?仅当您出售软件工程学位时。所以微软只写了关于如何使用 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/
  3. 有多少用途,在多少不同的使用模式中用它看?考虑在数百万台计算机上使用多年后在生产 FS 中发现的错误。即使您像 Matthew Dillon 一样聪明,您的代码也不太可能减少错误。

【讨论】:

  • 信不信由你,有时人们确实编写教程只是因为他们想帮助其他人,他们已经处于同样的境地...... . 例如见here
  • 是的,像我这样的人回答关于 SO 的问题只是因为他们喜欢帮助别人。但是你能指望别人花费多少努力来帮助陌生人呢?我有时会看到可以概括为“教我构建 facebook/android/etc”的问题。没有 OP 似乎对所需的工作量进行了最少的研究。在 wikipedia 上阅读有关文件系统的内容并不过分。
【解决方案2】:

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

【讨论】:

猜你喜欢
  • 2021-09-19
  • 1970-01-01
  • 1970-01-01
  • 2021-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-19
  • 2015-06-17
相关资源
最近更新 更多