2. /etc/fstab 文件详解:字段含义、配置规则、常见错误写法

说起 /etc/fstab,我敢说这是 Linux 系统里最让人「又爱又恨」的文件之一。爱它,是因为它帮我们自动挂载分区,省去每次手动 mount 的麻烦;恨它,是因为只要写错一个字符,系统启动就可能直接卡在 emergency mode,让你连桌面都进不去。

我自己就吃过不少这方面的亏。记得刚入行那会儿,有一次在客户的生产服务器上改 fstab,手抖多打了个空格,结果重启后系统直接起不来了。大半夜被叫去机房,满头大汗地修了半天。从那以后,我对这个文件就格外敬畏。

今天咱们就把这个文件彻底讲透。你只要跟着我走一遍,以后看到 fstab 就不会再发怵了。

2.1 文件位置与基本结构

/etc/fstab 是一个纯文本文件,位于 /etc 目录下。它的作用很简单:告诉系统在启动时,哪些设备要挂载到哪个目录,以及用什么文件系统类型。

一个典型的 fstab 文件长这样:

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
UUID=1234-5678 /               ext4    defaults        0       1
UUID=8765-4321 /boot           ext4    defaults        0       2
UUID=abcd-efgh none            swap    sw              0       0
/dev/sdb1      /data           xfs     defaults        0       0

嗯,这里要注意:每一行代表一个挂载条目,行与行之间没有顺序要求,但系统会按顺序依次处理。以 # 开头的行是注释,系统会直接忽略。

2.2 六个字段的含义

每个挂载条目由 6 个字段组成,字段之间用空格或 Tab 分隔。我习惯用 Tab 对齐,这样看起来更整洁。

字段 含义 示例
1. file system 要挂载的设备或分区 /dev/sda1 或 UUID=xxx
2. mount point 挂载点目录 /、/boot、/data
3. type 文件系统类型 ext4、xfs、swap
4. options 挂载选项 defaults、noatime
5. dump 备份标志(0 或 1) 0(不备份)
6. pass 文件系统检查顺序 1(根分区)、2(其他)

2.2.1 第一字段:file system

这个字段指定要挂载的设备。有三种写法:

  • 设备路径:如 /dev/sda1。简单直接,但设备名可能变化(比如换了硬盘或插拔了 USB)。
  • UUID:如 UUID=1234-5678。这是最推荐的方式,因为 UUID 是唯一的,设备名变了也不影响。
  • LABEL:如 LABEL=MyData。适合有明确标签的场景,但标签可能重复。
我的建议: 生产环境一律用 UUID。用 blkid 命令可以查看所有设备的 UUID。我在项目中见过太多因为设备名漂移导致挂载失败的案例了。

2.2.2 第二字段:mount point

挂载点就是你要把设备挂到哪个目录下。根分区必须是 /,交换分区用 none,其他分区可以自定义。

这里有个坑:挂载点目录必须事先存在。如果目录不存在,系统会挂载失败。我曾经犯过这个错——新建了一个分区,忘了创建挂载点目录,结果重启后分区没挂上。

2.2.3 第三字段:type

文件系统类型。常见的有:

  • ext4:Linux 最常用的文件系统
  • xfs:适合大文件和高性能场景
  • swap:交换分区
  • vfat:Windows 兼容的 FAT32
  • ntfs:Windows NTFS 文件系统
  • nfs:网络文件系统

如果你不确定类型,可以用 auto,让系统自动检测。但我不建议这么做——自动检测有时会出错,特别是对于特殊文件系统。

2.2.4 第四字段:options

这是最复杂的字段,也是出问题最多的地方。挂载选项用逗号分隔,不能有空格。

常用的选项有:

  • defaults:默认选项,包含 rw、suid、dev、exec、auto、nouser、async
  • ro:只读挂载
  • rw:读写挂载
  • noexec:禁止执行二进制文件(安全考虑)
  • nosuid:忽略 suid 和 sgid 位
  • noatime:不更新访问时间(提升性能)
  • nofail:如果设备不存在,不报错,继续启动
