Skip to Content

救援谢老师工作站

本次修复充分说明了越级打 Boss 的坑爹之处。可伶我看了那么久鸟哥,到实战却发现敌人变强的速度远比我快,完全看不出升级的效果啊。

补充一句,鼓捣主板 BIOS 真的很耗时、很耗时、很耗时。因为要在启动的那一瞬间抓住菜单(Boot Options 和 Grub),抓不到就重来,所以我就只能各种重启,强制关机。如果你经验丰富,电脑启动超快,那么恭喜你,估计你只需要 半天 抓不到就重来就能完成任务。

说正事,此次原因最终鉴定为更新被打断。别的软件也就算了,关键是核心更新被打断了。于是最新的核心就只有 vmlinuz 而没有 initramfs 了,不挂才怪啊。

起因

首先,当时为了加 monodeset,而按照必应搜到的某个 中文网页 修改 grub2:

在安装启动的时候,加入nomodeset 参数。

如果你已经安装完毕,则可以修改vi /etc/sysconfig/grub,加入nomodeset 参数:

GRUB_CMDLINE_LINUX=”rd.md=0 rd.dm=0 KEYTABLE=us SYSFONT=True
rd.lvm.lv=vg/lv_root rd.luks=0 rd.lvm.lv=vg/lv_swap LANG=en_US.UTF-8
rhgb quiet nomodeset”

然后执行:

grub2-mkconfig -o /boot/grub2/grub.cfg

后来仔细读鸟哥,以及查看其他 CentOS 的 grub.cfg 才发现不对啊。这明明是按照鸟哥测试机的安装方式(也许是 CentOS 默认方式,总之有个 LVM,swap 之类的)才需要的参数啊,那你就写清楚啊。不然如果其他人的安装方式和你的不同,又用了你的方法的话,就不能开机了啊啊啊。简直就是放 your wind 啊,以后坚决不偷懒了,遇到问题一定要用Google 搜索英文关键词。引用鸟哥的一段话以表鄙视:

像以前 Google 还没有这么厉害时, 人们都到讨论区去问问题,某些高手高手高高手被小白烦的不胜其扰,总是会回答:“喔!你的系统有问题喔!那请 rm -rf / 看看出现什么状况! 做完再回来!”……你真的做下去就死定了!

经过

当时显示无法挂载文件系统,然后卡死。由于知识掌握不牢固,我误以为是 grub 的问题,就在 grub 界面 e 改参数,但一直失败。事后才发现真正的原因是缺少 initramfs,导致核心不知道如何挂载文件系统。(没错,我们可爱的核心连默认的 xfs 都不认识,只能靠initramfs 自解压成虚拟文件系统。)

中途在 BIOS 选启动项时,觉得有些设置可能不小心改错了,就来了个还原出产设置。然后就爆炸了,开机时都报警了,吓得我手中的蝴蝶都飞走了。Google 一下,BIOS => Advanced => PCIe/PCI/PnP Configuration => enable Above 4G Decoding.

后来在另一块硬盘装 Ubuntu MATE,想用它来带动 CentOS。这时就意识到独立 /boot 分区的弊端了,Ubuntu MATE 识别不了 CentOS,手动改了好久 grub.cfg 也不行。

顺便又出了另一个 BIOS 的问题,Ubuntu MATE 内按关机之后主机一直响个不停,直到强制长按电源键才安静下来(可怜的硬件啊)。然后Google又告诉我了,ACPI Settings -> ACPI Sleep State -> Suspend Disabled(不同主板名称可能不一样,总之就是把它给关了)。然后我就想啊,这样打地鼠也不是办法,干脆一箩筐端了吧。不过毕竟懂得少,最后只改了ACPI Settings -> NUMA -> Disabled1,其他的就不敢乱动了。

还有一点是默认第一启动项好像是什么网络启动,一直告诉你找不到,不慎进去的话就只能长按电源键了(按任意键重试啊哈哈哈)。

高潮

