修改 /etc/fstab 后重启,VPS停在emergency mode、dependency failed或本地文件系统挂载失败,通常不是系统彻底损坏,而是启动过程无法完成某个必需挂载。常见原因包括UUID写错、磁盘已经被卸载、文件系统类型不匹配,以及网络存储没有声明网络依赖。
处理重点是先恢复可操作入口,再修正挂载定义,不能靠连续重启碰运气。 错误条目仍在时,每次启动都会重复触发同一失败。

先确认故障确实来自fstab
能进入紧急终端时,先查看本次启动失败的单元:
systemctl --failed
journalctl -xb -p warning
日志中出现 Failed to mount、Dependency failed for Local File Systems,并指向某个 .mount 单元,才说明排查方向正确。若报错来自根文件系统损坏、内核找不到启动盘或GRUB,处理方法并不相同。
再读取当前配置,但先不要保存任何修改:
cat /etc/fstab
findmnt --verify --verbose
findmnt --verify 可以发现字段数量、设备标识和挂载点等问题。必须以日志和验证结果为证据,不能看到emergency mode就直接删空fstab。
无法SSH时怎样进入服务器
系统没有完成网络启动时,SSH往往不可用。应从云平台控制台打开VNC、串口控制台或救援模式;若平台支持挂载救援镜像,也可以把原系统盘作为数据盘接入救援环境。
进入紧急shell后,根目录可能是只读状态,可尝试:
mount -o remount,rw /
cp -a /etc/fstab /etc/fstab.bak
在救援镜像中,原根分区不一定挂载在 /。先用 lsblk -f 找到文件系统,再挂载到临时目录,编辑对应路径下的 etc/fstab。动手前保留磁盘快照或配置备份,尤其不要在设备归属不清时运行格式化或文件系统修复命令。
核对UUID、类型和挂载点
列出当前可见设备及其真实标识:
lsblk -f
sudo blkid
将输出与fstab第一列逐项比较。云服务器扩容、克隆系统盘或更换数据盘后,设备名可能变化,因此固定数据盘更适合使用 UUID= 或 LABEL=,但复制旧磁盘时也要防止UUID重复。
同时确认第三列文件系统类型与实际一致,第二列挂载目录已经存在。目录缺失时可以先创建,例如 sudo mkdir -p /data。不要把示例中的UUID、盘符或文件系统类型原样复制到自己的服务器。
先注释错误条目恢复启动
暂时无法确认某块非系统盘时,最稳妥的方法是先在该行开头加 #,让系统恢复启动,再登录后继续核对。根分区、/boot、EFI分区等启动关键条目不能随意注释。
编辑完成后执行:
systemctl daemon-reload
findmnt --verify --verbose
mount -av
mount -a 会尝试挂载符合条件的条目,远程NFS或CIFS配置错误时可能等待较久。生产机应先单独测试目标条目,并保持救援控制台可用。只有验证无错误且目标目录能正确读写,才进入重启步骤。
非关键磁盘可使用nofail
备份盘、临时数据盘或可能被卸载的附加盘,不应因为缺失而阻止整个系统启动。可在挂载选项中加入 nofail:
UUID=正确的UUID /data ext4 defaults,nofail 0 2
systemd环境还可以为设备等待设置合理上限:
UUID=正确的UUID /data ext4 defaults,nofail,x-systemd.device-timeout=15s 0 2
nofail 只适用于业务允许缺盘继续启动的场景。数据库目录、容器数据目录等关键路径若未挂载,应用可能把数据写到根分区同名目录,造成更隐蔽的问题。关键存储宁可阻止业务启动,也不要把nofail当成通用修复。
网络存储还要声明网络依赖
NFS、CIFS等网络文件系统应使用正确类型和 _netdev 选项,让systemd把它视为网络挂载:
server:/export /mnt/share nfs defaults,_netdev,nofail,x-systemd.mount-timeout=30s 0 0
网络已在线不代表远端存储一定可达,还要检查DNS、路由、认证文件和服务端导出权限。密码不要直接明文写在fstab中,CIFS应使用权限受控的credentials文件。
需要先复现启动顺序时,可用 萤光云 建立同发行版测试机;跨地区验证磁盘或网络挂载时,也可通过 LightNode 临时部署环境。测试配置不要携带生产密钥。
重启前后的验收步骤
确认 findmnt --verify --verbose 没有错误,mount -av 能完成,目标路径也指向预期块设备后再重启:
findmnt /data
df -hT /data
touch /data/.mount-test && rm /data/.mount-test
sudo reboot
重启后再次执行 systemctl --failed、findmnt /data 和 journalctl -b -p warning。验收标准是系统正常进入默认目标、挂载来源正确、应用数据目录没有落到根分区,并且日志中不再出现对应挂载失败。
FAQ
为什么fstab写错一行会让整台VPS进不去?
systemd会把fstab转换为挂载单元,必需挂载失败可能阻断local-fs.target,系统于是进入紧急模式等待管理员处理。
可以直接删除/etc/fstab吗?
不建议。文件中可能包含根分区、启动分区、Swap和业务数据盘定义。应只修正或临时注释已经确认错误的条目。
文件系统报错时能直接执行fsck吗?
不能对正在读写挂载的文件系统随意执行修复。先确认文件系统类型并卸载,根分区通常需要从救援环境操作,重要数据应先做快照或备份。
温馨提示
编辑fstab前先保存备份,并在当前会话中运行 findmnt --verify 和针对性挂载测试。对远程VPS而言,确认控制台或救援入口可用,是修改启动挂载配置前最重要的安全措施。


