Provided by: manpages-ja-dev_0.5.0.0.20221215+dfsg-1_all ![bug](/img/bug.png)
![bug](/img/bug.png)
名前
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/ に書かれている。