90%的“无法启动”只需1–2个命令修复:先用live usb运行lsblk -f比对uuid与/etc/fstab、grub.cfg;/boot完整则chroot后执行grub2-mkconfig;initramfs缺模块需dracut –force –regenerate-all。

系统崩溃后怎么快速判断该走哪条恢复路径
别一上来就重装,90% 的“无法启动”其实只需要 1–2 个命令就能救回来。关键看 systemd 是否能接管、/boot 和 /etc/fstab 是否完整、以及根文件系统能否被挂载。
常见错误现象:Kernel panic - not syncing: VFS: Unable to mount root fs,说明内核找到了,但找不到根分区;dracut: FATAL: No root device "UUID=..." found,多半是 initramfs 没包含对应驱动或 UUID 写错了;Failed to start default target 则大概率是 systemd 配置或服务依赖崩了。
- 先用 Live USB 启动,
lsblk -f看分区结构和实际 UUID,和/etc/fstab、/boot/grub2/grub.cfg里写的比对 - 如果
/boot完整但内核不加载,用chroot进去后执行grub2-mkconfig -o /boot/grub2/grub.cfg重生成配置 - 如果
initramfs缺模块(比如 RAID/LVM/加密卷),必须用dracut --force --regenerate-all重建,不能只靠update-initramfs(那是 debian/ubuntu 的)
chroot 失败的三个高频原因和绕过方法
chroot 不是万能钥匙,它卡住往往意味着底层环境没对齐,而不是操作错了。
使用场景:你已经挂载了原系统的 /、/proc、/sys、/dev,但 chroot /mnt 报错或进去了却找不到命令。
-
chroot: failed to run command '/bin/bash': No such file or Directory—— 实际是/lib64/ld-linux-x86-64.so.2缺失或架构不匹配,检查file /bin/bash和当前 Live 环境是否同为 x86_64 - 进去了但
systemctl报Connection refused—— 忘了mount --bind /proc /mnt/proc等,缺任意一个伪文件系统都会让 systemd 启动失败 - 进去了命令能跑,但
grub2-install提示cannot find a GRUB drive for /dev/sda—— Live 环境没加载dm-mod或raid1模块,先modprobe dm-mod再试
GRUB 引导修复时最容易写错的两个配置项
不是所有 GRUB 错误都要重装 GRUB,很多只是配置项指向了不存在的设备或内核参数写崩了。
性能 / 兼容性影响:错误的 root= 参数会导致内核根本找不到根设备;漏掉 rd.lvm.lv= 或 cryptdevice= 会让 initramfs 卡在解密/激活阶段,看起来像“黑屏不动”。
-
root=UUID=...必须和blkid输出完全一致,大小写、短横线一个都不能错;用root=LABEL=ROOT更稳妥,但得确保e2label或xfs_admin -L真设置了标签 -
rd.md.uuid=和rd.lvm.vg=必须和mdadm --detail --scan、vgs -o vg_uuid,vg_name输出严格对应,多一个空格或少一个点都会让 dracut 跳过识别 - 加密卷要同时写
rd.luks.name=xxx和rd.luks.uuid=yyy,且yyy必须是cryptsetup luksDump /dev/sdX1 | grep UUID的值,不是blkid输出的
备份 initramfs 和 grub.cfg 哪些文件才算真正可恢复
只备份 /boot/vmlinuz-* 和 /boot/initramfs-*.img 是不够的,它们本身不带设备识别逻辑,全靠 initramfs 里打包的内容和 grub.cfg 的参数驱动。
容易踩的坑:有人定期 rsync /boot,但忘了 initramfs 是构建产物,每次内核更新、驱动变动、LVM/RAID 配置变更都必须重新生成,否则备份的是“过期快照”。
- 必须存一份可执行的恢复脚本,至少包含:
chroot /mnt dracut --force --regenerate-all、chroot /mnt grub2-install /dev/sda、chroot /mnt grub2-mkconfig -o /boot/grub2/grub.cfg - 每次系统更新后,用
lsinitrd /boot/initramfs-$(uname -r).img | grep -E "(lvm|raid|crypto)"确认关键模块已打入,别等出事才查 - GRUB 配置备份不能只留
grub.cfg,还要存/etc/default/grub—— 因为grub2-mkconfig是靠它生成的,丢了就只能手动拼参数
最麻烦的不是恢复动作本身,而是你得在出问题前就知道哪些 UUID、LV 名、加密卷名是动态生成的,没法硬编码。这些名字一旦变,所有备份的配置就失效。