特定のファイルシステムと対話する方法は?

特定のファイルシステムと対話する方法は?

ユーザー空間プログラムが特定のファイルシステム(VFSではない)と対話できますか?私が得たのは、VFSを使用すると、Linuxがすべてのファイルシステムを同じように処理し、ユーザースペースに抽象APIを提供できることです。

条件を実装したい。カスタムファイルシステムは、ユーザースペースで利用可能なページレベルでディスク(SSD)を読み書きするためのAPIを提供できる必要があります。

これには、特定のファイルシステムとVFSの相互作用をバイパスする方法が必要でした。

答え1

ファイルシステムの相互作用の唯一のエントリポイントはシステムコールメカニズムであり、これは完全にではありませんが、VFSに大きく依存します。

誰かがVFSに依存しないファイルシステムを作成したい場合は、その人はLinuxブロックレベルと直接対話する新しいI / Oシステムコールセットを実装する必要があります。

これはエレガントではなく、持ち運びにも適していません。実装、デバッグ、およびメンテナンスが難しいだけでなく、このカスタムファイルシステムは、このカスタムシステムコールセットを使用するアプリケーションからのみアクセスできます。このアプローチは移植性の概念を完全に排除します。

したがって、あなたの質問に答えてください、そうです。新しいシステムコールセットを実装することで可能です。しかし、そのようなファイルシステムの唯一のユーザースペースクライアントはあなたのアプリケーションになります。これよりも移植性を高めるには、VFSを使用する必要があります。

編集する:

私はあなたを見る前の質問SSD用の高性能キーと値のストレージシステムの実装に関して、このアプローチを検討する動機があると思います。 2つの点を追加したい。

  • VFSはいいえボトルネック。 I / O操作をLinuxブロックレベルに非常に効率的にルーティングします。
  • カーネルパッチ(コード品質の問題)を必要とするアプリケーションは、可用性が非常に低いです。個人的な使用のためにこのシステムを明示的に書くのではない場合は、カーネルの内部を最適化する前に他の可能性を調べることをお勧めします。

答え2

「ディスクから消去」(例:ioctl())を除くと、次のようになります。

  • ブロックデバイスからページを読み書きする
  • 与えられたファイルのページの読み書き

適切なページサイズでlseek +読み取り/書き込みを使用して、これを行うことができます。

(1回のシステムコールですべてを使用するにはpred / pwriteを実行できますが、これは同じです)

答え3

フォローするLinuxの低レベルディスクI/O、ブロックデバイスに直接アクセスするプログラムを使用して、ファイルシステムにアクセスする独自のコードを実装できます。これは、カーネルのファイルシステムドライバ(VFSレイヤを介してアクセスされる - VFSレイヤの目的)よりも遅くなる可能性があります。これは、いくつかのユースケース(フォレンジックやカーネルでサポートされていないファイルシステムタイプのアクセスなど)には可能で便利ですが、ユースケースには間違ったアプローチです。

関連情報