给数据盘配开机自动挂载,我往/etc/fstab里抄了一行,把挂载点打错了一个字母。当时心想:小事,下次开机进系统改回来。
下次开机,屏幕黑底白字停在半路,最后蹦出几行英文和一个闪烁的光标,大意是进入紧急模式(emergency mode),按回车获得 shell。我的第一感受不是「怎么修」,而是「完了,机器是不是废了」。
后来这类故障处理多了,才知道它是新手友好度最高的重大故障之一:系统自己停下来等你修,数据一点没丢,修法也就五分钟。这篇讲怎么五分钟修好,以及怎么从一开始就不写错。
〇、先花两分钟:「挂载」是个什么动作
Linux 里没有 C 盘 D 盘。所有文件系统都要「嫁接」到唯一的目录树上才能访问——把/dev/sdb1(一个文件系统)接到/mnt/data(目录树上的一个空目录)上,这个对接动作就是挂载(mount)。嫁接之后,/mnt/data里放的就是 sdb1 的内容;拆下来(umount),目录变回空目录。
fstab 就是「开机自动挂载清单」:系统启动时逐行读它,按清单把各文件系统挂到各目录。所以它出错的后果也直白——清单里有一行挂不上,启动流程就卡住,进紧急模式等你处理。
看当前挂载关系的两条命令:
findmnt / # 看 / 挂在哪个设备上 lsblk -f # 看所有盘的文件系统、UUID、挂载点
怎么读:lsblk -f每个分区下面三行——FSTYPE(文件系统类型)、UUID(全局唯一编号)、MOUNTPOINTS。fstab 里就该用 UUID 认盘,原因见下节。
图示:fstab 六列、救援五步、两条预防验证命令
一、fstab 六个字段逐列讲
# <设备> <挂载点> <类型> <选项> <dump> <pass> UUID=xxxx-xxxx-xxxx-xxxx /data ext4 defaults 0 2 /swapfile none swap sw 0 0 UUID=yyyy-…-yyyy /boot/efi vfat umask=0077 0 2 tmpfs /tmp tmpfs defaults,noatime 0 0
| 列 | 含义 | 要点 |
|---|---|---|
| 设备 | 用什么 | 写 UUID=…,不写 /dev/sdb1(sdb 顺序随插拔变,UUID 跟着文件系统走,永不漂移) |
| 挂载点 | 接到哪 | 目录必须已存在,且最好为空(挂上后原内容被遮住) |
| 类型 | 什么文件系统 | ext4 / xfs / vfat / swap / tmpfs,看lsblk -f的 FSTYPE |
| 选项 | 怎么挂 | defaults够用;想加就逗号连接(如defaults,noatime) |
| dump | 备份工具用 | 基本永远 0(那个工具已淘汰) |
| pass | 开机 fsck 顺序 | 根分区 1,其他 ext/xfs 写 2,swap 和 tmpfs 必须 0 |
UUID 从哪抄:lsblk -f或sudo blkid的输出里复制,整串连同 UUID= 前缀写进 fstab。手抄错一位的后果就是开不了机——所以复制粘贴,别手打。
二、救命习惯:改完 fstab,先跑 mount -a
这是本篇最值钱的一条命令:
sudo mount -a
怎么读:它按 fstab 的内容把所有还没挂载的条目立刻挂一遍。等同于把「下次开机要做的事」现在预演一遍:
没有报错 → 清单健康,重启无忧;
报错(比如挂载点不存在、UUID 错)→现在就知道,现在就能改,成本为零。
进阶一点的验证还有一条:
sudo findmnt --verify
怎么读:不真挂载,只做静态检查(字段数对不对、挂载点存不存在、选项拼错没有),比mount -a更安全——连「验证动作本身」都不会产生副作用。两个都用上,fstab 写错的概率趋近于零。
我那次事故如果有这个习惯,根本不会发生。这也是为什么它值得单独成节。
三、真开不了机了:救援五步
fstab 错导致卡紧急模式,开机后你会看到提示输入 root 密码(或按提示进 maintenance shell)。然后:
# 1. 想想错在哪(看最近的开机日志,fstab 相关错误一眼可见) journalctl -b -p err # 2. 紧急模式里根分区通常只读,先改成可写 mount -o remount,rw / # 3. 改回 fstab(vi/nano 都行;没网、没图形界面,就用最原始的方式) nano /etc/fstab # 4. 验证一遍再走 mount -a # 5. 重启 reboot
两个翻车点提前说:
root 密码输不进去——Ubuntu 默认锁 root(C1 讲过),如果这台机器 root 没密码,紧急模式的密码提示会一直失败。绕法:开机在 GRUB 菜单选 recovery mode → root shell,或者用安装盘/U 盘启动后挂载原系统修(
mount /dev/sda2 /mnt后改/mnt/etc/fstab);remount,rw报错——说明根分区本身有问题(比如 fsck 没过),这时先跑fsck处理它提示的问题再继续。
修完重启进系统后,记得回头把 journalctl 里那个报错对着 fstab 看一眼——知道自己错在哪一列,下次才不会再错。
四、和前后篇的关系
设备怎么认(UUID)、类型哪来的(
lsblk -f)都接自D2/D4;紧急模式里「root 锁定登不进」呼应C1(su/sudo 那篇的 root 锁定话题);
fstab 是 D 组的收尾:分区(D2)→ 文件系统(D4)→ 开机自动挂载(本篇),磁盘三板斧齐了。
速查表(文末收藏版)
看挂载关系 → findmnt / / lsblk -f fstab 认盘用 → UUID=整串(lsblk -f 或 sudo blkid 抄,复制别手打) 六列口诀 → 设备 挂载点 类型 选项 0 pass (根=1,其他 ext/xfs=2,swap/tmpfs=0) 改完必做 → sudo mount -a (真挂一遍,预演开机) (sudo findmnt --verify (静态检查,更安全) 卡紧急模式 → journalctl -b -p err 找元凶 → mount -o remount,rw / → nano /etc/fstab 改 → mount -a → reboot root 登不进 → GRUB 选 recovery mode,或 U 盘启动挂原盘改 /mnt/etc/fstab 挂载点必须 → 已存在、最好为空