サンバダンスを学んでいる間、この写真を見ました。この図のVFSモジュールが混乱しています。
予想されるシステムコールをCライブラリに直接渡すのではなく、SambaサーバーにこのVFSモジュールが必要なのはなぜですか?クライアント側では、カーネルがマウントされたファイルシステムについて知るためにcifs.koまたはsmbfsが必要であることを知っています。
たとえば、クライアントがファイルを読み取ろうとするときです。対応するプロトコルコマンドをネットワーク経由でサーバーに渡します。サーバーのイーサネットカードはそれを受信してアプリケーション層に送信します。これにより、アプリケーション層のCIFSプロトコルがこのコマンドを解釈してcライブラリに渡し、最終的にsys_read()システムコールが発生します。このプロセスでは、VFSは不要に見えます。
このモジュールは必須ですか?そうでない場合は、コンパイルされたことをどのように確認できますか?
ありがとう
再充填する:
この図はsmbdプロセスアーキテクチャを説明するためのものです。表現したいのは、smbdがマルチプロセス、シングルスレッドアーキテクチャを持っているということです。私はSamba 3.0をSametimeという他のCIFSサーバーと比較する記事でこれを見ました。
答え1
/var/samba/share1/dir/file
4時間の答えがなかったので、推測を追加します。これは、物理パス(たとえば)を論理パス()に変換するレイヤーですshare1\dir\file
。必要なファイル名の変換、権限の確認などなので必須であり、選択肢ではありません。
プロトコル実装自体はすでに論理パスで実行されている可能性があり、VFSで見つかったすべての内容を単に行に追加できます。
答え2
イメージが何を意味するのか完全には明確ではありません。ただし、Linux上のすべてのファイルシステムコールはVFSによって処理されます。この意味では、VFSははいシステムコールを処理するカーネルの一部です。しかし、あなたのように私はなぜVFSがブロックシステムコールをするのか、図に表示されているのかわかりません。
しかし、あなたの説明も正しくありません。クライアントがアプリケーション層で何かを意味する場合、Sambaは透明でなければなりません。ただ別のファイルシステムにアクセスしていると思うので、これには標準のシステムコールを使用します(たとえば、VFS経由)。その後、カーネルはこれらの呼び出しをネットワーク経由でルーティングします。
答え3
私はVFSモジュールがposixファイルシステムの機能を拡張すると思います。
https://www.samba.org/samba/docs/man/Samba-Developers-Guide/vfs.html
たとえば、特定のファイルシステムの拡張属性のサポートはオプションです。ただし、オプションで有効/無効にできます。
答え4
VFSモジュールは、さまざまなファイルシステムの実装に一貫したインターフェイスを提供する抽象化レイヤです。
ㅏ仮想ファイルシステム(VFS) または仮想ファイルシステムスイッチより具体的なファイルシステムの上にある抽象化階層です。 VFSの目的は、クライアントアプリケーションが均一な方法でさまざまな種類の特定のファイルシステムにアクセスできるようにすることです。たとえば、VFSを使用すると、クライアントアプリケーションは違いを認識せずにローカルおよびネットワークストレージデバイスに透過的にアクセスできます。 ...
SAMBAおよびすべてのユーザー空間プロセスでは、物理ファイルシステムにアクセスするにはVFSモジュールが必要です。