/etc/fstab 文件详解:文件格式、各字段含义、挂载选项、常见配置示例
说到启动挂载,/etc/fstab 绝对是绕不开的核心文件。我经常跟团队里的新人说,这个文件就是 Linux 的「挂载地图」。系统启动时,内核读完根文件系统后,就会来找这张地图,按图索骥把剩下的分区都挂上。
嗯,咱们今天就把这张地图彻底拆开看看。
文件格式:一行一个挂载点
/etc/fstab 的格式其实很简单。每一行代表一个挂载条目,用空格或制表符分隔字段。空行和以 # 开头的行会被忽略——这是写注释的好地方。
一个典型的条目长这样:
# <file system> <mount point> <type> <options> <dump> <pass>
/dev/sda1 /boot ext4 defaults 0 2
一共六个字段,少一个都不行。我见过有人漏写最后一个字段,结果系统启动时直接报错挂起——那场面,挺尴尬的。
六个字段,逐个拆解
第一字段:设备标识
这里写你要挂载的设备。有三种写法:
- 设备路径:比如
/dev/sda1。简单直观,但有个坑——设备名可能变。比如你加了块硬盘,原来的/dev/sdb1可能变成/dev/sdc1。我在生产环境遇到过,重启后系统直接进救援模式,就是因为这个。 - UUID:比如
UUID=3f6f9b4e-...-...。这是最推荐的方式。UUID 是硬盘分区的唯一标识,不会变。我个人习惯,新装系统一律用 UUID。 - LABEL:比如
LABEL=MYDATA。适合自己玩的环境,但标签容易重复,生产环境慎用。
blkid 命令可以查到所有分区的 UUID,很方便。
第二字段:挂载点
就是你要把设备挂到哪个目录下。比如 /、/boot、/home。注意,挂载点必须存在,否则挂载会失败。我曾经手滑写了个不存在的目录,结果那个分区就没挂上,数据倒是没丢,但服务全挂了。
第三字段:文件系统类型
常见的包括 ext4、xfs、btrfs、swap、ntfs 等。如果你不确定,可以写 auto,让系统自动检测。但说实话,我很少用 auto——明确指定类型更可靠,也更快。
第四字段:挂载选项
这是最灵活、也最容易出错的字段。多个选项用逗号分隔,不能有空格。常用的有:
| 选项 | 含义 | 我的经验 |
|---|---|---|
defaults |
默认选项(rw, suid, dev, exec, auto, nouser, async) | 大部分场景够用,但别盲目用 |
rw / ro |
读写 / 只读 | 系统盘用 rw,备份盘有时用 ro 更安全 |
noexec |
禁止执行二进制文件 | 挂载 /tmp 时我必加这个,安全 |
nosuid |
忽略 suid 和 sgid 位 | 挂载外部存储时建议加上 |
nodev |
不解析设备文件 | 挂载 /home 时我习惯加上 |
noatime |
不更新访问时间 | 提升性能,尤其是数据库服务器 |
defaults 包含 auto,意味着系统启动时会自动挂载。如果你不想自动挂载,用 noauto。我见过有人把移动硬盘写进 fstab 还用了 defaults,结果开机时硬盘没插,系统卡在挂载那一步——嗯,那画面太美。
第五字段:dump 备份标记
这个字段现在基本废弃了。写 0 就行。只有极少数老系统还用 dump 命令做备份,才会用到这个字段。我工作这么多年,从没见人用过。
第六字段:fsck 检查顺序
系统启动时,会用 fsck 检查文件系统完整性。这个字段控制检查顺序:
0:不检查1:最先检查(通常只给根文件系统)2:其次检查(其他分区)
根分区必须设成 1,其他分区设 2。如果你把根分区设成 0,系统启动时不会检查根文件系统——万一有坏道,你可能很久之后才发现。我曾经接手过一台服务器,根分区设了 0,结果跑了一年多,坏道越来越多,最后系统直接崩了。
常见配置示例
光说不练假把式。我列几个实际项目中用过的配置:
1. 标准 Linux 系统
UUID=abc123... / ext4 defaults,noatime 0 1
UUID=def456... /boot ext4 defaults 0 2
UUID=ghi789... /home ext4 defaults,nodev 0 2
UUID=jkl012... swap swap defaults 0 0
根分区加了 noatime,减少磁盘写入,提升性能。/home 加了 nodev,防止普通用户创建设备文件。
2. 挂载 Windows 共享(CIFS)
//192.168.1.100/share /mnt/share cifs username=user,password=pass,iocharset=utf8,file_mode=0755,dir_mode=0755 0 0
credentials=/etc/smb-credentials,把用户名密码单独放一个文件,权限设成 600。
3. 挂载 ISO 镜像
/path/to/image.iso /mnt/iso iso9660 loop,defaults 0 0
注意那个 loop 选项,它告诉内核要用 loop 设备来挂载镜像文件。我第一次用的时候忘了加,结果挂载失败,还以为是镜像坏了。
知识体系结构图
下面这张图,是我梳理的 fstab 知识结构。你看一眼,心里就有谱了。
避坑指南
最后,分享几个我踩过的坑:
- 修改后一定要测试:用
mount -a命令模拟挂载所有条目。如果报错,当场就能改。别直接重启,否则你可能连系统都进不去。 - 备份原文件:改之前
cp /etc/fstab /etc/fstab.bak。这是基本操作,但我见过太多人省略这一步。 - 注意换行符:Windows 下编辑过的文件会带
\r\n,Linux 只认\n。我曾经帮同事排查过一个诡异的问题——fstab 看起来完全正确,但就是报错。最后发现是换行符搞的鬼。 - 网络文件系统要加 _netdev:如果你挂载 NFS 或 CIFS,记得在选项里加
_netdev。这样系统会等网络就绪后再挂载,否则启动时网络还没起来,挂载必然失败。
好了,fstab 的内容就这些。说白了,它就是一张表,六个字段,搞清楚每个字段的含义和常见取值,你就能驾驭它。下次遇到启动挂载失败,先检查 fstab——八成问题出在这里。