Linux启动失败应先查日志和运行级别:GRUB卡住需检查配置或内核参数;“Started Switch Root”后失败多因根分区挂载问题;服务failed需排查依赖和配置;早期日志需启用journald持久化。

Linux系统启动失败时,不要急着重装,绝大多数情况能通过启动日志和运行级别定位到具体环节。
开机卡在GRUB菜单或直接黑屏
这通常不是内核问题,而是GRUB配置损坏或磁盘识别异常。先确认是否能看到GRUB菜单——如果完全无响应,可能是BIOS/UEFI启动顺序错误,或硬盘未被识别;如果能进GRUB但选中启动项后卡住,重点检查grub.cfg里linux行的内核参数是否误删了root=或写错设备名(比如把/dev/sda2写成/dev/sdb2)。
临时修复方法:在GRUB菜单按e编辑启动项,找到linux开头那行,在末尾加上systemd.unit=multi-user.target跳过图形界面,再按Ctrl+X启动。进系统后立即执行:
sudo update-grub sudo grub-install /dev/sda
- 注意
/dev/sda要换成你实际的系统盘,别用lsblk确认清楚 - UEFI模式下还需挂载
/boot/efi并运行sudo grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu - 如果
update-grub报cannot find a device for / (is /dev mounted?),说明/etc/fstab里某一行UUID已失效,用blkid核对后修正
启动卡在“Started Switch Root”之后
这是initramfs阶段结束、正切换到真实根文件系统的典型位置。失败原因几乎全是根分区无法挂载,常见于:
-
/etc/fstab中某行指定了不存在的设备或错误UUID,导致systemd尝试挂载失败并阻塞 - 缺少必要内核模块(如ZFS、Btrfs、LVM或加密模块),initramfs没打包进去
- 根分区文件系统损坏,
fsck被跳过或失败
按Ctrl+Alt+F2切到tty,登录后检查:
journalctl -b -p err | grep -i "mount\|fsck\|failed" lsinitrd | grep -E "(zfs|btrfs|dm-crypt|raid)"
若发现缺失模块,重新生成initramfs:
sudo dracut -f --regenerate-all
Debian/Ubuntu系则用:
sudo update-initramfs -u
能进系统但服务大量failed(尤其是networking.service或ssh.service)
这不是启动流程中断,而是systemd服务依赖链断裂。别只看systemctl status ssh,先跑:
systemctl list-units --state=failed systemctl list-dependencies --reverse ssh.service
常见诱因:
-
/etc/network/interfaces语法错误(Debian系)或/etc/systemd/network/下某个.network文件路径拼错 -
systemd-networkd和NetworkManager冲突共存,其中一个被mask但没停干净 -
sshd配置里ListenAddress绑定了一个尚未up的IP(比如静态IP配在eth0,但网卡名实际是enp0s3)
临时启用网络可手动:
sudo ip link set enp0s3 up sudo dhclient enp0s3
再查sshd是否监听:sudo ss -tlnp | grep :22
journalctl看不到早期启动日志(比如GRUB之后、login之前)
默认journal只保存本次启动日志,且systemd-journald服务自身可能没起来。必须提前配置持久化:
- 确保
/var/log/journal目录存在且权限为drwxr-sr-x root systemd-journal - 修改
/etc/systemd/journald.conf,取消注释并设为Storage=persistent - 重启journald:
sudo systemctl restart systemd-journald
否则只能靠物理串口、kdump或启动时加loglevel=7和systemd.log_level=debug参数临时抓屏日志。
最易被忽略的是:很多“启动失败”其实发生在用户会话层面(比如Display Manager反复崩溃、~/.profile语法错误导致bash退出),此时系统早已完成启动,但没人告诉你——得去/var/log/lightdm/或journalctl -u gdm里翻。










