Provided by: manpages-ja-dev_0.5.0.0.20221215+dfsg-1_all
名前
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) を指定するこ とができる (マジックナンバーは、 カーネルバージョン 2.4 より前では必須であったが、 現在は 必要なく、指定されても無視される)。 mountflags の下位 16 ビットにマウントフラグを指定す る。 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 は無視される。 引き数 mountflags と data は、意図的に変更するもの以 外は、 元の mount() の呼び出しで使用した値と一致するようにすべきである。 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 に適切な値がセットされる。
エラー
以下に示すエラーは、ファイルシステムに依存しないものである。 それぞれのファイルシステムタ イプには固有のエラーが存在する場合があり、 独自の動作をすることもある。詳しくは 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 は、一つの名前空間がシ ステム上の全プロセスで 共有される状況とみなすことができる。) fork(2) 経由で作成された子プロセスは親プロセスのマウント名前空間を共有する。 execve(2) の 前後でマウント名前空間は保持される。 プロセスは自分用 (private) のマウント名前空間を持つことができる。 自分用の名前空間を持つこ とができるのは、 そのプロセスが clone(2) CLONE_NEWNS フラグを使って作成された場合と、 そ のプロセスが CLONE_NEWNS フラグ付きで unshare(2) を呼び出した場合である。 前者の場合、作 成されたプロセスの新しい名前空間は clone(2) を呼び出したプロセスの名前空間の「コピー」で初 期化される。 後者の場合、 unshare(2) を呼び出すと、呼び出し元のプロセスのマウント名前空間 が、 それまでは他のプロセスと共有していた名前空間の自分用のコピーとなる。 これにより、呼び 出し元のプロセスがこれ以後に行うマウント/アンマウントは 他のプロセスから見えなくなる (ただ し、呼び出し元のプロセスが unshare(2) の呼び出し以降に作成した子プロセスには見える)。 ま た、その逆の、他のプロセスが行ったマウント/アンマウントも呼び出し元のプロセスには 見えなく なる。 Linux 独自のファイル /proc/PID/mounts では、指定された ID を持つプロセスのマウント名前空間 における マウントポイントのリストが公開されている。詳細は proc(5) を参照のこと。
関連項目
umount(2), namespaces(7), path_resolution(7), lsblk(8), mount(8), umount(8)
この文書について
この man ページは Linux man-pages プロジェクトのリリース 3.79 の一部 である。プロジェクト の説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。