umount(2) ファイルシステムをアンマウントする

Other Alias

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 に適切な値がセットされる。

エラー

以下に示すエラーは、ファイルシステムに依存しないものである。 それぞれのファイルシステムタイプには固有のエラーが存在する場合があり、 独自の動作をすることもある。詳しくは Linux カーネルのソースを見て欲しい。
EAGAIN
MNT_EXPIRE を指定した umount2() の呼び出しで、正常に未使用のファイルシステムに期限切れの印を つけることができた。
EBUSY
使用中 (busy) のため、 target をアンマウントできなかった。
EFAULT
target がユーザアドレス空間の外を指している。
EINVAL
target がマウントポイントではない。
EINVAL
MNT_EXPIRE が指定された umount2() で、 MNT_DETACHMNT_FORCE が同時に指定された。
EINVAL (Linux 2.6.34 以降)
flags に無効なフラグが指定されて umount2() が呼び出された。
ENAMETOOLONG
パス名の長さが MAXPATHLEN より長かった。
ENOENT
パス名が空である。もしくは指定されたパスが存在しない。
ENOMEM
カーネルがファイル名やデータをコピーするための空きページを確保できなかった。
EPERM
呼び出し元が必要な権限を持っていない。

バージョン

MNT_DETACHMNT_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) だけが残された (一つのデバイスを複数の位置にマウント出来るようになったため、 デバイスを指定しただけでは不十分だからである)。

この文書について

この man ページは Linux man-pages プロジェクトのリリース 3.65 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。