一、先吃透完整启动原理(卡死根源定位依据)
完整启动链路:
BIOS/UEFI自检 → GRUB2引导 → 内核+initramfs镜像加载 → 内核挂载临时rootfs → 切换真实磁盘根分区 → 内核拉起PID1 systemd(原init位置) → systemd依次执行target链
initrd.target → sysinit.target → basic.target → multi-user.target/graphical.target
卡在init=卡死在systemd拉起→执行target区间,分2个层级故障:
- 内核层卡死:找不到/无法执行/sbin/init(软链接指向systemd),报错:
Failed to execute /sbin/init、VFS unable mount root; - 用户态systemd卡死:根能挂载,但挂载fstab/启动某服务死循环阻塞,卡在开机滚动条、黑屏不动。
二、第一步:紧急进入修复环境(单用户/救援,必操作)
方式1:GRUB修改内核参数进入急救shell(虚拟机/物理机VNC首选)
- 开机GRUB菜单选中内核,按
e编辑启动项; - 找到
linux16开头内核行:
- 方案A(最简):行尾添加
init=/bin/bash,删除rhgb quiet(关闭开机静默日志,看报错); - 方案B(标准redhat急救):行尾添加
rd.break;
Ctrl+X启动,直接进入root无密码shell;- 重新挂载根分区可写:
mount -o remount,rw /
# rd.break进入时根是sysroot,执行:mount -o remount,rw /sysroot ; chroot /sysroot
操作完修复后:exec /sbin/init 正常启动系统。
方式2:系统盘挂载到其他机器/安装光盘救援模式
无法进GRUB时,CentOS7安装U盘启动→救援模式,挂载原系统分区排查。
三、分级排查(从高频→低频,按顺序排查)
1. 最高频:/etc/fstab配置错误(90%卡init场景)
原理
systemd执行sysinit.target时自动挂载fstab所有分区,UUID写错、分区不存在、文件系统损坏、swap异常,挂载阻塞直接卡死开机。
修复步骤
# 单用户下编辑fstab,注释异常行
vi /etc/fstab
# 临时全部注释所有非/分区,#开头,先开机,再逐个排查
# 查看磁盘UUID,核对fstab
blkid
# xfs/ext4分区损坏修复
xfs_repair /dev/xxx
fsck -f /dev/xxx(ext4禁止挂载中执行)
2. /sbin/init软链接丢失/systemd文件损坏(内核报错找不到init)
原理
/sbin/init是软链接→/usr/lib/systemd/systemd,文件误删、glibc依赖缺失、二进制损坏,内核拉起init失败直接卡住。
# 检查软链接
ls -l /sbin/init
# 正确输出:lrwxrwxrwx /sbin/init -> ../usr/lib/systemd/systemd
# 修复链接
ln -s /usr/lib/systemd/systemd /sbin/init
# 校验systemd完整性
rpm -V systemd
# 缺失文件重装systemd
yum reinstall systemd
3. rc.local自启脚本死循环/异常命令阻塞启动
原理
multi-user.target加载/etc/rc.d/rc.local,脚本死循环、挂载异常、错误命令,阻塞后续服务启动卡死。
# 注释rc.local所有内容
vi /etc/rc.d/rc.local
# 取消执行权限
chmod -x /etc/rc.d/rc.local
4. SELinux策略损坏导致无法启动systemd
原理
误关/开启SELinux、selinux上下文损坏,systemd无法读取系统文件权限卡死。
# 临时关闭SELinux开机,grub内核行添加:selinux=0
# 单用户永久关闭
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
# 修复上下文
restorecon -Rv /
5. 磁盘根分区空间100%占满
原理
根分区爆满,systemd无法创建临时文件、日志,初始化阻塞。
df -h
# 清理大文件
find / -type f -size +1G
6. 某核心系统服务异常卡死systemd并行启动
原理
systemd并行启动服务,关键服务(network、lvm2、udev)故障死锁,阻塞target。
临时绕过:GRUB内核参数指定启动救援目标
# linux16行末尾添加 systemd.unit=rescue.target
进入救援模式后查看异常服务:
systemctl --failed
# 禁用故障自启服务
systemctl disable xxx.service
7. initramfs镜像损坏(内核阶段找不到驱动,无法挂载根)
报错特征:卡在Loading initial ramdisk、VFS: Cannot open root device
# 救援模式重建initramfs
dracut -f /boot/initramfs-$(uname -r).img $(uname -r)
四、开机查看详细日志(定位精准卡死点)
- GRUB去掉
rhgb quiet,开机输出详细内核+systemd日志,看最后报错关键词; - 正常开机后查看历史启动日志:
journalctl -b -1 # 上一次失败开机完整日志
五、速查故障对照表
| 卡死现象 | 故障点 | 修复方案 |
| 报错Failed to execute /sbin/init | systemd丢失/软链接异常 | 修复init软链接、重装systemd |
| 挂载磁盘超时、提示mount失败 | fstab错误/分区损坏 | 注释fstab异常项+fsck/xfs_repair |
| 滚动条长时间不动无报错 | rc.local死循环/服务卡死 | 注释rc.local、rescue.target禁用故障服务 |
| SELinux denied日志 | SELinux损坏 | 临时selinux=0、修复上下文 |
| VFS unable mount root | initramfs/root参数错误 | 重建initramfs、核对grub root=设备 |
需要我整理Obsidian可入库笔记版,或者补充救援模式实操命令清单?
关联文档
- ../system/Linux 基础 — 系统启动
- Linux CPU 100% 排查 — CPU 排查