CentOS7 开机卡在 systemd 初始化排查
1. CentOS7 开机卡在 systemd 初始化完整排查流程
2. 先进入单用户/救援模式(必做第一步)
2.1. 方式1:内核启动参数修改(本地服务器/虚拟机)
- 开机 GRUB 界面,选中内核按
e进入编辑 - 找到以
linux16开头的一行,修改两处:
- 末尾添加:
init=/bin/bash - 把
ro改为rw(只读改读写)
- 按
Ctrl+X启动,直接进入 root shell,无需密码
2.2. 方式2:系统救援盘(无法进单用户时)
CentOS7 ISO 镜像启动,选择 Troubleshooting → Rescue a CentOS system,挂载原系统 /mnt/sysimage,执行 chroot /mnt/sysimage 进入原系统环境。
3. 高频卡死根因 & 分层排查
3.1. 文件系统损坏(最常见)
3.1.1. 现象
卡在 Started Show Plymouth Boot Screen / systemd-fsck、长时间磁盘读写无响应、报 UUID xxx does not exist
3.1.2. 修复步骤
- 单用户模式下执行磁盘检查:
# 查看磁盘分区
lsblk
# 修复根分区(例/dev/mapper/centos-root /dev/sda1)
fsck -f /dev/mapper/centos-root
注意:fsck 禁止挂载状态执行,若已挂载先 umount /dev/xxx2. 若 /etc/fstab 配置错误(UUID写错、不存在磁盘、swap异常)
# 注释异常行,临时开机
vi /etc/fstab
# 注释所有非系统盘、错误UUID、swap行,重启测试
3.2. 磁盘/存储硬件异常
3.2.1. 现象
日志大量 I/O error、timeout、卡在挂载存储卷、云服务器云盘离线
- 单用户查看内核磁盘日志:
dmesg | grep -i error
dmesg | grep -i sd
- 本地机器:检查硬盘、RAID、SATA线;云服务器:检查云盘是否解绑、磁盘性能打满
3.3. systemd 关键服务启动死锁(第二高发)
systemd 并行启动,某服务卡死会阻塞整个初始化,常见:
- network 网络服务(网卡不存在、静态IP配置错误、NetworkManager 崩溃)
- mount 挂载服务(NFS/共享存储超时)
- lvm2、加密磁盘、docker/k8s 容器服务、chrony 时间同步
3.3.1. 排查方案
- 单用户模式临时禁用阻塞服务
# 永久屏蔽开机自启
systemctl mask network.service
systemctl mask NetworkManager.service
systemctl mask docker.service
# 或临时删除开机自启
systemctl disable xxx.service
- 查看开机启动依赖树,定位阻塞单元
systemd-analyze blame
systemd-analyze critical-chain
- 查看服务详细报错日志
journalctl -xb # 完整开机日志,重点看 red 错误
journalctl -u network.service
3.4. 内核/系统文件损坏
3.4.1. 场景:yum 升级中断、误删系统文件、磁盘坏道
- 修复系统rpm包损坏
rpm -Va # 校验所有系统文件,缺失文件会标M/S
# 修复损坏包
yum reinstall $(rpm -Va | grep 'missing' | awk '{print $NF}')
- 内核损坏:GRUB切换旧内核启动,删除问题内核重装
3.5. SELinux 上下文损坏
3.5.1. 现象:开机大量权限拒绝、卡在 systemd-logind
单用户模式下执行自动修复标签:
# 开机自动重建selinux上下文
touch /.autorelabel
exec /sbin/init
# 重启后会自动全盘relabel,等待完成即可
3.6. 主机名/hosts 解析死锁
/etc/hosts 缺失本机主机名,systemd 启动日志、dbus 阻塞:
# 检查主机名
hostname
# 确保/etc/hosts存在对应条目
echo "127.0.0.1 localhost localhost.localdomain $(hostname)" >> /etc/hosts
4. 日志定位核心命令(卡机后必查)
- 完整开机启动日志(最关键)
journalctl -xb --no-pager
# 只看错误日志
journalctl -xb -p err
- 查看启动耗时最长、阻塞服务
systemd-analyze blame | head -20
systemd-analyze critical-chain
- 查看磁盘挂载、文件系统日志
dmesg | grep -i fsck
dmesg | grep -i mount
5. 快速急救步骤(按顺序操作,90%场景解决)
- GRUB 修改
init=/bin/bash rw进入单用户 - 注释
/etc/fstab所有额外挂载、swap、NFS 行 - 执行
fsck -f修复根文件系统 - 临时 mask 网络、docker、lvm 等非核心服务
- 若有 SELinux 报错:
touch /.autorelabel - 执行
exec /sbin/init正常启动,观察卡在哪个服务 - 根据
journalctl报错针对性修复对应服务/硬件
6. 典型卡死场景对应解决
- 卡在 Started Mount File System→
/etc/fstab错误 / 磁盘UUID失效 / NFS服务器不可达 - 卡在 NetworkManager / network.service→ 网卡配置文件
/etc/sysconfig/network-scripts/ifcfg-*写错、网卡硬件不存在 - 卡在 Docker / containerd→ 存储驱动损坏,删除
/var/lib/docker重建 - 卡在 SELinux relabel 无限循环→ 根分区空间不足,清理磁盘后重新
touch /.autorelabel - 报 cannot find root device / UUID not found→ 磁盘脱机、LVM卷组损坏,执行
vgscan / lvscan修复LVM
关联文档
- Linux 基础:系统启动
- Linux CPU 100% 排查:CPU 排查
