Debian GRUB踩坑记——out of memory
起因
偶然在网上刷到一个很好看的grub引导界面,才发现原来grub也能设置主题,而且这种设置只是更改grub配置文件,不操作引导程序的二进制文件,因而不会影响Secure Boot
于是找了一个超好看的主题给grub安排上
结果就是:
Error: out of memory
Press any key to continue…
然后进不去系统了。。。
折腾
解决方案可以直接去下一节
首先出的问题是选择Debian引导后加载initramfs时提示内存耗尽
然后按下任意键提示:Kernel Panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
因为我启用了luks全盘加密,所以这种情况第一反应是引导找不到加密分区了
问了一下ChatGPT,给出的方案是GRUB配置错误或者initramfs损坏
但是在此之前我都能正常启动系统,而且我也只是对GRUB进行了更改,没有动initramfs,所以排除initramfs损坏
然后我给ChatGPT拍了一下GRUB中Debian引导的引导脚本,ChatGPT说是initramfs中没有包含LVM支持,但同样的,我根本没动initramfs,而且之前也能正常开机
给ChatGPT说了一下,并附上了引导脚本,然后给出了修改引导脚本的方法,这里就开始鬼畜起来了
让我给内核文件路径和initramfs文件路径加上/boot
前缀,说如果/boot是独立分区,不加前缀是找不到内核和initramfs的(开始胡言乱语起来了)
按照它说的,加了前缀之后引导直接找不到内核文件了。。。
给ChatGPT反映了一下该情况,ChatGPT马上改口,说不要加/boot
前缀。。。
自己又怀疑了一下是不是存储介质的问题,毕竟是U盘,插到电脑上当作系统盘温度超高(把我的USB Hub连带着一起烫),没测过温度,反正手放在上面超过半秒就烫得受不了
引导到windows下用dg扫了一下,除了几十个严重,其他大多数都是良好,这种结果的话那就没什么参考价值了
没办法,只能拿另一个U盘装个Live CD来抢救
然后就是不知道自己是那根筋没对,把Live CD刻在DVD上折磨自己😅
好不容易把iso刻录完成,启动系统启动了十多分钟。。。
启动完成后解锁分区,挂载分区,update了一下grub(以为是grub损坏了)
reboot,很好,问题依旧
不想再浪费时间启动DVD了,重新拿个U盘把Live CD刻了上去。。。
继续深问,然后说最稳妥的启动配置是不加前缀的那个,那不就和原来一样的了,变成最开始的问题😂
然后ChatGPT继续复盘,又说是initrd.img缺少luks和lvm模块。。。
我都说了快八百遍了没动initramfs
算了,选择怀疑一下自己,进Live CD挂载好原来的分区,执行update-initramfs -u
重新生成一下
不出所料,还是一样的问题。。。
最后想着,看看把grub配置恢复成没安装主题的时候会怎么办(丝毫没怀疑是主题的问题)
注释掉主题配置行,执行update-grub
诶👆🙄,引导成功,进入系统
虽然成功进入系统,但是还是没搞懂原因,于是把解决方案给ChatGPT说了一下,又开始了胡言乱语。。。
说是主题会替换grub.cfg模板,阻断加密检测的执行云云
但我实际对比了一下启用主题和没启用主题下生成的grub.cfg的区别,就单纯多了一个加载主题资源的代码而已
而且整个主题都是我手动cp装的,根本没执行主题自带的安装脚本
后面继续胡言乱语,说要加入DRUB_ENABLE_CRYPTODISK=y
来解锁Boot分区,但是我tm根本没加密boot分区啊啊啊。。。
启用luks全盘加密下根本不能加密boot分区,不然谁给你解密分区。。。
然后我给它“善意”的提醒了一下,马上又改口不用加。。。
还是得靠自己,控制变量法下找了另一个评级最高的主题试了一下,发现居然可以成功引导
间接证明ChatGPT前面一大堆都是废话。。。
突然灵光一现想着会不会有什么内存限制?
出问题的那个主题有13MB大小,没问题的那个主题只有0.7MB大小,并且最开始也是out of memory
,或许根本不是什么找不到加密分区,一开始方向就错了!!!
问了一下ChatGPT,发现确实是有内存限制,不过不同设备限制不同
以防万一,去AI Studio顺便问了问Gemini,也是肯定有相关限制,但是具体限制多少以及怎么解除限制说不出来
Gemini留的链接:
https://www.ibm.com/support/pages/system-boot-ends-grub-out-memory-oom
https://forum.endeavouros.com/t/grub-out-of-memory/30967/38
梳理了一下,得到了最终的结果
结果
由于使用了较大的主题,导致GRUB out of memory,然后由于out of memory,导致luks模块和lvm模块没加载进内存,因此无法解密加密分区,出现Kernel Panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
当主题换成较小的主题时未触发out of memory,正常加载模块,解密加密分区,进入系统。
回想起来,设置那个有问题的主题的时候,第一次分辨率配置格式没配置正确,导致引导界面分辨率超低,但也使得没有out of memory,成功引导进入系统,第二次正确配置成2560x1440的2k分辨率后就出现out of memory了(高分辨率特别占memory)。
具体memory大小我也不知道怎么查,可能是128MB?256MB?还是512MB?
不过这个memory会加载系统内核,initrd,还有各种模块,我看网上有些人的initrd文件大小高达100MB+,正常引导不设置主题都会出现out of memory😂
Use this card to join MyBlog and participate in a pleasant discussion together .
Welcome to GoodBoyboy 's Blog,wish you a nice day .