MOUNT
Section: Linux Programmer's Manual (2)
Updated: 2009-06-26
Index
JM Home Page
roff page
名前
mount - ファイルシステムをマウント/アンマウントする
書式
#include <sys/mount.h>
int mount(const char *source, const char *target,
const char *filesystemtype, unsigned long mountflags,
const void *data);
説明
mount()
は
source
で指定されたファイルシステム (デバイス名であることが多いが、
ディレクトリ名やダミーの場合もある) を
target
で指定されたディレクトリに結びつける。
ファイルシステムのマウントを行うには、
適切な権限 (Linux では
CAP_SYS_ADMIN
ケーパビリティ) が必要である。
Linux 2.4 以降、ひとつのファイルシステムを複数のマウントポイントに
結びつけることができ、同じマウントポイントに複数のマウントをスタック
させることもできる。
引き数
filesystemtype
としてカーネルが対応している値は、
/proc/filesystems
で参照できる (例えば "minix", "ext2", "ext3", "jfs", "xfs", "reiserfs",
"msdos", "proc", "nfs", "iso9660" 等)。
適切なモジュールが読み込まれると、さらに別の値が利用可能になるかもしれない。
引き数
mountflags
は、先頭 16 ビットはマジックナンバー 0xC0ED (MS_MGC_VAL) で、
残りの 16 ビットがマウントフラグである。
マジックナンバーは、カーネルバージョン 2.4 より前では必須であったが、
現在は必要なく、指定されても無視される。
マウントフラグは libc4 と libc5 では <linux/fs.h> 、
glibc2 では <sys/mount.h> で定義されており、以下の通りである:
- MS_BIND (Linux 2.4 以降)
-
バインドマウントを行う。これはファイルやディレクトリの部分木を
ファイルシステム内部の別の場所で見えるようにするものである。
バインドマウントを使うと、ファイルシステムをまたいで
chroot(2)
jail を構成することが可能になる。
引き数
filesystemtype
と
data
は無視される。
Linux 2.6.26 より前では
mountflags
も無視されていた
(バインドマウントでは、マウントポイントとなるファイルシステムと
同じマウントオプションが使用される)。
Linux 2.6.26 以降では、バインドマウントを行う際に
MS_RDONLY
フラグは無視されない。
- MS_DIRSYNC (Linux 2.5.19 以降)
-
このファイルシステムへのディレクトリ変更を同期的に行う。
(この特性は個々のディレクトリ、または
chattr(1)
を使った部分木毎に設定できる。)
- MS_MANDLOCK
-
このファイルシステムのファイルに対して強制ロックを認める。
(強制ロックを有効にするには、
fcntl(2)
で述べられている方法でファイル単位で許可をしなければならない)
- MS_MOVE
-
部分木を移動する。
source
にはすでに存在するマウントポイントを指定し、
target
には新しい場所を指定する。
移動はアトミックである。
操作の実行中、部分ツリーがアンマウントされることはない。
filesystemtype, mountflags, data
引き数は無視される。
- MS_NOATIME
-
このファイルシステムの (全ての種類の) ファイルのアクセス時刻を更新しない。
- MS_NODEV
-
このファイルシステムのデバイス (スペシャルファイル) へのアクセスを許可しない。
- MS_NODIRATIME
-
このファイルシステムのディレクトリのアクセス時刻を更新しない。
このフラグは
MS_NOATIME
で提供される機能のサブセットを提供する。つまり、
MS_NOATIME
では
MS_NODIRATIME
が暗黙のうち設定される。
- MS_NOEXEC
-
このファイルシステムにあるプログラムの実行を許可しない。
- MS_NOSUID
-
このファイルシステムのプログラムを実行するときに、
set-user-ID ビットと set-group-ID ビットを無視する。
- MS_RDONLY
-
ファイルシステムを読み込み専用でマウントする。
- MS_RELATIME (Linux 2.6.20 以降)
-
このファイルシステム上のファイルがアクセスされた際、
そのファイルの最終アクセス時刻 (atime) の現在値が
最終修正時刻 (mtime) や最終状態変更時刻 (ctime) と
等しいか小さい場合にのみ、atime を更新する。
このオプションは、
mutt(1)
のように、最後の内容修正以降にファイルがいつ読み出されたかを知る
必要があるプログラムで有用である。
Linux 2.6.30 以降では、
MS_NOATIME
が指定されていない場合には、このフラグの動作が
カーネルのデフォルト動作となっており、
Linux 2.6.30 より前の動作をさせるためには
MS_STRICTATIME
フラグを指定する必要がある。
これに加えて、Linux 2.6.30 以降では、
ファイルの最終アクセス時刻が 1 日以上前の場合、
ファイルの最終アクセス時刻は常に更新される。
- MS_REMOUNT
-
すでに存在するマウントを再マウントする。
これにより、すでに存在するマウントの
mountflags
と
data
を、一度アンマウントしてから再マウントするという作業をせずに
変更できる。
source
と
target
は最初の
mount()
呼び出しと同じ値を指定する必要がある。
filesystemtype
は無視される。
mountflags
のうち
MS_RDONLY,
MS_SYNCHRONOUS,
MS_MANDLOCK
は変更可能である。
カーネル 2.6.16 より前では、
MS_NOATIME,
MS_NODIRATIME
も変更可能であった。
カーネル 2.4.10 より前では、上記に加えて、
MS_NOSUID,
MS_NODEV,
MS_NOEXEC
も変更可能であった。
- MS_SILENT (Linux 2.6.17 以降)
-
カーネルのログ内のある種の
(printk())
警告メッセージの表示を抑制する。
このフラグは、名前が不適切で廃止された
MS_VERBOSE
フラグ (Linux 2.4.12 以降で利用可能) を置き換えるもので、同じ意味を持つ。
- MS_STRICTATIME (Linux 2.6.30 以降)
-
このファイルシステムがアクセスされた際に最終アクセス時刻 (atime)
を常に更新する (Linux 2.6.30 より前では、これがデフォルトの動作
であった)。
このフラグを指定することで、
MS_NOATIME
と
MS_RELATIME
の両フラグを設定した際の影響を上書きすることができる。
- MS_SYNCHRONOUS
-
ファイルシステムに対して同期的に書き込みを行う。
(このファイルシステムの全てのオープンされたファイルに対して、
open(2)
のフラグに
O_SYNC
を指定したような動作となる)
Linux 2.4 以降では、
MS_NODEV, MS_NOEXEC, MS_NOSUID
はマウントポイント単位で指定できる。
カーネル 2.6.16 以降では、
MS_NOATIME
と
MS_NODIRATIME
もマウントポイント単位で指定できる。
また、
MS_RELATIME
フラグもマウントポイント単位で設定できる。
引き数
data
がどのように解釈されるかは、ファイルシステムによって異なる。
たいていは、指定されたファイルシステムで利用可能なオプションが
コンマ区切りで並べられた文字列である。
各ファイルシステムに対して指定可能なオプションの詳細については
mount(8)
を参照のこと。
返り値
成功した場合 0 が返る。失敗した場合 -1 が返り、
errno
がエラーの内容に従って設定される。
エラー
以下に示すエラーは、ファイルシステムに依存しないものである。
それぞれのファイルシステムタイプには固有のエラーが存在する場合があり、
独自の動作をすることもある。詳しくはカーネルのソースを見て欲しい。
- EACCES
-
パスに含まれるディレクトリに検索 (実行) 許可がない
(path_resolution(7)
も参照)。
または、
MS_RONLY
フラグを指定せずに読み込み専用のファイルシステムを
マウントしようとした。
または、ブロックデバイス
source
が
MS_NODEV
オプションでマウントされたファイルシステム上にある。
- EBUSY
-
source
は既にマウントされている。
または、書き込み用にオープンされたファイルがあり、
読み込み専用で再マウントすることができない。
または、
target
が使用中 (busy) のため、
target
にマウントできない。
target
が使用中の例としては、あるタスクが動作しているディレクトリ (working
directory) であるとか、別のデバイスのマウントポイントであるとか、
オープンされたファイルが存在する、などがある。
- EFAULT
-
場所を示す引き数のひとつがユーザーのアドレス空間の外を指している。
- EINVAL
-
source
に不正なスーパーブロックがある。
または、
source
が
target
にマウントされていないのに、再マウント
(MS_REMOUNT)
が要求された。
または、
source
がマウントポイントではないか、aq/aq なのに、移動
(MS_MOVE)
が要求された。
- ELOOP
-
パス名の解決中に登場したリンクが多すぎた。
または、
target
が
source
の子孫なのに移動が要求された。
- EMFILE
-
(ブロックデバイスが必要でない場合)
ダミーデバイスのテーブルが一杯になった。
- ENAMETOOLONG
-
パス名の長さが
MAXPATHLEN
を越えた。
- ENODEV
-
filesystemtype
がカーネル中で定義 (config) されていない。
- ENOENT
-
パス名が空である。もしくは指定されたパスが存在しない。
- ENOMEM
-
カーネルがファイル名やデータをコピーするための空きページを確保できない。
- ENOTBLK
-
(ブロックデバイスが必要だが)
source
がブロックデバイスではない。
- ENOTDIR
-
target
か、
source
のプレフィックスがディレクトリではない。
- ENXIO
-
ブロックデバイス
source
のメジャー番号が範囲外である。
- EPERM
-
呼び出し元に必要な権限がない。
準拠
この関数は Linux 固有の関数であり、移植を考慮したプログラムでは
使用すべきでない。
元の
MS_SYNC
フラグは、別の
MS_SYNC
が <mman.h> に追加されたので
1.1.69 から
MS_SYNCHRONOUS
に名前が変わった。
Linux 2.4 より前のバージョンでは、
MS_NOSUID
オプション付きでマウントされたファイルシステム上の
set-UID や set-GID のプログラムを実行しようとすると、
EPERM
エラーとなった。
Linux 2.4 以降では、このような場合は set-UID ビットや set-GID ビットが
無視されるだけである。
プロセス単位の名前空間
カーネル 2.4.19 以降の Linux では、プロセス単位のマウント名前空間
(mount namespace) が提供されている。マウント名前空間とは、
あるプロセスに見えているファイルシステムのマウントの集合である。
マウントポイントの名前空間は複数のプロセスで共有することができ、
普通は共有されている。
一つのプロセスによる名前空間の変更 (すなわち、マウントやアンマウント) は
同じ名前空間を共有する他の全てのプロセスにも見える。
(2.4.19 より前の Linux は、一つの名前空間がシステム上の全プロセスで
共有される状況とみなすことができる。)
fork(2)
経由で作成された子プロセスは親プロセスのマウント名前空間を共有する。
execve(2)
の前後でマウント名前空間は保持される。
プロセスは自分用 (private) のマウント名前空間を持つことができる。
自分用の名前空間を持つことができるのは、
そのプロセスが
clone()
CLONE_NEWNS
フラグを使って作成された場合と、
そのプロセスが
CLONE_NEWNS
フラグ付きで
unshare(2)
を呼び出した場合である。
前者の場合、作成されたプロセスの新しい名前空間は
clone()
を呼び出したプロセスの名前空間の「コピー」で初期化される。
後者の場合、
unshare(2)
を呼び出すと、呼び出し元のプロセスのマウント名前空間が、
それまでは他のプロセスと共有していた名前空間の自分用のコピーとなる。
これにより、呼び出し元のプロセスがこれ以後に行うマウント/アンマウントは
他のプロセスから見えなくなる
(ただし、呼び出し元のプロセスが
unshare(2)
の呼び出し以降に作成した子プロセスには見える)。
また、その逆の、他のプロセスが行ったマウント/アンマウントも呼び出し元のプロセスには
見えなくなる。
Linux 独自のファイル
/proc/PID/mounts
では、指定された ID を持つプロセスのマウント名前空間における
マウントポイントのリストが公開されている。詳細は
proc(5)
を参照のこと。
関連項目
umount(2),
path_resolution(7),
mount(8),
umount(8)
Index
- 名前
-
- 書式
-
- 説明
-
- 返り値
-
- エラー
-
- 準拠
-
- プロセス単位の名前空間
-
- 関連項目
-
This document was created by
man2html,
using the manual pages.
Time: 03:26:49 GMT, April 25, 2010