プログラミング
OpenBSD上のGEFS:早期プレビュー
GEFS on OpenBSD: A Early Preview (marc.info)
要約
開発者は、9front向けに作成した新しいクラッシュセーフなスナップショット機能付きコピーオンライトファイルシステムであるGEFSの、OpenBSD上での早期プレビュー版について報告しています。このポートはまだ本番環境での使用には適しておらず、データ損失の可能性もありますが、残りの問題は理解されており、開発が進められています。
全文翻訳
誰かが尋ねる前に:これはまだしばらくツリーに入れるつもりはありません。
これは何ですか
----------
さて、EuroBSDで見た人もいるかもしれませんが、OpenBSD上でGEFSの粗削りでバグが多く問題だらけのプレビュー版を動かしています。このポートは本番環境には全く適しておらず、特にエラー時にはデータ損失が現在予想されます。しかし、ポートは(いくつかの例外を除いて)残りの問題が合理的に理解されており、人々がそれを試すことができる状態に達しました。
私の講演を見ていない人のために説明すると、GEFSは私が9frontのために書いた、新しいクラッシュセーフなスナップショット機能付きコピーオンライトFSで、現在OpenBSDへの移植を進めています。ファイルシステムについては、こちらのPDFで詳細に説明されています:https://orib.dev/gefs.pdf
カーネル部分のコードは現在9,000行未満ですが、まだ多くの機能が欠けているため、今後少し増えるだろうと予想しています。
ポート----------
私はこれを本格的なカーネル内ファイルシステムとしてアプローチしており、データ構造と細かいコードはPlan 9とOpenBSDの間でかなり同期させていますが、コード自体はコピー&ペーストしています。私の目標は、それが「韻を踏み続ける」こと、つまり修正を共有できるようにすることですが、2つの環境の要件が異なるため、コードがおそらく移植されることはなく、抽象化レイヤーを押し込もうとするのは悪い考えだと思われます。
問題----------
私の意見では、残っている問題の最大のもの:
整合性プロトコル:これは私にとって大きな未知数です。スーパーブロックへの書き込みは、スナップショット内のすべての書き込みの後に行われる必要がありますが、ブロックがディスクにヒットした後で書き込まれる限り安全です。書き込み順序に関して、9Frontからバックポートする必要がある修正もいくつかあります。
エラーハンドリングとポートの脳みそ損傷:エラーハンドリングは大部分コメントアウトされています。エラーハンドリングパスを一つずつ注意深く変換していく必要があります。9frontで採用したエラーハンドリングのアプローチは、OpenBSDでは許容できません。一度に複数のマウントを許可しないようにする、いくつかのグローバル変数の使用など、他にもいくつかの問題があります。
ユーザースペースツール:少なくとも、作成やfsckのために9frontをVMで起動するように人々に伝えるのは、長期的な解決策ではないと想定しています。スナップショット管理と関連するioctlもここに含まれます。
POSIXの細かい要求:移植元のシステムはPOSIXシステムではなかったため、制約を正しく満たせていない場所が多数存在する可能性があります。
リグレッション:Plan 9には小さなテストスイートがありますが、OpenBSDにはありません。
ハードリンク:実装は簡単ですが、ファイルごとに参照カウントが必要です。
kqueue:実装は簡単ですが、ファイルごとに参照カウントが必要です。
NFS:いくつかの厄介なフックがありますが、追加に必要なものが何であるかはまだ不明です。
その他の欠けている部分:ブートローダーサポート、ブート環境の追加、クォータ、その他の便利な機能など。これらはリストの下の方にあります。特にクォータがあれば、LLVMが既知の宇宙のサイズまで成長しようとする試みを続けることができ、我々が/usr/objをそのサイズの分だけ事前に割り当てる必要がなくなります。
きっと何か忘れているでしょう。
現状:KNF(Kernel Normal Form)の修正は求めていません。コードに触れるにつれて、それを移行し始めますが、アップストリームへの準備が整うまでは、元のコードに近い状態を保ちたいと考えています。また、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は変更されます。
[prev in list] [next in list] [prev in thread] [next in thread] Configure | About | News | Add a list | Sponsored by KoreLogic