/etc/fstab 重复挂载条目

Linux 服务器启动卡死的排查与修复:/etc/fstab 重复挂载条目

场景 :生产服务器无法在本地终端登录,机房屏幕停在内核报错界面,但 SSH 远程连接仍然可用。只有一次重启机会。


故障现象

机房屏幕所见(本地终端)

服务器开机后,屏幕停留在如下报错,无法进入登录界面:

复制代码
[336.933560] systemd-fstab-generator[6588]: Failed to create unit file
              /run/systemd/generator/media-ssd.mount, as it already exists.
              Duplicate entry in /etc/fstab?
[336.933712] systemd-fstab-generator[6588]: Failed to create unit file ...
[337.783324] systemd-fstab-generator[66411]: Failed to create unit file ...
[337.784370] systemd-fstab-generator[66411]: Failed to create unit file ...

异常行为

  • 通过 SSH 远程连接可以正常登录
  • 一旦访问 /media/ssd01(NVMe SSD)上的数据,服务器立即关机
  • 本地终端完全无法使用,无法正常重启进入系统

环境信息

项目 详情
系统盘 /dev/sdb2/(879G)
NVMe SSD /dev/nvme0n1/media/ssd01(3.6T)
其他数据盘 sda1 / sdc / sdd
故障组件 /etc/fstab 第 15--17 行
bash 复制代码
$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb2       879G  546G  288G  66% /
/dev/nvme0n1    3.6T  2.9T  544G  85% /media/ssd01
/dev/sda1       1.8T  1.4T  325G  82% /media/media03
/dev/sdc        3.6T  3.3T  158G  96% /media/media02
/dev/sdd        3.6T  3.3T  186G  95% /media/media01

根因分析

第一步:检查 fstab

bash 复制代码
$ grep -n '/media/ssd' /etc/fstab
15: /dev/disk/by-uuid/51e1fb65-... /media/ssd auto nosuid,nodev,nofail,x-gvfs-show 0 0
16: /dev/disk/by-uuid/5dc65724-... /media/ssd auto nosuid,nodev,nofail,x-gvfs-show 0 0
17: /dev/disk/by-uuid/445b53be-... /media/ssd auto nosuid,nodev,nofail,x-gvfs-show 0 0
18: /dev/disk/by-uuid/08c7d34d-... /media/ssd01 auto nosuid,nodev,nofail,x-gvfs-show 0 0

发现问题 :第 15--17 行有 3 个不同 UUID 但挂载点相同/media/ssd)的条目。

第二步:验证 UUID 是否存在

bash 复制代码
$ sudo blkid | grep -E "51e1fb65|5dc65724|445b53be|08c7d34d"
/dev/nvme0n1: UUID="08c7d34d-d66e-4b4a-b95e-de878a3bad54" TYPE="ext4"

结论

行号 UUID 状态
15 51e1fb65-... ❌ 设备不存在(已拔除或重分区)
16 5dc65724-... ❌ 设备不存在
17 445b53be-... ❌ 设备不存在
18 08c7d34d-... /dev/nvme0n1,当前唯一 SSD

根本原因

systemd-fstab-generator 在启动时尝试为 fstab 中的每个条目生成 .mount unit 文件。由于第 15--17 行挂载点相同 (均为 /media/ssd),systemd 尝试创建同名 unit media-ssd.mount 三次,第二次起就会报 "already exists" 错误。

这导致:

  1. systemd 进入错误循环,无法完成启动序列
  2. 本地 getty(登录终端)无法启动
  3. 访问 SSD 触发内核异常或电源保护导致关机

修复步骤

⚠️ 注意:所有操作均通过 SSH 远程执行,仅有一次重启机会。

1. 备份 fstab(必做)

bash 复制代码
sudo cp /etc/fstab /etc/fstab.bak

2. 注释掉无效的重复条目

bash 复制代码
sudo sed -i.bak2 '15s/^/#/' /etc/fstab
sudo sed -i '16s/^/#/' /etc/fstab
sudo sed -i '17s/^/#/' /etc/fstab

3. 验证修改结果

