3.7.文件系统的挂载与卸载 ======================== 文件系统就像是一棵树,它的根是 **/**\ 。\ **/dev**\ 、\ **/usr** 和根目录中的其他目录是其分支,它们可能还有自己的分支,如 **/usr/local** 等等。 将一些目录放在不同的文件系统中是有各种原因的。\ **/var** 包含了 **log/**\ 、\ **spool/** 和各种类型的临时文件,因此,可能会被填满。填满根文件系统并不是一个好主意,所以将 **/var** 从 **/** 中剥离出来通常是有好处的。 将一些目录放在不同的文件系统中的另一个常见原因是,它们要被放置在单独的物理磁盘或者是单独的虚拟磁盘上,比如\ `“网络文件系统(NFS)” <https://docs.freebsd.org/en/books/handbook/network-servers/index.html#network-nfs>`__\ 中说明的挂载的网络文件系统,或者 CDROM 驱动器。 3.7.1. **fstab** 文件 --------------------- 在引导过程中(\ `FreeBSD 的引导过程 <https://docs.freebsd.org/en/books/handbook/boot/index.html#boot>`__\ ),除了包含 ``noauto`` 的条目外,\ **/etc/fstab** 中列出的文件系统都会自动挂载。这个文件包含以下格式的条目: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session device /mount-point fstype options dumpfreq passno *device* 一个现有的设备名称,如\ `磁盘设备名称 <https://docs.freebsd.org/en/books/handbook/book/#disks-naming>`__\ 中所解释的。 *mount-point* 一个现有的目录,用来挂载文件系统。 *fstype* 要传递给 `mount(8) <https://www.freebsd.org/cgi/man.cgi?query=mount&sektion=8&format=html>`__ 的文件系统类型。FreeBSD 默认的文件系统是 ``ufs``\ 。 *options* ``rw`` 表示可读写文件系统,\ ``ro`` 表示只读文件系统,后面是可能需要的任何其他选项。一个常见的选项是 ``noauto``\ ,用于不需要在启动过程中进行挂载的文件系统。其他选项在 `mount(8) <https://www.freebsd.org/cgi/man.cgi?query=mount&sektion=8&format=html>`__ 中列出。 *dumpfreq* 被 `dump(8) <https://www.freebsd.org/cgi/man.cgi?query=dump&sektion=8&format=html>`__ 用来确定哪些文件系统需要转储。如果该字段缺失,则假定其值为 ``0``\ 。 *passno* 决定 UFS 文件系统在重启后应被 `fsck(8) <https://www.freebsd.org/cgi/man.cgi?query=fsck&sektion=8&format=html>`__ 检查的顺序。应该被跳过的文件系统应该把它们的 ``passno`` 设置为 ``0``\ 。根文件系统需要在其他所有文件系统之前被检查,它的 ``passno`` 应该被设置为 ``1``\ 。其他文件系统应该被设置为大于 ``1`` 的值。如果多个文件系统有相同的 ``passno``\ ,\ `fsck(8) <https://www.freebsd.org/cgi/man.cgi?query=fsck&sektion=8&format=html>`__ 将尽可能地尝试并行检查文件系统。 关于 **/etc/fstab** 的格式和选项的更多信息,请参考 `fstab(5) <https://www.freebsd.org/cgi/man.cgi?query=fstab&sektion=5&format=html>`__\ 。 3.7.2.使用 `mount(8) <https://www.freebsd.org/cgi/man.cgi?query=mount&sektion=8&format=html>`__ ----------------------------------------------------------------------------------------------- 文件系统是用 `mount(8) <https://www.freebsd.org/cgi/man.cgi?query=mount&sektion=8&format=html>`__ 挂载的。最基本的语法如下: .. code:: shell-session # mount device mountpoint 在 ``/etc/fstab`` 中列出的文件系统也可以通过提供挂载点来挂载。 该命令提供了许多选项,在 `mount(8) <https://www.freebsd.org/cgi/man.cgi?query=mount&sektion=8&format=html>`__ 中有所概述,最常用的选项包括: 挂载选项 *-a* 挂载 **/etc/fstab** 中列出的所有文件系统,除了那些标记为 ``noauto``\ 、被 ``-t`` 标志排除的文件系统,或者已经挂载的文件系统。 *-d* 执行所有操作但不进行实际的 ``mount`` 系统调用。这个选项和 ``-v`` 标志一起使用,可以确定 `mount(8) <https://www.freebsd.org/cgi/man.cgi?query=mount&sektion=8&format=html>`__ 预期要做什么。 *-f* 挂载文件系统为只读。这与使用 ``-o ro`` 是一样的。 *-t fstype* 挂载指定的文件系统类型或只挂载指定类型的文件系统,如果包括 ``-a``\ 。默认的文件系统类型是“ufs”。 *-u* 更新文件系统的挂载选项。 *-v* 详细模式。 *-w* 对文件系统进行读写挂载。 以下选项可以作为逗号分隔的列表传递给 ``-o``\ 。 **nosuid** 不要读取文件系统上的 ``setuid`` 或 ``setgid`` 标志。这也是一个有用的安全选项。 3.7.3.使用 `umount(8) <https://www.freebsd.org/cgi/man.cgi?query=umount&sektion=8&format=html>`__ ------------------------------------------------------------------------------------------------- 要卸载文件系统,可使用 `umount(8) <https://www.freebsd.org/cgi/man.cgi?query=umount&sektion=8&format=html>`__\ 。这个命令需要一个参数,可以是挂载点、设备名称、\ ``-a`` 或 ``-A``\ 。 所有的命令形式都是用 ``-f`` 来强制卸载,用 ``v`` 来表示详细情况。请注意,\ ``-f`` 通常不是一个好主意,因为它可能使计算机崩溃或损坏文件系统上的数据。 要卸载所有挂载的文件系统,或只卸载 ``-t`` 后面列出的文件系统类型,请使用 ``-a`` 或 ``-A``\ 。注意,\ ``-A`` 不会试图卸载根文件系统。