/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。

相关推荐
流浪0011 小时前
Linux基础篇 (一) 不费力掌握入门级命令
linux·运维·服务器
楼田莉子1 小时前
仿Muduo的高并发服务器:基于Tcp协议的回显服务器
linux·服务器·c++·后端
承渊政道1 小时前
CentOS 7部署Elasticsearch完整流程:避坑、基础操作、远程访问
java·linux·elasticsearch·系统架构·centos·远程工作·持续部署
Sombra_Olivia1 小时前
Vulhub 中的 Cacti-CVE-2023-39361
安全·web安全·渗透测试·vulhub
zzzyyy5381 小时前
Ext系列文件系统
linux·运维
Yupureki1 小时前
《MySQL数据库基础》6.表的增删查改
linux·服务器·数据库·mysql
一拳一个娘娘腔1 小时前
别让工具成为摆设:写给新手的 Kali Linux 命令“破壁”指南
linux
Waay10 小时前
“红帽系统管理二”知识点问答题:第11章 管理网络安全
网络·安全·web安全
Yupureki10 小时前
《Linux网络编程》8.网络层IP原理
linux·运维·服务器·网络·ip