bash 复制代码
$ grep -n '/media/ssd' /etc/fstab
15: #/dev/disk/by-uuid/51e1fb65-... /media/ssd auto ...   ← 已注释
16: #/dev/disk/by-uuid/5dc65724-... /media/ssd auto ...   ← 已注释
17: #/dev/disk/by-uuid/445b53be-... /media/ssd auto ...   ← 已注释
18:  /dev/disk/by-uuid/08c7d34d-... /media/ssd01 auto ... ← 保留

4. 清理已生成的冲突 unit 文件

bash 复制代码
sudo rm -f /run/systemd/generator/media-ssd.mount
sudo systemctl daemon-reload

5. 重启服务器

bash 复制代码
sudo reboot

修复后验证

重启完成后,确认以下内容:

bash 复制代码
# 确认 SSD 正常挂载
$ ls /media/ssd01
data  codes  disk_project  ...

# 确认无 fstab 相关报错
$ sudo systemctl --failed

# 确认本地终端可以正常登录(机房现场)

应急回滚方案

如果重启后问题未解决,通过 SSH 执行:

bash 复制代码
sudo cp /etc/fstab.bak /etc/fstab
sudo reboot

经验总结

为什么 SSH 可以连但本地终端不行?

SSH 服务(sshd)由 systemd 在早期阶段启动,网络和基础服务均正常。问题出在 getty(本地登录服务)依赖 fstab 挂载完成,而 fstab 的冲突导致 systemd 的挂载目标(local-fs.target)无法正常完成,从而阻塞了本地终端的启动。

为什么访问 SSD 会关机?

fstab 中存在多个指向同一挂载点的异常条目时,内核在运行时处理挂载请求可能触发文件系统层的竞争或异常,在某些驱动或固件配置下会触发内核 panic 并导致系统重启/关机。

预防措施

  1. 每次修改 fstab 前先备份cp /etc/fstab /etc/fstab.bak
  2. 修改后用 findmnt --verify 验证语法(无需重启)
  3. 拔除磁盘前先从 fstab 中删除对应条目,避免留下僵尸 UUID
  4. 挂载点名称要唯一,不同设备不能共用同一挂载目录
  5. 定期审计 fstabcat -n /etc/fstab 检查是否有重复挂载点

关键命令速查

bash 复制代码
# 查看当前挂载状态
df -h

# 列出所有块设备及 UUID
sudo blkid

# 验证 fstab 中 UUID 是否存在
grep -n '/media/ssd' /etc/fstab

# 注释掉指定行(以第15行为例)
sudo sed -i '15s/^/#/' /etc/fstab

# 验证 fstab 语法
findmnt --verify --fstab

# 重载 systemd(无需重启)
sudo systemctl daemon-reload

本文记录于一次真实的生产环境故障排查,操作环境为 Ubuntu Server + systemd。

相关推荐
ylscode2 小时前
Windows 内核惊现高危提权漏洞 CVE-2026-40369:沙箱隔离失效,SYSTEM 权限唾手可得
网络·安全·安全威胁分析
运维栈记2 小时前
API Error: 400 Request body format invalid
linux·ai
李子琪。2 小时前
网络空间安全深度实战:CSRF 漏洞原理剖析与基于 Token 的纵深防御体系构建(全栈实验报告)
前端·安全·csrf
小白兔奶糖ovo3 小时前
【Leetcode】231. 2的幂
linux·算法·leetcode
s_w.h3 小时前
【 linux 】动静态库的制作
linux·运维·服务器·算法·bash
顺风尿一寸4 小时前
深入Linux内核:mkdir系统调用的完整实现解析
linux
用户2367829801684 小时前
Linux free 命令深度解析:从内存监控到 OOM 排查的完整指南
linux
无足鸟ICT4 小时前
【RHCA+】boxes命令(艺术框)
linux
_Voosk5 小时前
FreeBSD 使用代理运行命令
linux·运维·freebsd
黎阳之光5 小时前
数智透明·安全兜底|黎阳之光透明矿山,AI+数字孪生守护矿山生命线
人工智能·物联网·算法·安全·数字孪生