/etc/fstab

一个典型的 /etc/fstab 行格式如下:
<file system> <mount point> <type> <options> <dump> <pass>

我们重点关注后三项配置:<options><dump><pass>


第4项: <options> (挂载选项)

这一列定义了文件系统挂载时的各种行为和权限。多个选项之间用逗号 , 分隔,不能有空格。

常见选项:

  1. defaults:

    • 这是一个集合选项,通常它代表了一组标准的挂载选项,适用于大多数情况。
    • defaults 通常等同于 rw,suid,dev,exec,auto,nouser,async
      • rw: 可读写方式挂载。
      • suid: 允许 SUID 和 SGID 位生效。SUID (Set User ID) 允许用户以文件所有者的权限执行文件,SGID (Set Group ID) 允许用户以文件所属组的权限执行文件。
      • dev: 解释块特殊设备或字符特殊设备。
      • exec: 允许执行此文件系统上的二进制文件。
      • auto: 系统启动时或 mount -a 命令执行时自动挂载此设备。
      • nouser: 只允许 root 用户挂载此文件系统(对于 mount 命令)。对于 /etc/fstab 中的条目,这个选项更多是历史遗留,因为 fstab 是由 root 处理的。
      • async: 所有I/O操作都异步进行。
  2. 控制读写和执行权限:

    • ro: 以只读方式挂载。
    • rw: 以可读写方式挂载(defaults 已包含)。
    • noexec: 禁止在此文件系统上执行任何二进制文件。这对于包含非可信数据的分区(如用户上传目录)是一种安全增强。
    • nosuid: 禁止 SUID 和 SGID 位生效。增强安全性,防止潜在的权限提升攻击。
    • nodev: 禁止解释此文件系统上的块特殊设备或字符特殊设备。增强安全性。
  3. 控制挂载行为:

    • auto: 系统启动时自动挂载(defaults 已包含)。
    • noauto: 系统启动时不会自动挂载此文件系统。需要手动 mount <mount_point> 来挂载。适用于不常用的分区或可移动介质。
    • user: 允许任何普通用户挂载此文件系统。为了安全,通常还会配合 noexec, nosuid, nodev 使用。被挂载后,只有挂载该文件系统的用户有卸载权限。
    • users: 允许任何用户组 users 中的用户挂载和卸载此文件系统。
    • owner: 允许设备文件的所有者挂载。
    • nofail: 如果此设备不存在或无法挂载,系统启动时不会报错并中断启动过程,而是会跳过它继续启动。对于非关键分区(如外部USB硬盘)非常有用。
  4. 性能和数据一致性相关:

    • sync: 所有I/O操作都同步进行。数据会立即写入磁盘,更安全但性能较低。
    • async: 所有I/O操作都异步进行(defaults 已包含)。数据先写入缓存,稍后写入磁盘,性能较高。
    • atime: 每次访问文件时更新文件的访问时间戳 (inode access time)。
    • noatime: 访问文件时不更新访问时间戳。可以提升性能,特别是对于大量读操作的场景,因为它减少了磁盘写操作。
    • relatime: 仅当文件的修改时间 (mtime) 或状态改变时间 (ctime) 比当前的访问时间 (atime) 更新时,或者自上次更新以来超过一定时间(如24小时)才更新 atime。这是目前很多发行版 defaults 选项中 atime 的实际行为,是性能和功能之间的良好折衷。
    • nodiratime: 不更新目录的访问时间戳。
    • strictatime: 总是更新访问时间戳,即使使用 relatime 也强制更新。
  5. 文件系统特定选项:

    • errors=remount-ro: 当文件系统遇到错误时,自动以只读方式重新挂载。这是 ext3/ext4 文件系统的常见选项,可以防止进一步损坏数据。
    • errors=continue: 遇到错误时继续运行。
    • errors=panic: 遇到错误时系统内核崩溃(panic)。
    • 对于 vfatntfs 文件系统:
      • uid=<value>: 设置所有文件的用户ID。
      • gid=<value>: 设置所有文件的组ID。
      • umask=<value>: 设置文件和目录的权限掩码 (例如 umask=0022)。
      • dmask=<value>: 只设置目录的权限掩码。
      • fmask=<value>: 只设置文件的权限掩码。
    • discard: (主要用于SSD) 启用TRIM命令,通知SSD哪些块不再使用。有助于维持SSD性能,但要注意并非所有SSD控制器和文件系统组合都能完美支持或从中受益,有时可能反而导致性能下降。谨慎使用,或根据具体硬件和内核版本进行测试。

示例:
UUID=xxxxx /data ext4 defaults,noatime,nofail 0 2
这个例子表示:使用UUID定位设备,挂载到 /data,文件系统类型是 ext4,使用默认选项外加 noatime (不更新访问时间以提高性能) 和 nofail (如果挂载失败则系统继续启动)。


第5项: <dump> (备份频率)

这一项主要由 dump 这个传统的备份工具使用,用来决定一个文件系统是否需要以及多久进行一次备份。

  • 0: 表示不使用 dump 工具进行备份。在现代系统中,dump 工具使用频率不高,所以这一项通常设置为 0
  • 1 (或更高的正整数): 表示 dump 工具应该备份这个文件系统。数字本身可以被 dump 用来决定备份的级别或频率,但具体实现依赖于 dump 的配置和脚本。

建议:
除非您明确知道自己在使用 dump 工具并需要这个功能,否则**通常将此值设置为 0**。


第6项: <pass> (检查顺序)

这一项被 fsck (File System Check) 工具在系统启动过程中使用,以决定检查文件系统的顺序和是否检查。

  • 0: 表示在系统启动时不检查此文件系统。适用于:

    • 不需要检查的特殊文件系统(如 /proc, /sys)。
    • 网络文件系统 (NFS, CIFS等)。
    • 可移动介质。
    • 设置了 nofail 选项,并且不希望因为检查失败而卡住启动过程的非关键分区。
  • 1: 表示这是第一个要被检查的文件系统。通常只有根文件系统 (/) 会被设置为 1 这是因为根文件系统必须在其他文件系统挂载之前是可用的并且是健康的。

  • 2: 表示在标记为 1 的文件系统检查完毕后,再检查此文件系统。所有标记为 2 的文件系统会按顺序(或者如果可能,并行地)进行检查。适用于需要在启动时检查的其他本地、永久性文件系统,如 /home, /var, /opt 等(如果它们是独立分区的话)。

重要说明:

  • 根文件系统 (/) 必须是 1
  • 所有其他需要启动时检查的本地文件系统应设为 2
  • 如果一个文件系统的 <pass> 值大于 0,那么 fsck 会在启动时尝试检查它。如果检查失败,可能会导致系统无法完成启动,除非在 <options> 中也指定了 nofail
  • 对于日志型文件系统(如 ext4, xfs),正常的 fsck 检查通常非常快,主要是回放日志。只有在非正常关机或检测到不一致时,才会进行更彻底的扫描。
Author: kwin
Link: https://blog.kwin.win/2025/05/17/fstab/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.