mount_null(8) FreeBSD 一般コマンドマニュアル

mount_null

前のページ 上に戻る 次のページ

mount_null


     mount_null [-o options] target mount_point


解説

     mount_null は、null 層を作ります。これは、ファイルシステムの名前空間の部
     分木を、グローバルなファイルシステムの名前空間の別の場所にエイリアスしま
     す。これにより、既存のファイルとディレクトリが別のパス名にてアクセス可能
     となります。

     ファイルシステムの仮想的コピーとシンボリックリンクとの第 1 の違いは、
     getcwd(3) 関数が仮想コピーでは正しく動作する点と、別のファイルシステムを
     仮想コピー上にマウントしてもオリジナルには影響がない点です。 stat(2) は、
     仮想コピーに対して別のデバイス番号が返しますが、別の側面においてはオリジ
     ナルとの区別はつきません。

     歴史的なループバックファイルシステムと異なるのは、次の 2 つの点です: 1 つ
     は、ファイルシステムのスタック化可能層 (stackable layers) という技術を
     使って実装されている点、もう1つはディレクトリの vnode だけでなく、すべて
     の下位層の vnode の上に ``null-node'' が積み重なっているという点です。

     オプションは以下のものがあります:

     -o      -o のあとに、オプション文字列をコンマで区切って指定することができ
             ます。指定可能なオプションとその意味は mount(8) を参照してくださ
             い。

     この null 層は 2 つの目的を持っています。1 つは、何もしない層を提供するこ
     とでファイルシステムの層の構築のデモを示すことです (実際には何も行わない
     というわけではなく、ループバックファイルシステムが提供することはすべて行
     います)。もう 1 つはプロトタイプ層を提供することです。層のフレームワーク
     として必要なことはすべて提供しているので、ここから新しいファイルシステム
     層を簡単に作り出すことができます。

     このマニュアルの以下の部分では、新しいファイルシステム層を構築するための
     基礎として null 層を調べます。


新しい null 層の例示

     新しい null 層は mount_null(8) で作られます。 mount_null(8) は 2つの引数
     をとります。 1つは下位層の vfs のパス名 (target-pn) で、もう1つは null 層
     が現れる名前空間内のパス名 (mount-point-pn) です。 null 層が適切な場所に
     置かれた後、目的のディレクトリ階層 (target-pn) の中身がマウント先 (mount-
     point-pn) にエイリアスされます。


null 層の操作

     null 層は最小のファイルシステム層であり、すべての操作を下位層に処理させる
     ためにバイパスするだけです。ほとんどすべての vnode に対する操作はパスする
     ことですが、その動作のほとんどはバイパスルーチンに集中します。

     バイパスルーチンは下位層における任意の vnode に対する操作を受け付けます。
     まず、vnode に対する操作の引数を検査し、 null-node を下位層において等価と
     なるものに置き換えることから始めます。次に、下位層の操作を起動します。最
     後に、引数中の null-node を置き換えます。もしその操作によって vnode が
     返ってきたら、その返ってきた vnode の上に null-node を積みます。
     タックの操作の結果として作られます。

     vnode を返す操作の結果として新しい vnode スタックが生まれます。バイパスル
     ーチンは、呼出し側に vnode を返す前に新しい vnode の上に null-node を積み
     ます。

     例えば、null 層を以下のようにマウントする例を想像します。

           mount_null /usr/include /dev/layer/null
     /dev/layer/null にチェンジディレクトリすると、根の null-node (null 層をマ
     ウントした時に作られたもの) が割り当てられます。ここで sys をオープンする
     ことを考えてみます。 vop_lookup は根の null-node で行なわれます。この操作
     は下位層にバイパスされ、下位層が UFS の sys を表す vnode を返します。それ
     から null_bypass は UFS sys にエイリアスする null-node を構築し、呼出元に
     これを返します。 null-node sys に対する以降の操作で他の vnode スタックを
     構築する時にはこの処理が繰り返されます。


他のファイルシステム層の作成

     新しいファイルシステム層を構築する一番簡単な方法は、 null 層のコピーを作
     り、すべてのファイル、変数の名前を付け直し、そしてそのコピーを変更するこ
     とです。すべての変数の名前を変えるのには sed(1) が良く使われます。

     umap 層は null 層の子孫の 1 例です。


下位層の操作の起動

     操作が完全にはバイパスできない時に下位層にある操作を起動するための方法が
     2 つあります。それぞれの方法は違った状況に対して適切に使われます。両方の
     場合とも、その操作の引数を下位層のために正しく作るのはエイリアスする層の
     責任であり、 vnode 引数を下位層にマッピングします。

     最初の方法はエイリアスする層のバイパスルーチンを呼ぶことです。この方法
     は、下位層で現在扱われている操作を起動したい時に最も適しています。これは
     バイパスルーチンがすでにマッピングされているという利点があります。この例
     として、 null_getattrs が null 層にあります。

     2 つ目の方法は、 VOP_OPERATIONNAME インタフェースを用いて下位層の vnode
     の操作を直接起動することです。この方法の利点は、下位層の任意の操作を起動
     するのが簡単ということにあります。欠点は、vnode 引数は手動でマッピングさ
     れなければならないことです。


関連項目

     mount(8)

     UCLA Technical Report CSD-910056, Stackable Layers: an Architecture for
     File System Development.


バグ

     本ファイルシステムタイプは、まだ完全にはサポートされていません (注: 機能
     しないということです) し、実際のところ使用するとシステム上のデータを破壊
     するかもしれません。自己責任において使用してください。猛犬注意。濡れてい
     て滑ります。


ABELNET VPSサービス