14.10 文件系统挂载
挂载基础
挂载首先是需要管理员权限的,而且必须是目标已经存在才能挂载并覆盖它。然后 mount
命令是挂载,umount
是解除挂载。
Linux 中有三个文件包含了挂载信息:
- /proc/mounts 包含了文件系统的挂载信息。因为 Linux 现在支持了每个进程有不同于系统的文件系统,所以 /proc/mounts 被实现为指向 /proc/self/mounts 的一个符号链接。
- /etc/mtab 文件由 mount(8) 和 umount(8) 来维护。
- /etc/fstab 由系统管理员来维护,其中指定的挂载项目会在 systemd 启动其他服务前执行。
创建 tmpfs 文件系统
tmpfs 并不只是把数据写到内存那么简单,它也是一个虚拟文件系统,因而在内存不足时,依然可以将文件写到交换中。tmpfs 除了用来把内存作为硬盘加速计算之外,也被用于 System V 共享内存和共享匿名内存映射、POSIX 共享内存和 POSIX 信号量。
以下代码是创建 tmpfs 文件系统并挂载到 /tmp。这里的 mytmpfs 是挂载源,但是因为是 tmpfs,所以这里只充当名称的作用,并不是从这个路径挂载。
sudo mount -t tmpfs -o size=1G mytmpfs /tmp
默认的 tmpfs 占用内存的一半,在我的 8G 内存的 wsl 上,不加参数 size=
得到的文件系统大小为 3.9G,这可以通过 df -h
来看到。
可以用 sudo umount /tmp
来解除挂载。
挂载选项
略。
高级挂载特性
内核版本 2.4 之后,允许在多个挂载点挂载同一个文件系统。
内核版本 2.4 之后,允许在同一个挂载点挂载多次,就像函数调用一样,后来的挂载会覆盖之前的挂载,卸载后又能看到之前的挂载内容。此时 Linux 还支持每次挂载都指定不同的挂载标志,而不是一个挂载点只能有一个挂载标志。
内核版本 2.4 之后,Linux 支持了创建绑定挂载,这是指在文件系统目录层级的另一处挂载目录或文件,因而目录或文件在多处可见,绑定挂载有点类似于硬链接,但是它可以(a)对目录挂载,而硬链接不能链接目录;(b)跨越文件系统完成挂载。
2.4.11 版本之后,Linux 支持递归绑定挂载,即在绑定挂载时将源目录下的子挂载也复制到目标目录中。默认情况下只会将源目录下的真实文件树挂载到目标目录中。
获取文件系统信息
statvfs()
和 fstatvfs()
库函数能够获得与已挂载文件系统有关的信息。