MOUNT_UNION(8)

名称
mount_union - ユニオンファイルシステムをマウントする

書式
mount_union [-br] [-o options] directory uniondir

解説
mount_union コマンドは directory を uniondir の上に接続し、そこから両方のディレクトリツリーの内容が見えるようにします。 デフォルトでは、 directory が 上の 層に、 uniondir が 下の 層になります。

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

-b  デフォルトの上下関係を反転します。つまり、 directory が下の層に、 uniondir が上の層になります。ただし、マウントポイントは uniondir のままになります。

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

-r  mount_null(8) でマウントした場合と同様に、下の層を完全に隠すようになります。

ファイルシステムのセキュリティを維持するため、 ファイルシステムをマウントするユーザは、スーパユーザか、 マウントポイントのディレクトリに書き込み許可を持つ者でなければなりません。

ファイルの検索は、上の層、下の層の順におこなわれます。 上の層にはエントリのないディレクトリが、下の層で見つかった場合には、上の層に シャドウ ディレクトリが作られます。 このディレクトリはユニオンマウントを実行したユーザの所有になり、モードは “rwxrwxrwx” (0777) をその時点で有効な umask で修正したものになります。

あるファイルが上の層に存在している場合、下の層にある 同じ名前のファイルをアクセスする方法はありません。 どうしても必要なら、ループバックマウントとユニオンマウントを 組み合せることで、別のパス名を使って下の層のファイルを アクセスできるようにしておくことができます。

オブジェクトへのアクセスは、それがディレクトリである場合を除き、 通常のファイルシステムのアクセス権チェックのあとで実行されます。 ディレクトリの場合には、アクセスをおこなうユーザは上の層と下の層の 両方のディレクトリのアクセス権を持っていなければなりません (両方のディレクトリが存在している必要があります)。

いくつかの特別な場合を除き、 uniondir 中のオブジェクトの作成や変更の要求は上の層に渡されます。 下の層に存在するファイルを書き込み用にオープンしようとすると、 そのファイルの 完全な コピーが上の層に作成され、それから上の層のコピーがオープンされます。 同様に、下の層のファイルを切り詰めてサイズを 0 にしようとすると、 空のファイルが上の層に作成されることになります。 これ以外の、本当に下の層の変更が必要となる操作は失敗し、 EROFS が返されます。

ユニオンファイルシステムは、個々のファイルシステムを扱うというよりも 名前空間を扱うものです。ユニオンマウントは uniondir 以下のディレクトリツリーに再帰的に影響します。 このため uniondir 以下にマウントされたファイルシステムは、すべて ユニオン効果を持つようになります。これが mount(8) の union オプションとは異なる点です。 union オプションでは、ユニオン効果はマウントポイントだけに働き、 ファイル名の探索のみに使われます。

使用例
コマンド

    mount -t cd9660 -o ro /dev/cd0a /usr/src
    mount -t union /var/obj /usr/src

は、CD-ROM ドライブ /dev/cd0a を /usr/src にマウントし、その上に /var/obj を重ねます。ほとんどの場合、これはソースツリーが実際には CD-ROM 上に あるにもかかわらず、書き込みが可能になるという効果を目的としています。

コマンド

    mount -t union -o -b /sys $HOME/sys

は、ユーザのホームディレクトリの下の sys ディレクトリに、システムのソースツリーを下の層として重ね合わせます。 これにより、個々のユーザがそのソースツリーに対して個人的な変更を加えて、 新しいカーネルを構築することができるようになります。 他のユーザはその変更に関知しません。 下の層のファイルは、そのまま /sys からアクセスできることに注意してください。

関連項目
intro(2), mount(2), unmount(2), fstab(5), mount(8), mount_null(8)

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

危険性を減らすためには、このコードもまた所有者を必要としています - 真面目なハッカーの方はメールを hackers@freebsd.org に送って 引き継ぎの意思を宣言してください。

上の層を支えているファイルシステムで、ホワイトアウトが サポートされていないため、下の層のオブジェクトに対して 削除や名前変更の操作をおこなう方法はありません。 このような操作や、下の層を変更する操作、たとえば chmod(1) のような操作に対しては、 EROFS が返されます。

ユニオンツリーの上で find(1) を実行すると、上の層にシャドウディレクトリのツリーが 作成されてしまうという副作用があります。

歴史
mount_union コマンドは 4.4BSD で初めて登場しました。 最初に動作したのは FreeBSD -(要記入) です (訳注: 原文 は FreeBSD-(fill this in))。