问题一:NFS 服务端未启动时,客户端为什么开机卡死?

1. 核心原因

  • Systemd 默认强依赖检查:Linux 在启动解析 /etc/fstab 时,默认将所有条目视为系统启动的必需依赖项。

  • 网络服务不可达与长时间等待:NFS 服务端关机时,客户端在启动阶段不断发起连接重试。默认挂载超时通常长达 90 秒(甚至更久)。

  • 进入紧急模式(Emergency Mode):超时重试失败后,Systemd 判定自检失败,中断正常启动流程,导致系统卡死在开机动画或黑屏要求输入 root 密码进入紧急维护模式。

2. 根本解决办法:优化 /etc/fstab 挂载参数

在客户端(web01、web02)的 /etc/fstab 挂载条目中,为网络挂载显式追加容错与超时参数:

  • 原始配置(容易卡死):

    Plaintext

    nfs:/data/uploads /code/wordpress/wp-content/uploads nfs defaults,_netdev 0 0
    
  • 优化后配置(推荐生产方案):

    Plaintext

    nfs:/data/uploads /code/wordpress/wp-content/uploads nfs defaults,_netdev,nofail,x-systemd.mount-timeout=5 0 0
    

关键参数解析:

  • nofail:告诉系统若该设备/挂载点连接失败或不存在,忽略错误并继续正常启动,不会阻塞开机流程。

  • x-systemd.mount-timeout=5:将 Systemd 尝试挂载该设备的超时时间限制为 5 秒,避免开机长时间等待。

  • _netdev:声明该挂载点依赖网络,确保在网络协议栈初始化完成后再尝试挂载。

问题二:已经卡在开机界面进不去系统,如何进入紧急模式排查?

途径 A:等待超时自动进入

  1. 开机卡在加载动画时按键盘 Esc 键,可切换至系统后台运行日志视图。

  2. 等待挂载超时(约 90 秒)后,屏幕出现提示:

    Plaintext

    Give root password for maintenance
    (or press Control-D to continue):
    
  3. 直接输入 root 密码并按回车(输密码时光标不显示字符),即可进入维护 Shell。

途径 B:GRUB 菜单手动引导进入(无需等待超时)

  1. 重启虚拟机,在 GRUB 内核选择界面快速按方向键(↑ / ↓)暂停倒计时。

  2. 光标停留在默认内核行,按 e 键进入编辑模式。

  3. 找到以 linux 开头的那一行,光标移到末尾,空格后追加:

    Plaintext

    systemd.unit=emergency.target
    

    (或使用 rd.break 模式)

  4. 按快捷键 Ctrl + x 引导启动,直接落入紧急模式命令行。

进入紧急模式后的标准修复流程

  1. 重新挂载根分区为可读写状态(紧急模式默认通常为只读挂载):

    Bash

    mount -o remount,rw /
    
  2. 编辑修复 /etc/fstab 文件:

    Bash

    vi /etc/fstab
    
    • 快速救急:在该行开头加上 # 号注释掉挂载规则。

    • 永久修复:在挂载选项追加 ,nofail,x-systemd.mount-timeout=5。

  3. 重启系统:

    Bash

    reboot
    # 若 reboot 提示无权限,可输入 exit 或按 Ctrl + D 继续完成系统引导