HN 日本語サマリー

← 一覧へ戻る
プログラミング

OpenBSD上のGEFS:早期プレビュー

GEFS on OpenBSD: A Early Preview (marc.info)

109 pointsby sippingabonedry60 コメント

要約

開発者は、9front向けに作成した新しいクラッシュセーフなスナップショット機能付きコピーオンライトファイルシステムであるGEFSの、OpenBSD上での早期プレビュー版について報告しています。このポートはまだ本番環境での使用には適しておらず、データ損失の可能性もありますが、残りの問題は理解されており、開発が進められています。

全文翻訳

以前のリスト | 次のリスト | 以前のスレッド | 次のスレッド

リスト: openbsd-tech
件名: OpenBSD 上での GEFS: 初期プレビュー
差出人: ori () eigenstate ! org
日付: 2026-09-15 15:45:05
メッセージID: EBB049B251DCF60A8C9A0575F6FC7DC9 () eigenstate ! org
[RAWメッセージまたは本文をダウンロード]

誰かが尋ねる前に: まだしばらくの間、これをツリーに入れるつもりはありません。

これは何ですか

EuroBSD で見た人もいるかもしれませんが、OpenBSD 上で GEFS の粗削りでバグが多く、問題だらけのプレビュー版を動作させています。このポートは本番環境には全く適しておらず、特にエラー時にはデータ損失が予想されます。

しかし、このポートは(いくつかの例外を除いて)残りの問題が合理的に理解できる状態に達しており、人々がそれらを調べることができます。

私の講演を見ていない人のために説明すると、GEFS は私が 9front 用に作成した、クラッシュセーフでスナップショット機能、コピーオンライトを備えた新しいファイルシステムであり、現在 OpenBSD への移行を進めています。ファイルシステムについては、こちらで詳しく説明しています。

https://orib.dev/gefs.pdf

カーネル部分のコードは現在 9,000 行未満ですが、まだ多くの機能が欠けているため、時間とともに少し増えるだろうと予想しています。

Porting

私はこれを、Plan 9 と OpenBSD の間でデータ構造と細かいコードをかなり同期させた、適切なカーネル内ファイルシステムとしてアプローチしています。ただし、コード自体はコピー&ペーストです。私の目標は、修正を共有できるように、コードが「韻を踏む」ようにすることですが、2つの環境の要件により、コードが移植されることはおそらくなく、抽象化レイヤーを挿入しようとするのは悪い考えだと思われます。

問題点

そのため、私の意見では、残りの問題の最大のもの:

整合性プロトコル:
これは私にとって最大の未知数です。スーパーブロックへの書き込みは、スナップショット内のすべての書き込みの後に行われる必要がありますが、ブロックがディスクにヒットした後で書き込まれる限り安全です。書き込み順序に関して、9Front からバックポートする必要がある修正がいくつかあります。

エラーハンドリングとポーティングの苦労:
エラーハンドリングはほとんどコメントアウトされています。エラーハンドリングパスを一つずつ確認し、注意深く変換する必要があります。9front で採用したエラーハンドリングのアプローチは、OpenBSD では許容できません。その他、一度に複数のマウントを許可しないようにするグローバル変数がいくつかあります。

ユーザー空間ツール:
少なくとも、作成や fsck のために VM で 9front を起動するように人々に伝えるのは、長期的な解決策としては良くないと思います。スナップショット管理と関連する ioctl もここに含まれます。

POSIX の細かな点:
このファイルシステムが移植された元のシステムは POSIX システムではなかったため、制約を正確に守れていない場所が多数存在する可能性があります。

回帰テスト:
Plan 9 用には小さなテストスイートがありますが、OpenBSD 用にはありません。

ハードリンク:
実装は簡単ですが、ファイルごとに参照カウントが必要です。

kqueue:
実装は簡単ですが、ファイルごとに参照カウントが必要です。

NFS:
いくつかの厄介なフックがありますが、追加するために何が必要になるかは不明です。

その他の欠落している部分:
ブートローダーサポート、ブート環境の追加、クォータ、その他の便利な機能などです。これらはリストの下の方にあります。特にクォータは、LLVM が既知の宇宙のサイズにまで成長しようとする試みを継続できるように、/usr/obj をそのサイズに事前割り当てすることなく可能にします。

きっと何か忘れているでしょう。

現時点では、KNF (Kernel New File) の修正は求めていません。コードが触れられるにつれて、それを移行し始めますが、アップストリームへの準備が整うまでは、元のコードに近い状態を保ちたいと考えています。

9front や OpenBSD とは独立した、大きなファイルの削除が遅いなどの非致命的な問題もいくつかあります。それらを改善するためのアイデアがあります。

入手方法

パッチとして:

https://orib.dev/gefs.diff

git リポジトリは shithub 上に隠されており、サーバーは非常に小さいため、人々がそこからリポジトリをクローンすると過負荷になります。代わりに、github から初期リポジトリのコピーを取得し、更新のみをプルしてください。

まず、別の場所からアップストリームのコピーを取得します

git clone https://github.com/openbsd/src
cd src

次に、私のサーバーを追加し、差分のみを取得します

git remote add gefs git://shithub.us/ori/openbsd
git fetch gefs
git checkout -b gefs gefs/gefs

注意: openbsd current に追従するため、ブランチをリベースして強制プッシュすることがあります。コミット ID は変更されます。

以前のリスト | 次のリスト | 以前のスレッド | 次のスレッド

設定 | 概要 | ニュース | リストを追加 | KoreLogic 提供