遵循规范

这些功能是特定于Linux的,不应在打算移植的程序中使用。

名称

umount,umount2-卸载文件系统

说明

umount()和umount2()删除挂载在目标上的(最顶部)文件系统的附件。

卸载文件系统需要适当的特权(Linux:CAP_SYS_ADMIN功能)。

Linux 2.1.116添加了umount2()系统调用,该系统调用与umount()一样卸载目标,但允许使用附加标志来控制操作的行为:

MNT_FORCE(since Linux 2.1.116)
在尝试卸载之前,请文件系统中止挂起的请求。这可以使卸载完成,而无需等待无法访问的服务器,但是可能导致数据丢失。如果在中止请求之后,某些进程仍具有对文件系统的有效引用,则卸载仍将失败。从Linux 4.12开始,仅以下文件系统支持MNT_FORCE:9p(自Linux 2.6.16起),ceph(自Linux 2.6.34起),cifs(自Linux 2.6.12起),保险丝(自Linux 2.6.16起),光泽(自Linux 3.11起)和NFS(自Linux 2.1.116起)。
MNT_DETACH(since Linux 2.4.11)
执行延迟卸载:使挂载点不可用于新访问,立即将文件系统以及在其下挂载的所有文件系统彼此以及与挂载表断开连接,并在挂载点不再繁忙时实际执行挂载。
MNT_EXPIRE(since Linux 2.6.8)
将安装点标记为已过期。如果当前未使用安装点,则使用此标志的umount2()的初始调用将失败,并显示错误EAGAIN,但会将安装点标记为已过期。只要任何进程都无法访问挂载点,该挂载点就会保持过期状态。指定MNT_EXPIRE的第二个umount2()调用将卸载过期的安装点。不能使用MNT_FORCE或MNT_DETACH指定此标志。
UMOUNT_NOFOLLOW(since Linux 2.6.34)
如果它是符号链接,请不要取消引用目标。此标志允许在set-user-id-root程序中避免安全问题,该程序允许非特权用户卸载文件系统。
UMOUNT - Linux手册页

Linux程序员手册 第2部分
更新日期: 2020-06-09

错误说明

下面给出的错误值是由文件系统类型无关的错误引起的。每种文件系统类型可能都有其自己的特殊错误和自身的特殊行为。有关详细信息,请参见Linux内核源代码。

EAGAIN
调用umount2()并指定MNT_EXPIRE成功将不繁忙的文件系统标记为已过期。
EBUSY
无法挂载目标,因为它很忙。
EFAULT
目标点位于用户地址空间之外。
EINVAL
目标不是挂载点。
EINVAL
使用MNT_EXPIRE和MNT_DETACH或MNT_FORCE调用umount2()。
EINVAL(since Linux 2.6.34)
在标志中使用无效的标志值调用了umount2()。
ENAMETOOLONG
路径名比MAXPATHLEN长。
ENOENT
路径名为空或不存在的组件。
ENOMEM
内核无法分配空闲页面以将文件名或数据复制到其中。
EPERM
呼叫者没有所需的特权。

返回值

成功时,返回零。如果出错,则返回-1,并正确设置errno。

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/

另外参见

mount(2),mount_namespaces(7),path_resolution(7),mount(8),umount(8)

语法

#include <sys/mount.h>

int umount(const char *target);

int umount2(const char *target, int flags);

备注

umount() and shared mount points

共享的安装点导致安装点上的所有安装活动(包括umount()操作)都转发到对等组中的每个共享安装点以及该对等组的每个从属安装。这意味着一组共享安装中的任何对等方的umount()都将导致其所有对等方被卸载,并且其所有从属也被卸载。

在默认情况下共享每个安装点的系统上,这种卸载活动的传播尤其令人惊讶。在这样的系统上,将文件系统的根目录递归绑定到子目录上,然后再用MNT_DETACH卸载该子目录,将导致懒散地卸载mount名称空间中的每个装载。

为确保umount()不会以这种方式传播,可以在调用umount()之前,使用带有mount_flags参数(包括MS_REC和MS_PRIVATE)的mount(2)调用来重新装入安装点。

Historical details

原始的umount()函数称为umount(device),并且在使用块设备以外的其他函数调用时将返回ENOTBLK。在Linux 0.98p4中,添加了调用umount(dir),以支持匿名设备。在Linux 2.3.99-pre7中,调用umount(device)被删除,仅留下umount(dir)(因为现在可以将设备挂载在多个位置,因此指定设备不足)。

版本

从2.11版开始,glibc中提供了MNT_DETACH和MNT_EXPIRE。

日期:2019-08-20 17:59:36 来源:oir作者:oir