
2026/09/16 2:12
OpenBSD における GEFS:早期プレビュー
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
GEFS ファイルシステムは、9front で元々開発され、現在は OpenBSD への移植が進行中の、実験的なクラッシュ耐性のあるコピオンライ्तファイルシステムです。現在の状態では、重要エラー処理ルーチンのコメントアウト(元のアプローチが OpenBSD の標準を満たさないため)、同時マウントを妨げる並行性のバグ、スナップショット管理ツールなどの重要な機能の欠如といった理由から、本番環境での使用には不適合です。移植は抽象化層なしの直接コードコピーに依存しており、9front からの特定のバックポートを必要とし、スーパーブロック書き込み順序に関する不明なリスクを抱えています。まだ開発が残されており、完全な regres テストスイート、NFS ハーック、ハードリンク/Kqueue 用のファイル単位の refcount ファイル、そして遅いファイル削除への修正が含まれます。現在では仮想化された 9front 環境の起動が一部のツールのアクセス方法として唯一の方法ですが、機能追加に伴ってこのセットアップは進化していくでしょう。コードベースは大幅に拡大し、リポジトリは Upstream の変更を反映するために force-pushing を受け入れるため、作者のサーバーを過負荷にしないよう、OpenBSD のソースをまずクローンし、その後 GEFS ブランチから更新を取得するようユーザーに推奨されます。
本文
OpenBSD 向け GEFS の初期プレビューリリース
重要: このコードは直ちにソースツリーへの統合対象ではありません。
これは何ですか?
EuroBSD で知られる通り、著者は現在、OpenBSD 上で動作する**GEFS(クリッシュ安全なスナップショット機能とコピーオンライートを備えたファイルシステム)**のプレビュー版を開発中です。
- 状態: 概ね未完成で不具合があり、諸問題が多い状態です。
- 利用可否:現時点では本番環境での使用には適しておりません。特にエラー発生時にはデータ損失の可能性があります。
- 開発状況: 一部例外を除き、残りの問題は比較的理解可能になりつつあり、検証・ご指摘いただける段階まで達しました。
詳細は以下の PDF を参照ください:
現状のコード量: カーネル内では 9,000 行未満ですが、機能不足のため将来的に増える可能性があります。
ポーティング戦略
Plan 9 と OpenBSD の間でのデータ構造や複雑な部分のコードを同期しつつ、実装面はコピー&ペーストによる移植を行っています。
- 目標: 両環境でコードが互換性("rhyme")を保ち、修正結果を共有しやすくすることです。
- アプローチ:
- 各環境の要件の違いから、そのままコードを流用することは現実的ではありません。
- 抽象化レイヤーを追加しようとすることも逆効果と考えます。
現在の課題(主要項目)
残りの大きな課題は以下の通りです:
- 一貫性プロトコル:
- スーパーブロックへの書き込みが、スナップショット内のすべての書き込みより後に行わなければならない点。
- ディスクに Actual された後の書き込みであれば安全ですが、Plan 9 側からバックポート可能な書き込み順序に関する修正が必要です。
- エラー処理と移植による「脳损伤」:
- エラー処理部分は大部分がコメントアウトされています。
- OpenBSD では Plan 9 で採用したアプローチは不適切ため、各パスを慎重に検証・再実装する必要があります。
- 同時複数マウントを妨げるグローバル変数の使用などの問題も存在します。
- ユーザースペースツール:
- VM 内で 9front を起動して作成/fsck を行う方法は長期的には望ましくありません。
- スナップショット管理や関連する IOCTL も含みます。
- POSIX 準拠に関する細かな点:
- 由来した環境は POSIX 準拠ではなかったため、要件を完全に満たしていない箇所があります。
- テストスイートの不足:
- Plan 9 側には小規模なスイートがありますが、OpenBSD 側にはまだありません。
- ハードリンク:
- 実装自体は簡単ですが、各ファイルに対して参照カウンタファイルを必要とします。
- kqueue:
- 同様に実装は容易ですが、ファイル単位での参照カウントが必要です。
- NFS:
- 動作させるには厄介なフックが必要で、追加に必要な条件がまだ明確ではありません。
- その他の欠落部分:
- ブートローダーサポート、ブート環境の追加、クォータ設定など不足しています。
- 特にクォータは重要で、LLVM が /usr/obj の大きな領域を割り当てずに継続できるようにするためにも必要です。
他にも見落としがあるかもしれません。KNF(Kernel Naming Convention)の修正には現在取り組んでおらず、コードに触れるたびに順次移行を進めていく方針です。 アップストリームへの統合に近い段階になるまで、可能な限り元々のコードに忠実な状態を維持することを優先します。
また、9front と OpenBSD の依存関係とは独立した非致命的な問題(例:大ファイルの削除が遅いなど)も存在し、改善案を持っておりつつあります。
入手方法
単一のパッチとして以下からダウンロード可能です: GEFS.diff
Git リポジトリへのアクセス方法: サーバー容量が極めて限られているため、新規クローンからのアクセスではすぐに負荷がかかります。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 の最新状態に合わせるために時折リベースと強制プッシュを行うことがあります。その際、コミット ID が変化する可能性があります。