15-文件系统的挂载和卸载
14.8 文件系统的挂载和卸载
系统调用 mount()和 umount()运行特权级进程(CAP_SYS_ADMIN)以挂载或卸载文件系统。大多数UNIX实现都提供了这两个系统调用。不过,SUSv3并未对其进行规范,因此其操作也随UNIX实现和文件系统的不同而不同。
在讨论这两个系统调用之前,需要先了解以下3个文件,其中包含了当前已挂载或可挂载的文件系统信息。
- 通过 Linux 专有的虚拟文件/proc/mounts,可查看当前已挂载文件系统的列表。/proc/mounts是内核数据结构的接口,因此总是包含已挂载文件系统的精确信息。
随着引入了前述的每进程挂载命名空间特性,如今,每个进程都拥有一个/proc/PID/ mounts文件,其中会列出组成进程挂载空间的挂载点,而/proc/mounts只是指向/proc/self/mounts的符号链接。
- mount(8)和 umount(8)命令会自动维护/etc/mtab文件,该文件所包含的信息与/proc/mounts的内容相类似,只是略微详细一些。特别是,etc/mtab包含了传递给mount(8)的文件系统专有选项,这并未在/proc/mounts中出现。但是,因为系统调用mount()和umount()并不更新/etc/mtab,如果某些挂载或卸载了设备的应用程序没有更新该文件,那么/etc/mtab可能会变得不准确。
- /etc/fstab(由系统管理员手工维护)包含了对系统支持的所有文件系统的描述,该文件可供mount(8)、umount(8)以及fsck(8)所用。
/proc/mounts、/etc/mtab和/etc/fstab的格式相同,请参考 fstab(5)手册页。以下示例摘自/proc/mounts中的一条记录(一行):
这条记录包含了6个字段。
1. 已挂载设备名。
2. 设备的挂载点。
3. 文件系统类型。
4. 挂载标志。上例的rw表示以可读写方式挂载文件系统。
5. 一个数字,dump(8)会使用其来控制对文件系统的备份操作。只有/etc/fstab文件才会用到该字段和第6个字段,在/proc/mounts和/etc/mtab中,该字段总是为0。
6. 一个数字,在系统引导时,用于控制fsck(8)对文件系统的检查顺序。
getfsent(3)和getmntent(3)手册页记录了用于从上述文件中读取记录的函数。