総合手引 | セクション 8 | English | オプション |
ファイルシステムの仮想的コピーとシンボリックリンクとの第 1 の違いは、 getcwd(3) 関数が仮想コピーでは正しく動作する点と、 別のファイルシステムを仮想コピー上にマウントしてもオリジナルには影響がない点 です。 stat(2) は、仮想コピーに対して別のデバイス番号を返しますが、 別の側面においてはオリジナルとの区別はつきません。
mount_nullfs ファイルシステムが歴史的なループバックファイルシステムと異なるのは、 次の 2 つの点です: 1 つは、ファイル システムのスタック化可能層 (stackable layers) という技術を使って 実装されている点、もう 1 つはディレクトリの vnode だけでなく、 すべての下位層の vnode の上に "null-node" が積み重なっているという点です。
オプションは以下のものがあります:
| |
| |
この null 層は 2 つの目的を持っています。1 つは、何もしない層 を提供することでファイルシステムの層の構築のデモを示すことです (実際には 何も行わないというわけではなく、 ループバックファイルシステムが提供することはすべて行います)。 もう 1 つはプロトタイプ層を提供することで す。層のフレームワークとして必要なことはすべて提供しているので、 ここから新しいファイルシステム層を簡単に作り出すことができます。
このマニュアルの以下の部分では、新しいファイルシステム層を構築するための 基礎として null 層を調べます。
バイパスルーチンは下位層における任意の vnode に対する操作を受け付けます。 まず、vnode に対する操作の引数を検査し、 null-node を下位層において等価となるものに置き換えることから始めます。 次に、下位層の操作を起動します。 最後に、引数中の null-node を置き換えます。 もしその操作によって vnode が返ってきたら、 その返ってきた vnode の上に null-node を積みます。
ほとんどの操作をバイパスしますが、 vop_getattr, vop_inactive, vop_reclaim, vop_print はバイパスしません。 vop_getattr は戻り値の fsid を替えなければなりません。 vop_inactive と vop_reclaim は、null 層特有のデータを解放するためにバイパスしません。 vop_print は過度のデバッグ情報を避けるためにバイパスしません。
最初のマウントでは新しい null 層の根として単一の vnode スタックを作ります。 他のすべての vnode スタックは根の vnode スタックや他の null vnode スタックの 操作の結果として作られます。
vnode を返す操作の結果として新しい vnode スタックが生まれます。 バイパスルーチンは、呼出し側に vnode を返す前に新しい vnode の上に null-node を積みます。
例えば、null 層を以下のようにマウントする例を想像します。
mount_nullfs /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 スタックを構築する時には この処理が繰り返されます。
umap 層は null 層の子孫の一例です。
最初の方法はエイリアスする層のバイパスルーチンを呼ぶことです。 この方法は、下位層で現在扱われている操作を起動したい時に最も適しています。 これはバイパスルーチンがすでにマッピングされているという利点があります。 この例として、 null_getattrs が null 層にあります。
2 つ目の方法は、 VOP_OPERATIONNAME インタフェースを用いて下位層の vnode の操作を直接起動することです。 この方法の利点は、下位層の任意の操作を起動するのが簡単ということにあります。 欠点は、vnode 引数は手動でマッピングされなければならないことです。
UCLA Technical Report CSD-910056, Stackable Layers: an Architecture for File System Development.
危険性を減らすためには、このコードもまた所有者を必要としています - 真面目なハッカーの方はメールを <hackers@FreeBSD.org> に送って 引き継ぎの意思を宣言してください。
MOUNT_NULLFS (8) | May 1, 1995 |
総合手引 | セクション 8 | English | オプション |
このマニュアルページサービスについてのご意見は Ben Bullock にお知らせください。 Privacy policy.
“ | The “N” in NFS stands for Not, or Need, or perhaps Nightmare | ” |
— Harry Spencer |