fstab 是什么
/etc/fstab 声明系统启动时如何挂载各个文件系统,每行六个字段:设备标识、挂载点、文件系统类型、挂载选项、dump 备份标记、fsck 检查顺序。在 systemd 系统上,它由 systemd-fstab-generator 在启动早期转换成对应的 mount 单元,因此改完 fstab 需要 daemon-reload 才会被重新读取。这个文件写错的代价很高:轻则某个盘没挂上,重则开机等待超时甚至进入紧急模式。
基本信息
| 适用平台 | Linux 全发行版(util-linux 与 systemd 配合解析) |
|---|---|
| 字段格式 | 设备标识 挂载点 类型 选项 dump pass |
| 设备标识写法 | UUID=... 首选;LABEL=... 次之;/dev/... 设备名不推荐,顺序可能漂移 |
| 常用选项 | defaults、ro、noatime、nosuid、nodev、noexec、nofail、_netdev、x-systemd.device-timeout、x-systemd.automount |
| 验证手段 | findmnt --verify 语法校验、mount -a 按 fstab 全量挂载并报错、lsblk -f 或 blkid 获取 UUID |
典型使用场景
- 新增数据盘:格式化后写入 fstab,保证重启后自动挂载
- 挂载网络存储:NFS 与 CIFS 共享写进 fstab,配合 _netdev 与 nofail 控制启动行为
- 在线调整挂载参数:把 noatime 加入条目,减少元数据写入
- 非关键设备容错:移动盘、外接备份盘加 nofail,避免设备不在时无法开机
- 交换分区声明:把 swap 分区或 swap 文件写进 fstab 供开机启用
- 变更前备份:修改前复制一份带日期的备份,出问题能快速回滚
典型条目
典型条目
UUID=5f3a... /data xfs defaults,noatime 0 2
/dev/vg0/swap none swap sw 0 0
10.0.0.5:/export /mnt/nfs nfs defaults,_netdev,nofail 0 0
//10.0.0.6/share /mnt/smb cifs credentials=/etc/smb.cred,_netdev,nofail 0 0
UUID=abcd... /backup ext4 defaults,nofail,x-systemd.device-timeout=10 0 2改完必须验证
改完必须验证
cp /etc/fstab /etc/fstab.bak.$(date +%F)
vim /etc/fstab
findmnt --verify -F /etc/fstab # 语法与可挂载性检查
mount -a # 实跑一遍,有错立刻报出来
systemctl daemon-reload # systemd 系统上让挂载单元重新生成
findmnt /data # 确认挂载结果与参数
blkid /dev/sdb1 # 核对 UUID 是否写对六字段逐一说明
| 字段 | 含义 | 注意 |
|---|---|---|
| 设备标识 | UUID、LABEL 或设备路径 | 优先 UUID,设备名可能漂移 |
| 挂载点 | 目录路径,必须已存在 | 目录不存在会挂载失败,需先创建 |
| 类型 | ext4、xfs、nfs、cifs、swap 等 | 写错会报 unknown filesystem type |
| 选项 | 逗号分隔的挂载参数 | 网络存储记得加 _netdev 与 nofail |
| dump | 老旧备份工具的标记,现代系统几乎不用 | 一般写 0 |
| pass | fsck 检查顺序:根分区通常 1,其余数据盘 2,不检查写 0 | 多个 1 会按顺序排队,写错会拖慢启动 |
nofail 与 _netdev 是两条最实用的防呆设置:nofail 让设备不存在时不阻塞启动,_netdev 让 systemd 等网络就绪后再挂载。外接盘、备份盘与网络存储都应带上它们,避免一台设备的缺席拖垮整机启动。反过来也要清楚 nofail 会让设备故障时的挂载失败被静默忽略,关键数据盘不该加它,否则应用启动后才发现目录是空的。
systemd 还允许在挂载选项里写 x-systemd.* 参数,例如 x-systemd.device-timeout=10 控制等待设备超时,x-systemd.automount 实现访问时才挂载。这些是 systemd 扩展,只在 systemd 发行版上生效,与基础挂载选项写在一起时要注释清楚用途。
修改 fstab 后不验证就重启是最常见的翻车方式,后果往往是开机进入紧急模式并需要控制台介入。规范做法是改前备份、用 findmnt --verify 查语法、用 mount -a 实跑,确认无报错后再安排重启验证,并保留带外访问手段。
排错提示:类型字段写错会报 unknown filesystem type,UUID 写错会报 can't find UUID=,报错文本不同,可以直接定位到出问题的字段。启动时卡在等待某个设备的提示,通常是设备未就绪或根本不存在,用 x-systemd.device-timeout 设置等待上限、用 nofail 让缺失设备不阻塞启动,是最实用的两道保险。
条目定位优先用 UUID 或 LABEL 而不是设备名:设备名会随插拔顺序与虚拟化环境变化,UUID 由文件系统自身记录,稳定得多,内容可用 lsblk -f 直接查到。重建文件系统会生成新的 UUID,届时必须同步更新条目,否则重启即挂载失败。