重点: nofail 这个选项特别实用。如果你挂载的是一个可能不存在的设备(比如 U 盘),加上 nofail 可以防止系统因为找不到设备而卡在 emergency mode。

2.2.5 第五字段:dump

这个字段用于 dump 备份工具。大多数情况下设为 0,表示不备份。只有极少数老系统会用 1。说实话,我工作这么多年,几乎没见过谁用 dump 备份。

2.2.6 第六字段:pass

这个字段控制 fsck 文件系统检查的顺序:

  • 0:不检查
  • 1:最先检查(通常只给根分区)
  • 2:其次检查(其他分区)

注意:只有 pass 为 1 或 2 时,系统才会在启动时检查文件系统。如果设为 0,即使文件系统有问题,系统也不会自动修复。

2.3 配置规则与最佳实践

写 fstab 时,有几个规则你必须记住:

  1. 每行 6 个字段,一个都不能少。少一个字段,系统启动就会报错。
  2. 字段之间用空格或 Tab 分隔。我习惯用 Tab,因为对齐后看起来更舒服。
  3. 不要用相对路径。挂载点必须用绝对路径,比如 /data 而不是 data。
  4. 根分区必须存在且正确。如果根分区写错了,系统连 emergency mode 都进不去。
  5. 修改后先测试。用 mount -a 命令测试所有挂载条目是否正确。
警告: 修改 fstab 后,一定要先用 mount -a 测试。如果测试失败,系统启动时也会失败。我曾经见过有人改完 fstab 直接重启,结果系统起不来了,只能进救援模式修复。

2.4 常见错误写法

下面这些错误,我几乎每个月都能在论坛或群里看到有人问。你提前了解一下,以后就能避开这些坑。

错误 1:字段数不对

UUID=1234-5678 /data ext4 defaults 0

少了一个字段(pass)。系统会报错:invalid fstab entry。

错误 2:挂载点目录不存在

UUID=1234-5678 /mydata ext4 defaults 0 2

如果 /mydata 目录不存在,挂载会失败。记得先 mkdir /mydata。

错误 3:UUID 写错

UUID=1234-5679 / ext4 defaults 0 1

UUID 多写或少写一个字符,系统就找不到设备。用 blkid 确认 UUID 后再写。

错误 4:选项中有空格

UUID=1234-5678 /data ext4 defaults, noatime 0 2

选项之间不能用空格,只能用逗号。正确写法是 defaults,noatime。

错误 5:交换分区写错

/dev/sda2 swap swap defaults 0 0

交换分区的挂载点必须是 none,类型必须是 swap。如果写错了,系统不会报错,但交换分区不会启用。

2.5 知识体系结构图

下面这张图帮你理清 fstab 的整体脉络:

/etc/fstab 知识体系 /etc/fstab 1. file system 2. mount point 3. type 4. options 5. dump 6. pass 常见错误 字段数不对 挂载点不存在 UUID 写错 选项中有空格 最佳实践:用 UUID、先测试、加 nofail

2.6 实战测试技巧

修改 fstab 后,别急着重启。先用下面几个命令测试:

# 测试所有挂载条目
mount -a

# 查看当前挂载情况
mount | grep -E "^/dev|^UUID"

# 查看 fstab 语法是否正确
findmnt --verify

mount -a 会尝试挂载 fstab 中所有标记为 auto 的设备。如果报错,说明有配置问题,赶紧修。等确认无误后再重启。

小技巧: 如果你在远程服务器上修改 fstab,建议先开一个 screen 或 tmux 会话。万一改错了导致网络断开,你还能通过另一个会话修复。我吃过这个亏,现在养成了习惯。

好了,fstab 的六个字段、配置规则和常见错误,咱们都过了一遍。说白了,这个文件就是个「挂载说明书」,告诉系统怎么挂载每个分区。只要记住每个字段的含义,写的时候细心一点,基本不会出问题。

下一节咱们会讲如何用 mount -a 和 findmnt 来验证配置,以及当系统因为 fstab 错误卡在 emergency mode 时,该怎么一步步修复。到时候我会分享几个我亲身经历的故障案例,保证让你印象深刻。