18.2.3. マウントポイントを共有する

システム管理作業の中には、同じファイルシステムにディレクトリーツリー内の複数の場所からのアクセスする必要がある場合があります (chroot 環境を準備する場合など)。Linux では同じファイルシステムを複数のディレクトリーに必要なだけマウントすることが可能です。また、mount コマンドは重複したマウントポイントを持たせることができる --bind オプションを実装します。以下のように使用します。
mount --bind old_directory new_directory
上記のコマンドにより、ユーザーはいずれの場所からでもファイルシステムにアクセスできるようになりますが、これは元のディレクトリー内にマウントされているファイルシステムには適用されません。これらのマウントも含めるには、次を実行します。
mount --rbind old_directory new_directory
さらに Red Hat Enterprise Linux 7 では、可能な限り柔軟性を持たせるために、共有サブツリー と呼ばれる機能を実装しています。次の 4 種類のマウントを使用することができます。
共有マウント
共有マウントにより、任意のマウントポイントと全く同一の複製マウントポイントを作成することができます。マウントポイントを共有マウントしてマークすると、元のマウントポイント内のあらゆるマウントが反映されます。マウントポイントのタイプを共有マウントに変更するには、シェルプロンプトで以下を入力します。
mount --make-shared mount_point
代わりに、選択したマウントポイントとその下にあるすべてのマウントポイントのマウントタイプを変更するには、以下を入力します。
mount --make-rshared mount_point
使用例については、例18.4「共有マウントポイントを作成する」 を参照してください。

例18.4 共有マウントポイントを作成する

他のファイルシステムがマウントされる一般的な場所が 2 箇所あります。リムーバルメディア用の /media ディレクトリーと一時的にファイルシステムをマウントする場合の /mnt 所です。共有マウントを使用することで、これら 2 種類のディレクトリーが同じコンテンツを共有できるようになります。これを実行するには、root になり、/media ディレクトリーを shared としてマークします。
~]# mount --bind /media /media
~]# mount --make-shared /media
次に、以下のコマンドを使用して、複製を /mnt ディレクトリーに作成します。
~]# mount --bind /media /mnt
これで /media 内のマウントが /mnt 内にも表示されることが確認できます。たとえば、CD-ROM ドライブに何らかのコンテンツを持つメディアがあり、/media/cdrom/ ディレクトリーが存在する場合は次のコマンドを実行します。
~]# mount /dev/cdrom /media/cdrom
~]# ls /media/cdrom
EFI  GPL  isolinux  LiveOS
~]# ls /mnt/cdrom
EFI  GPL  isolinux  LiveOS
同様に、/mnt ディレクトリー内にマウントしているファイルシステムが /media 内に反映されていることを確認できます。たとえば、/mnt/flashdisk/ というディレクトリーが存在し、また何らかのコンテンツを持つ USB フラッシュドライブが /dev/sdc1 デバイスを使用するとした場合、この USB をプラグインしてから次を入力します。
~]# mount /dev/sdc1 /mnt/flashdisk
~]# ls /media/flashdisk
en-US  publican.cfg
~]# ls /mnt/flashdisk
en-US  publican.cfg
スレーブマウント
スレーブマウントにより、所定のマウントポイントの複製を作成する際に制限を課すことができます。マウントポイントをスレーブマウントとしてマークすると、元のマウントポイント内のすべてのマウントがそれに反映されますが、スレーブマウント内のマウントはオリジナルには反映されません。マウントポイントのタイプをスレーブマウントに変更するには、シェルプロンプトで次を入力します。
mount --make-slave mount_point
選択したマウントポイントとその下にあるすべてのマウントポイントのマウントタイプを変更することも可能です。次のように入力します。
mount --make-rslave mount_point
使用例については 例18.5「スレーブのマウントポイントを作成する」 を参照してください。

例18.5 スレーブのマウントポイントを作成する

