装BBRplus重启后连不上服务器怎么办

装BBR原版一般不会出问题,因为不需要换内核,主流系统内核默认都支持。但BBRplus不一样,早期版本必须替换成专门编译的内核才能用,这一步一旦出问题,轻则装不上(参考BBRplus内核版本不支持怎么办),重则重启之后直接连不上服务器,SSH进不去,网页管理面板也打不开,这种情况比"装不上"更让人紧张,但通常是可以救回来的,不用直接重装系统。

为什么换内核会导致重启后连不上

这类问题几乎都出在两个地方,跟BBRplus这个算法本身没关系,是"换内核"这个操作带来的副作用。

第一种:新内核缺少虚拟化网卡驱动

VPS服务器大多跑在KVM、Xen这类虚拟化平台上,网卡是虚拟出来的(常见的是virtio-net这种半虚拟化网卡),需要内核里编译进对应的驱动才能正常工作。如果换的这个新内核编译的时候没有把virtio网卡驱动编译进去,或者编译方式跟你的VPS服务商用的虚拟化平台不匹配,新内核启动之后系统本身是正常运行的,但网络接口起不来,表现出来就是"服务器好像挂了,SSH连不上",其实系统在正常跑,只是没网络。有真实案例就是这种情况,最后是在VPS服务商的控制面板里,把网卡类型手动切换成"Virtio"之后才恢复正常。

第二种:GRUB没有正确指向新内核,或者引导配置出错

装完新内核,理论上系统会自动更新GRUB配置、把新内核设置成默认启动项。但如果这一步出了问题(比如脚本执行到一半中断、多个内核版本混在一起GRUB配置写乱了),重启后系统可能卡在GRUB选择界面等待手动选择,或者启动进了一个残缺、有问题的内核环境,同样表现为"连不上"。

第三种:内核缺少必要的启动模块,报FATAL: Module scsi_wait_scan not found

这个错误比较老,但在一些较早的CentOS系统上换内核时依然会遇到,报错发生在系统启动过程中,提示找不到scsi_wait_scan这个模块,导致内核无法正常完成启动流程。这个模块在较新内核里已经被移除,但一些旧的初始化脚本(dracutinstallkernel模块配置)里还在引用它,新旧版本对不上就会报这个错。遇到这种情况,需要进入救援模式,修改/usr/share/dracut/modules.d/90kernel-modules/installkernel这个文件,把其中引用scsi_wait_scan的那一段配置去掉,再重新生成一次initramfs,具体怎么改需要对照你系统里这个文件的实际内容,不建议照抄网上找到的固定patch内容,因为不同系统版本这个文件写法可能有差异。

先别慌,大部分VPS服务商都有救援模式

不管是上面哪种原因,先确认你的VPS服务商控制面板里有没有"救援模式"(Rescue Mode)或者"VNC控制台"这类功能,这是解决这类问题最直接的入口,不需要依赖SSH。

进入VNC控制台之后,能直接看到服务器屏幕上实际显示的内容(而不是通过网络连接),可以看到:

  • 如果卡在GRUB界面等待选择,直接用键盘手动选一个能正常进的旧内核启动,先把服务器恢复上线
  • 如果能看到具体的报错信息或者卡住的位置,能更准确判断是驱动问题还是引导配置问题

如果控制面板里有独立的"救援模式"(跟正常系统盘分开的一个临时救援环境),可以进入救援模式之后把原来的系统盘挂载上,检查引导配置:

1
2
mount /dev/vda1 /mnt
chroot /mnt

进入之后可以用grub-mkconfig(Debian/Ubuntu)或者grub2-mkconfig(CentOS)重新生成一次GRUB配置,很多时候单纯是这一步没跑对导致的问题,重新生成一次就能修好。

更稳妥的做法:换内核之前先确认好退路

与其等出问题再救,不如换内核之前先把安全网准备好,这几步不麻烦,但能省很多事:

  • 提前确认自己的VPS服务商控制面板,能不能进VNC或者救援模式,装内核之前先熟悉一下入口位置,真出问题的时候不至于手忙脚乱现学
  • 如果服务商支持给服务器打快照,换内核之前打一个快照,出问题直接回滚,比排查GRUB和驱动问题快得多
  • 换内核的过程中不要中途强制中断脚本,也不要在脚本还在跑的时候手动重启,等它完整走完流程再重启

如果实在排查不出来

如果确认不是网卡驱动、也不是GRUB配置的问题,可以考虑换一个对内核兼容性要求更低的方案,比如参考Jinwyp一键脚本安装BBR和BBRplus内核教程里维护更新、适配更完整的脚本重新来一次,或者干脆放弃BBRplus,改用不需要换内核的原版BBR,省去这一整类风险。