返回资讯中心
外部精选
软件工程
#开发者实时流

OpenBSD 的 GEFS 文件系统开发取得新进展

来源标题:Work on GEFS (The Good Enough File System) for OpenBSD Progresses

开发者 Ori 更新了 OpenBSD 上的 GEFS 文件系统代码,推动其向通用可用迈进。新版完善了错误处理,从 9front 移植了关键修复,默认保留首个文件系统块用于存放 disklabel,并实现了 mkfs 等部分用户态工具,但快照控制尚未完成。

Hacker News 最新birdculture2026/11/2 · 今天10 分钟阅读

以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。

由 Peter N. M. Hansteen 投递 于 2026-11-01 来自最出色的文件粉碎部门。

现在 Ori 跟进了一些更成熟的代码,其中包含若干重要步骤,朝着让这个新文件系统适合通用使用的方向迈进。在发给 tech@ 的一封邮件中,Ori 写道:

列表:openbsd-tech 主题:Re: GEFS on OpenBSD: A very early preview 发件人:ori () eigenstate ! org 日期:2026-10-31 17:08:42

那么,大概是时候做一些更新了。首先,感谢 Martijn,以及所有试用并提交补丁的人。

所有内容都已更新并变基,diff 也已用最新的代码重新生成。我过了一遍错误处理代码。理论上文件系统基本能正确处理错误。但理论上和现实中可能仍有出入。我还前移了 9front 的大部分重要 bug 修复。

文件系统现在默认不使用第一个 FS 块——我们可以把 disklabels 放在那里,这样也就很难再把超级块放在那里了。

一些用户空间工具已经完成(现在你可以在 openbsd 上 mkfs 了!),但快照控制还没做。我在想做一个用户空间的 'gefs' 程序来处理这些,尽量让接口接近 9front 的 ctl 文件。下面的命令应该就够了:

gefs debug [0|1] gefs usereserve gefs retain snap timespec gefs snap name newname gefs fork name newname

一致性协议仍然是最缺失的一块;我一直在读 softupdates 的旧代码,因为它有同样类型的问题。

理想情况下,gefs 想要的是某种能在提交阶段设置顺序屏障、同时仍接受新的块 I/O 的机制,类似下面这串步骤:

  1. 正常使用,产生脏块并以任意顺序写回。 持有 mutlk {
  2. barrier(),确保提交前写入的所有块在提交完成前都已落盘
  3. 将 free list/deadlist 数据入队
  4. 准备 arena header/footer + superblock
  5. 将 arena headers 入队
  6. barrier()
  7. 将 superblock 入队
  8. 将 arena footers 入队
  9. 等待入队的块写入磁盘
  10. 释放上一代不再使用的块

在 9front 上,我有一个按 (gen, addr) 元组排序的块优先队列,这意味着同一代内的写入会尽可能按顺序刷到磁盘,同时不跨代边界。

我目前的想法是在 OpenBSD 上实现同样的机制——启动 syncer kproc,对块设备做同步 I/O。如果我们提前把东西踢出缓存并写回磁盘,那通常应该是安全的——buffer cache 唯一不能重排的块是 arena headers 和 superblocks,所以也许只需要一个标志把它们固定为未写入就够了。

不过我也愿意听取其他想法。

Quoth ori@eigenstate.org:

后面引用了上一条消息的一部分,其中包含代码和文档的链接。

如果你和我们一样对这个新文件系统开发感到兴奋,并且有条件测试,请务必一试。

回复

OpenBSD 已经很久没有一个现代文件系统了。GEFS 似乎符合整体的理念,而且已经在源码树内开发,所以我真的很兴奋!请继续保持良好的工作 :)

哎呀,它还没进源码树,但我没法编辑我的帖子。不过还是很令人兴奋!

版权所有 © 2004-2008 Daniel Hartmeier。 保留所有权利。 文章和评论的版权归各自作者所有, 提交即意味着授权在本网站发布。 2004 年 4 月 2 日之前的存档内容以及图片和 HTML 模板均复制自绝妙的原版 deadly.org,并获得了 Jose 和 Jim 的善意许可。 本日志以 CGI 方式运行,使用 httpd(8) 于 OpenBSD 上,源代码以 BSD 许可发布。 undeadly \Un*dead"ly, a. 不受死亡支配的;不朽的。[古语]

正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。

打开原文
去社区讨论 →