顺利关机之后,又不能开机了,记不清是什么时候起 Ubuntu MATE也黑屏了。不过读完鸟哥的人怎会怕这个,直接修改 grub 菜单项,加上 systemd.unit=multi-user.target,在tty1 login 之后 startx 就好了。

之后做了 CentOS 启动盘,rescue 了一下,还是不行2

嫌 Ubuntu MATE 太麻烦,直接覆盖安装 UEFI 的 CentOS。虽然没有方便的 update-grub 指令,得用grub2-mkconfig -o /boot/efi/EFI/centos/grub2/grub.cfg,但果然是自家亲,probe 出的 grub 菜单项貌似是写对了。然而这次告诉你找不到 linux,改成 linux16 也不成,因为 UEFI 不认 BIOS。但是 UEFI 的 Ubuntu MATE 是可以带动BIOS 的 Ubuntu MATE的(在折腾205的台式机时验证的),就不能有哪个系统两者都做到吗?

抱怨是没有用的,于是我抱着放弃的心态,又覆盖安装了 BIOS 的 CentOS,可是事情总是出乎我的意料,这一次居然成功了!

结局

但是也不要高兴得太早,OS probe 的选项中,默认是什么 rescue,我还是更想要先进原来的系统。高级菜单有四个,第一个还是 Rescue,然后依次是3个核心(太久没更新了,一次新加了两个核心)。

更新强迫症的我自然是先进最新的,然后就挂了。

接下来是第三个,为保险起见还是先终端界面吧。yum updategrub2-install 鼓捣了一下,系统提示什么更新未完成之类,于是大致能猜到原因了。可惜 startx 挂了,输一次坏一个终端,都逼得我切到 tty7 了,各种 log 的错误信息都 Google 不到,我又不想折磨 xorg 的各种配置文件。

现在只剩最后一个核心了(原来的那个),很可惜这一次……又成功了哈哈。其实第一次失败了,但幸运的是能联网,yum install xorg-x11-drv-nouveau 之后就完全好了。终于回到最开始的桌面了,喜极而泣啊。

不过还是有些善后得做,学习了 yum reinstall 这个命令,修复之前的更新过程,给最新的核心补好了initramfs(所以上文最新的核心才不能用),试了试能不能直接进图形界面。

尾声

最后就是硬盘启动项的问题了,主要是当时被 Boot 选项迷惑了,选择 DUAL(LEGACY+UEFI)时多达16个选项,我就误以为两块硬盘一定都能在这些选项中找到,但是我鼓捣了千百遍也只有一个 STATA0 P1(上文提到的第二系统)。最后我才意识到那16个选项各司其职,管你几块硬盘统统只有两个选项:BIOS 或 UEFI。想选硬盘请到下面的 Hard Disk Drive BBS Priorities 中设置顺序,这才终于找到了STATA0 P3。想来装第二系统时,应该是偷偷改了硬盘顺序,你改顺序没关系也教我改改呗,别改完就跑啊。

最后心疼一下被强制关机无数次的工作站,以后再不会这样对你了。

后记

回忆一下真是走了不少弯路啊,最开始 grub 界面 e 改参数时应该就能直接成功,只要你选对核心,三选一呵呵呵;后来各种 recuse 和 grub2-install 应该也能成功,可惜我被那16个选项唬住了。不过编程就是这样,不经历死去活来的痛苦如何能学得真本领呢。还是没有学到 grub2> 的语法,以后有机会再说吧。

虽然我估计一辈子也不会再动那台电脑了,但主板 BIOS 设置应该也是有一定通用性的,这里附一些供以后参考:

  • Save & Exit => Save Changes and Reset 大致等于保存更改然后重启
  • Boot Override 则是从相应选项直接启动系统。

  1. 事后这一点发现解决了之前遇到的 swap 爆满的问题:256G 的内存空着不用,居然去抢那 1G 的 swap,闲得X疼啊。 ↩︎

  2. 此时应该是可以启动的,不过需要改启动磁盘。 ↩︎