MOUNT
Section: Linux Programmer's Manual (2)
Updated: 2004-05-18
Index
JM Home Page
roff page
名前
mount, umount, umount2 - ファイルシステムをマウント/アンマウントする
書式
#include <sys/mount.h>
int mount(const char *source, const char *target,
const char *filesystemtype, unsigned long mountflags,
const void *data);
int umount(const char *target);
int umount2(const char *target, int flags);
説明
mount()
は
source
で指定されたファイルシステム (デバイス名であることが多いが、
ディレクトリ名やダミーの場合もある) を
target
で指定されたディレクトリに結びつける。
umount()
と
umount2()
は
target
にマウントされている (最上位の) ファイルシステムを外す。
ファイルシステムのマウント/アンマウントを行うには、
適切な権限 (Linux では
CAP_SYS_ADMIN
ケーパビリティ) が必要である。
Linux 2.4 以降、ひとつのファイルシステムを複数のマウントポイントに
結びつけることができ、同じマウントポイントに複数のマウントをスタック
させることもできる。
引き数
filesystemtype
としてカーネルが対応している値は、
/proc/filesystems
で参照できる (例えば "minix",
"ext2", "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, mountflags, data
引き数は無視される。
- MS_DIRSYNC (Linux 2.5.19 以降)
-
このファイルシステムへのディレクトリ変更を同期的に行う。
(この特性は個々のディレクトリ、または
chattr(8)
を使った部分木毎に設定できる。)
- MS_MANDLOCK
-
このファイルシステムのファイルに対して強制ロックを認める。
(強制ロックを有効にするには、
fcntl(2)
で述べられている方法でファイル単位で許可をしなければならない)
- MS_MOVE
-
部分木を移動する。
source
にはすでに存在するマウントポイントを指定し、
target
には新しい場所を指定する。
移動はアトミックである。
操作の実行中、部分ツリーがアンマウントされることはない。
filesystemtype, mountflags, data
引き数は無視される。
- MS_NOATIME
-
このファイルシステムの (全ての種類の) ファイルのアクセス時刻を更新しない。
- MS_NODEV
-
このファイルシステムのデバイス (スペシャルファイル) へのアクセスを許可しない。
- 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)
のように、最後の内容修正以降にファイルがいつ読み出されたかを知る
必要があるプログラムで有用である。
- MS_REMOUNT
-
すでに存在するマウントを再マウントする。
これにより、すでに存在するマウントの
mountflags
と
data
を、一度アンマウントしてから再マウントするという作業をせずに
変更できる。
source
と
target
は最初の
mount()
呼び出しと同じ値を指定する必要がある。
filesystemtype
は無視される。
mountflags
のうち
MS_RDONLY,
MS_SYNCHRONOUS,
MS_MANDLOCK
は変更可能である。
カーネル 2.6.16 より前では、
MS_NOATIME,
MS_NODIRATIME
も変更可能であった。
カーネル 2.4 より前では、上記に加えて、
MS_NOSUID,
MS_NODEV,
MS_NOEXEC
も変更可能であった。
- 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)
を参照のこと。
Linux 2.1.116 から、
umount2()
システムコールが追加された。これは
umount()
と同様に
target をアンマウントするが、
flags
が追加されており、操作の際の振る舞いを制御できる。
- MNT_FORCE (2.1.116 以降)
-
使用中 (busy) でも強制的にアンマウントを実行する。
これを行うとデータを失う可能性がある。
(NFS マウント専用)
- MNT_DETACH (2.4.11 以降)
-
遅延アンマウントを行う。マウントポイントに対する新規のアクセスは
不可能となり、実際のアンマウントはマウントポイントがビジーで
なくなった時点で行う。
- MNT_EXPIRE (Linux 2.6.8 以降)
-
マウントポイントに期限切れの印をつける。
マウントポイントが現在使用中でない場合、このフラグをつけて
umount2()
を初めて呼び出すと
EAGAIN
エラーで失敗するが、マウントポイントには期限切れ (expire)
の印がつけられる。
そのマウントポイントはいずれかのプロセスがアクセスしない限り
期限切れの印がついたままとなる。
もう一度
MNT_EXPIRE
をつけて
umount2()
を呼び出すと、期限切れの印のついたマウントポイントが
アンマウントされる。
このフラグを
MNT_FORCE
もしくは
MNT_DETACH
と同時に指定することはできない。
返り値
成功した場合 0 が返る。失敗した場合 -1 が返り、
errno
がエラーの内容に従って設定される。
エラー
以下に示すエラーは、ファイルシステムに依存しないものである。
それぞれのファイルシステムタイプには固有のエラーが存在する場合があり、
独自の動作をすることもある。詳しくはカーネルのソースを見て欲しい。
- EACCES
-
パスに含まれるディレクトリに検索 (実行) 許可がない
(path_resolution(7)
も参照)。
または、
MS_RONLY
フラグを指定せずに読み込み専用のファイルシステムを
マウントしようとした。
または、ブロックデバイス
source
が
MS_NODEV
オプションでマウントされたファイルシステム上にある。
- EAGAIN
-
MNT_EXPIRE
を指定した
umount2()
の呼び出しで、正常に未使用のファイルシステムに期限切れの印を
つけることができた。
- EBUSY
-
source
は既にマウントされている。
または、書き込み用にオープンされたファイルがあり、
読み込み専用で再マウントすることができない。
または、
target
が使用中 (busy) のため、
target
にマウント/アンマウントできない。
target
が使用中の例としては、あるタスクが動作しているディレクトリ (working
directory) であるとか、別のデバイスのマウントポイントであるとか、
オープンされたファイルが存在する、などがある。
- EFAULT
-
場所を示す引き数のひとつがユーザーのアドレス空間の外を指している。
- EINVAL
-
source
に不正なスーパーブロックがある。
または、
source
が
target
にマウントされていないのに、再マウント
(MS_REMOUNT)
が要求された。
または、
source
がマウントポイントではないか、'/' なのに、移動
(MS_MOVE)
が要求された。
または、
target
がマウントポイントではないのにアンマウントが要求された。
または、
MNT_EXPIRE
を指定した
umount2()
に対して
MNT_DETACH
か
MNT_FORCE
が同時に指定された。
- ELOOP
-
パス名の解決中に登場したリンクが多すぎた。
または、
target
が
source
の子孫なのに移動が要求された。
- EMFILE
-
(ブロックデバイスが必要でない場合)
ダミーデバイスのテーブルが一杯になった。
- ENAMETOOLONG
-
パス名の長さが
MAXPATHLEN
を越えた。
- ENODEV
-
filesystemtype
がカーネル中で定義 (config) されていない。
- ENOENT
-
パス名が空である。もしくは指定されたパスが存在しない。
- ENOMEM
-
カーネルがファイル名やデータをコピーするための空きページを確保できない。
- ENOTBLK
-
(ブロックデバイスが必要だが)
source
がブロックデバイスではない。
- ENOTDIR
-
2 番目の引き数、もしくは 1 番目の引き数の接頭辞がディレクトリではない。
- ENXIO
-
ブロックデバイス
source
のメジャー番号が範囲外である。
- EPERM
-
呼び出し元に必要な権限がない。
準拠
この関数は Linux 固有の関数であり、移植を考慮したプログラムでは
使用すべきでない。
注意
Linux での注意
元々の
umount()
関数は umount(device) の形で呼び出され、
ブロックデバイス以外を指定して呼び出すと
ENOTBLK
を返した。
Linux 0.98p4 で、無名デバイス (anonymous device) に対応するために
umount(dir) の形での呼び出しが加えられた。
Linux 2.3.99-pre7 で、umount(device) は削除され、
umount(dir) だけが残された
(一つのデバイスを複数の位置にマウント出来るようになったため、
デバイスを指定しただけでは不十分だからである)。
元の
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 ビットが
無視されるだけである。
関連項目
path_resolution(7),
mount(8),
umount(8)
Index
- 名前
-
- 書式
-
- 説明
-
- 返り値
-
- エラー
-
- 準拠
-
- 注意
-
- Linux での注意
-
- 関連項目
-
This document was created by
man2html,
using the manual pages.
Time: 04:31:53 GMT, November 19, 2007