日本語 man コマンド類 (ja-man-1.1j_5) と日本語 man ドキュメント (ja-man-doc-5.4 (5.4-RELEASE 用) など) をインストールすると、以下のような man コマンド閲覧、キーワード検索が コンソールからできるようになります。
4.11-RELEASE-K, 5.4-RELEASE-K, 5.5-RELEASE-K, 6.0-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.2-RELEASE-K, 8.0-RELEASE-K は、プライベート版 (小金丸が編集してまとめたもの) ですが、 より多くの翻訳したファイルが含まれています。 (5.4-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.2-RELEASE-K, 8.0-RELEASE-K は、全翻訳済み)
6.4-STABLE-K, 7.2-STABLE-K, 8.0-STABLE-K は現在、 作成中で日々更新されています。 最新の snapshots を元に作成しています。
MOUNT_NULL(8) FreeBSD System Manager's Manual MOUNT_NULL(8)
名称
mount_null - ループバックファイルシステムサブツリーをマウントする; 何もし
ない(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 で作られます。 mount_null は 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 を積みます。
ほとんどの操作をバイパスしますが、 vop_getattr, vop_inactive,
vop_reclaim, vop_print はバイパスしません。 vop_getattr は戻り値の fsid
を替えなければなりません。 vop_inactive と vop_reclaim は、null 層特有の
データを解放するためにバイパスしません。 vop_print は過度のデバッグ情報を
避けるためにバイパスしません。
vnodeスタックの概説
マウントは null 層を下位層に関連づけます。その結果 2 つの VFS が積み重な
ります。 vnode スタックはファイルがアクセスされるたびに必要に応じて作成さ
れます。
最初のマウントでは新しい null 層の根として単一の vnode スタックを作りま
す。他のすべての vnode スタックは根の vnode スタックや他の null vnode ス
タックの操作の結果として作られます。
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.
バグ
本ファイルシステムタイプは、まだ完全にはサポートされていません (注: 機能
しないということです) し、実際のところ使用するとシステム上のデータを破壊
するかもしれません。自己責任において使用してください。猛犬注意。濡れてい
て滑ります。
危険性を減らすためには、このコードもまた所有者を必要としています - 真面目
なハッカーの方はメールを <hackers@FreeBSD.org> に送って引き継ぎの意思を宣
言してください。
歴史
mount_null は、 4.4BSD から登場しました。
FreeBSD 4.7 May 1, 1995 FreeBSD 4.7