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

相关推荐
菜地里的小菜鸟4 小时前
将linux程序打成.run包
linux·将linux程序打成run包·运维自动安装包
老猿AI洞察7 小时前
7月29日热点:AI越狱事件引发行业安全反思
人工智能·安全
晚风吹长发7 小时前
Docker基础——Docker Network(网络详解)
linux·运维·网络·ubuntu·docker·容器
hz567897 小时前
音视频SDK核心能力分析:低延迟传输与高并发接入方案
网络·安全·音视频·实时音视频·信息与通信
天行健,君子而铎8 小时前
数据流动安全监测平台泛在监测与全链路防护技术研究
安全
高磊20058 小时前
LVS(Linux virual server)
linux·服务器·lvs
shwill1239 小时前
PID 算法(三)--- 增量 PID ↔ 单神经元 PID 等价映射
linux·算法
ai_xiaogui9 小时前
PanelAI没有域名也能装?IP安装+自签HTTPS+安全加固全攻略(私有化部署必备)
tcp/ip·安全·https·私有化部署·自签证书·panelai·自带https自动续证
执笔画流年呀10 小时前
Linux搭建Java项目部署环境
java·linux·运维
Sisphusssss10 小时前
香橙派5plus GPIO
linux·python·ubuntu