umount, umount2 -
ファイルシステムをアンマウントする
#include <sys/mount.h>
int umount(const char *target);
int umount2(const char *target, int flags);
umount() と
umount2() は
target
にマウントされている
(最上位の)
ファイルシステムを外す。
ファイルシステムのアンマウントを行うには、
適切な権限 (Linux では
CAP_SYS_ADMIN ケーパビリティ)
が必要である。
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
と同時に指定することはできない。
- UMOUNT_NOFOLLOW (Linux 2.6.34 以降)
- target
がシンボリックリンクの場合に、シンボリックリンクの展開を行わない。
このフラグを使うと、
root に set-user-ID
されたプログラムにおいて、
非特権ユーザがファイルシステムのアンマウントをできてしまうという
セキュリティ問題を回避することができる。
返り値¶
成功した場合、0
が返される。
失敗した場合、 -1
が返され、
errno
に適切な値がセットされる。
エラー¶
以下に示すエラーは、ファイルシステムに依存しないものである。
それぞれのファイルシステムタイプには固有のエラーが存在する場合があり、
独自の動作をすることもある。詳しくはカーネルのソースを見て欲しい。
- EAGAIN
- MNT_EXPIRE を指定した
umount2()
の呼び出しで、正常に未使用のファイルシステムに期限切れの印を
つけることができた。
- EBUSY
- 使用中 (busy)
のため、 target
をアンマウントできなかった。
- EFAULT
- target
がユーザアドレス空間の外を指している。
- EINVAL
- target
がマウントポイントではない。
または、 umount2() で、
MNT_EXPIRE が指定された
umount2() で、 MNT_DETACH か
MNT_FORCE
が同時に指定された。
- ENAMETOOLONG
- パス名の長さが
MAXPATHLEN
より長かった。
- ENOENT
- パス名が空である。もしくは指定されたパスが存在しない。
- ENOMEM
- カーネルがファイル名やデータをコピーするための空きページを確保できなかった。
- EPERM
- 呼び出し元が必要な権限を持っていない。
バージョン¶
MNT_DETACH と
MNT_EXPIRE
はバージョン 2.11 以降の
glibc でのみ利用できる。
この関数は Linux
固有の関数であり、移植を考慮したプログラムでは
使用すべきでない。
元々の
umount() 関数は
umount(device)
の形で呼び出され、
ブロックデバイス以外を指定して呼び出すと
ENOTBLK を返した。 Linux 0.98p4
で、無名デバイス (anonymous
device) に対応するために
umount(dir)
の形での呼び出しが加えられた。
Linux 2.3.99-pre7 で、
umount(device)
は削除され、
umount(dir)
だけが残された
(一つのデバイスを複数の位置にマウント出来るようになったため、
デバイスを指定しただけでは不十分だからである)。
関連項目¶
mount(2),
path_resolution(7),
mount(8),
umount(8)
この文書について¶
この man ページは Linux
man-pages
プロジェクトのリリース
3.41 の一部
である。プロジェクトの説明とバグ報告に関する情報は
http://www.kernel.org/doc/man-pages/
に書かれている。