/media ディレクトリーの内容が /mnt ディレクトリーでも表示されるようにしながら、 /mnt ディレクトリー内のマウントは /media ディレクトリーには反映させない方法を以下に示します。root になり、まず /media ディレクトリーに shared のマークを付けます。
~]# mount --bind /media /media
~]# mount --make-shared /media
次に /media ディレクトリーの複製を /mnt ディレクトリーに作成して、今度は slave のマークを付けます。
~]# mount --bind /media /mnt
~]# mount --make-slave /mnt
/media 内のマウントが /mnt でも表示されるかを確認します。たとえば、CD-ROM ドライブに何らかの内容を持つメディアがあり、/media/cdrom/ というディレクトリーが存在するとします。次のコマンドを実行します。
~]# mount /dev/cdrom /media/cdrom
~]# ls /media/cdrom
EFI  GPL  isolinux  LiveOS
~]# ls /mnt/cdrom
EFI  GPL  isolinux  LiveOS
また、/mnt ディレクトリー内にマウントされているファイルシステムが /media に反映されていることを確認します。たとえば、 /dev/sdc1 デバイスを使用する何らかのコンテンツを含む USB フラッシュドライブをプラグインしており、かつ /mnt/flashdisk/ ディレクトリーが存在している場合に以下を入力します。
~]# mount /dev/sdc1 /mnt/flashdisk
~]# ls /media/flashdisk
~]# ls /mnt/flashdisk
en-US  publican.cfg
プライベートマウント
プライベートマウントはマウントのデフォルトタイプであり、共有マウントやスレーブマウントと異なり、伝播イベントの受信や転送は一切行いません。マウントポイントを明示的にプライベートマウントにするには、シェルプロンプトで以下を入力します。
mount --make-private mount_point
または、選択したマウントポイントとその下にあるすべてのマウントポイントを変更することもできます。
mount --make-rprivate mount_point
使用例については 例18.6「プライベートマウントポイントを作成する」 を参照してください。

例18.6 プライベートマウントポイントを作成する

例18.4「共有マウントポイントを作成する」 の状況を考慮に入れ、共有マウントポイントが次のコマンドを使って root で以前に作成されていると仮定します。
~]# mount --bind /media /media
~]# mount --make-shared /media
~]# mount --bind /media /mnt
/mnt ディレクトリーに private のマークを付けるには次のように入力します。
~]# mount --make-private /mnt
これで /media 内のマウントはいずれも /mnt 内では表示されないことを確認できるようになります。たとえば、CD-ROM デバイスに何らかのコンテンツを含むメディアがあり、/media/cdrom/ ディレクトリーが存在する場合に、次のコマンドを実行します。
~]# mount /dev/cdrom /media/cdrom
~]# ls /media/cdrom
EFI  GPL  isolinux  LiveOS
~]# ls /mnt/cdrom
~]#
また、/mnt ディレクトリー内にマウントしているファイルシステムは /media ディレクトリーには反映されないことを確認することもできます。たとえば、/dev/sdc1 デバイスを使用し、何らかのコンテンツを含む USB フラッシュドライブをプラグインして、/mnt/flashdisk/ ディレクトリーが存在する場合に以下を入力します。
~]# mount /dev/sdc1 /mnt/flashdisk
~]# ls /media/flashdisk
~]# ls /mnt/flashdisk
en-US  publican.cfg
バインド不能のマウント
任意のマウントポイントに対して一切複製が行われないようにするには、バインド不能のマウントを使用します。マウントポイントのタイプをバインド不能のマウントに変更するには、次のようにシェルプロンプトに入力します。
mount --make-unbindable mount_point
または、選択したマウントポイントとその下にあるすべてのマウントポイントを変更することもできます。
mount --make-runbindable mount_point
使用例については 例18.7「バインド不能のマウントポイントを作成する」 を参照してください。

例18.7 バインド不能のマウントポイントを作成する

/media ディレクトリーが共有されないようにする場合は、root として、シェルプロンプトに以下を入力します。
~]# mount --bind /media /media
~]# mount --make-unbindable /media
これにより、これ以降にこのマウントの複製を作成しようとするとエラーが出て失敗します。
~]# mount --bind /media /mnt
mount: wrong fs type, bad option, bad superblock on /media,
missing codepage or helper program, or other error
In some cases useful info is found in syslog - try
dmesg | tail  or so