fstab 写错 _netdev 或 nofail 导致开机卡死的应急修改

11次阅读

开机卡在挂载阶段大概率因/etc/fstab配置错误,需通过emergency.target或init=/bin/bash进入应急模式修改;重点检查网络存储缺_netdev、外设缺nofail、UUID或类型错误,并用mount -a提前验证。

fstab 写错 _netdev 或 nofail 导致开机卡死的应急修改

开机卡在挂载阶段,大概率是 /etc/fstab 里写了错误的挂载选项(比如该加 _netdev 的网络存储没加,或该加 nofail 的外接设备加了 defaults),导致系统等待超时甚至无限阻塞。这时候不能进桌面或 ssh,需用应急模式修改 fstab。

进入 recovery mode 或 init=/bin/bash

重启时在 GRUB 菜单按 Shiftbios)或 Esc(UEFI)调出菜单,选中当前内核,按 e 编辑启动参数:

  • 找到以 linux 开头的行,在末尾添加 systemd.unit=emergency.target(推荐,有完整 systemd 环境)
  • 或更轻量:替换 ro quiet splashrw init=/bin/bash(直接进 root shell,文件系统可写)

Ctrl+XF10 启动。若用 init=/bin/bash,启动后执行:
mount -o remount,rw /(否则 / 是只读)

定位并修正 fstab 中的问题行

运行 cat /etc/fstab 查看内容,重点关注这几类易错项:

  • 网络存储(NFS/CIFS)没加 _netdev:系统会尝试在网卡就绪前挂载,导致超时卡住。应改为类似:
    192.168.1.100:/data /mnt/nfs nfs _netdev,auto,nofail,x-systemd.idle-timeout=30 0 0
  • usb/移动硬盘等非关键设备用了 defaults 却没插着:去掉 defaults,加上 nofail,x-systemd.device-timeout=5,避免等待
  • UUID 或路径写错、文件系统类型不匹配:用 blkid 核对设备标识,lsblk -f 看实际类型

临时跳过挂载验证(仅调试用)

如果一时无法确定哪一行出问题,可先注释掉可疑行(行首加 #),保存后退出:

  • vi /etc/fstabnano /etc/fstab 编辑(nano 按 Ctrl+O 保存,Ctrl+X 退出)
  • 若用 init=/bin/bash 启动,改完后执行:
    exec /sbin/initreboot -f
  • 若用 emergency.target,输入 exit 两次回到正常启动流程

预防下次再踩坑

日常编辑 fstab 前务必验证:

  • 新增行先手动试挂:mount -a(报错会立刻提示,不重启也能发现)
  • 对非必需设备,固定加上 nofail;对网络存储,必加 _netdev
  • 备份原 fstab:cp /etc/fstab /etc/fstab.bak
  • 考虑用 systemd mount unit 替代 fstab,控制依赖和超时更灵活
text=ZqhQzanResources