MOUNT(2) | Linux Programmer's Manual | MOUNT(2) |
名前
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 で指定されたディレクトリに結びつける。- MS_BIND (Linux 2.4 以降)
- バインドマウントを行う。これはファイルやディレクトリの部分木をファイルシステム内部の別の場所で見えるようにするものである。バインドマウントを使うと、ファイルシステムをまたいで chroot(2) jail を構成することが可能になる。引き数 filesystemtype と data は無視される。 Linux 2.6.26 より前では mountflags も無視されていた (バインドマウントでは、マウントポイントとなるファイルシステムと同じマウントオプションが使用される)。
- 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 を、一度アンマウントしてから再マウントするという作業をせずに変更できる。
target は最初の
mount() 呼び出しと同じ値を指定する必要がある。
source と
filesystemtype は無視される。
- 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 に適切な値がセットされる。エラー
以下に示すエラーは、ファイルシステムに依存しないものである。それぞれのファイルシステムタイプには固有のエラーが存在する場合があり、独自の動作をすることもある。詳しくは Linux カーネルのソースを見て欲しい。- 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 がマウントポイントではないか、'/'なのに、移動 ( MS_MOVE) が要求された。
- ELOOP
- パス名の解決中に登場したリンクが多すぎた。または、 target が source の子孫なのに移動が要求された。
- EMFILE
- (ブロックデバイスが必要でない場合) ダミーデバイスのテーブルが一杯になった。
- ENAMETOOLONG
- パス名の長さが MAXPATHLEN より長かった。
- ENODEV
- filesystemtype がカーネル中で定義 (config) されていない。
- ENOENT
- パス名が空である。もしくは指定されたパスが存在しない。
- ENOMEM
- カーネルがファイル名やデータをコピーするための空きページを確保できなかった。
- ENOTBLK
- (ブロックデバイスが必要だが) source がブロックデバイスではない。
- ENOTDIR
- target か、 source のプレフィックスがディレクトリではない。
- ENXIO
- ブロックデバイス source のメジャー番号が範囲外である。
- EPERM
- 呼び出し元が必要な権限を持っていない。
バージョン
MS_DIRSYNC, MS_MOVE, MS_REC, MS_RELATIME, MS_STRICTATIME の定義が glibc のヘッダに追加されたのはバージョン 2.12 においてである。準拠
この関数は 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 は、一つの名前空間がシステム上の全プロセスで共有される状況とみなすことができる。)関連項目
umount(2), namespaces(7), path_resolution(7), mount(8), umount(8)この文書について
この man ページは Linux man-pages プロジェクトのリリース 3.51 の一部である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。2012-07-05 | Linux |