记一次关于NVROM中遇到的“Could not prepare Boot variable:No space left on device”问题的解决历程

Posted busui

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了记一次关于NVROM中遇到的“Could not prepare Boot variable:No space left on device”问题的解决历程相关的知识,希望对你有一定的参考价值。

注:关于我电脑遇到的问题,不是一两句话能够说清楚的。为了能够比较完整的呈现问题的某些细节,在这篇博客中我会添加许多问题发生的背景,如果当中有观点与您的三观不合,请立即停止阅读,及时止损。


第一次进入计算机专业

大学选的是计算机专业,但与这个专业的真正接触,却是在一次重装系统当中。(个人觉得)和身边大多数同学一样,在学习学校开设的计算机课程中,我也没有爱上“计算机”。而那时候,正是Windows 10的推广时期。当时我们那一批人买的电脑估计都是Windows 7/8,而我的电脑,正是windows 8。当时Windows 10的推广软文和windows 8的“黑帖子”使得我没怎么思考便懵懵懂懂地加入了“升级Windows 10大军”中去了。

虽然已经学了一点C语言和数据结构,但是对于计算机的使用来讲,我几乎停留在“聊QQ看视频听音乐”(那时不玩游戏)的层次上,十足十一个“没见过世面的小白”。
此前我从来没有装过系统。所以关于怎么装系统,我问了百度(很久之后才知道可以在Windows设置里直接升级)。

阴差阳错,我误装了了另外一个系统--Ubuntu。莫名其妙之下,看了几篇文章,才知道这个世界原来不只是有Windows系统,还有(类)Unix系统等等......。这些文章一下子让我迷上了Linux系统,很快地我便买了一本多人推荐的书:《鸟哥的私房菜--基础版》。那时候呀,就像一个情窦初开的少年,一下子找到了心爱的姑娘,我怀着无比激动的心情,花了一周多把这本书看完了,也照着里面的代码敲了一遍。从此,我才算真正的进入了计算机专业,成为了无数求学学子中普通的一员。

说了这么久,这里我要交代一下我脑的配置了,以为往后的故事,都与之有关。
我电脑配置是这样:联想拯救者14-ISK(i7经典版)
Bios版本是这样:
技术图片


开始进入装双系统的“坑”

装双系统向来比较流行,大概20天后我便来了装双系统的兴趣。因为几乎什么都不懂,所以只能跟着一些博客文章一步步做,愣着不懂mbr分区和GPT分区的异同,搞了很久也没有搞定。很多次都是装好了linux系统,但启动的时候只能进入Windows 系统。后来不知道是哪儿看的重刷BIOS能解决问题,所谓初生牛犊不怕虎,我便不假思索便刷了BIOS。刷完BIOS就,把固态格式化,将分区换成了MBR,也在BIOS做了相应设置,最后终于成功地搞定了双系统启动。强烈的满足感让我很长一段时间都很激动。
之后我便几乎都在linux下用vim来敲C语言。


三系统!

大概花了半年时间,我学习了C语言和一部分shell命令,同时也对linux的使用熟悉了很多。后来网上冲浪时,我发现原来可以在普通的笔记本上装上苹果系统mac OS,也就是俗称的黑苹果。毫无悬念,我被这个“旁门左道”(我叔叔这么说的)牢牢地套住了,接下来的几乎一个月,我几乎每天六点起床,装了一百多次系统。看了许多篇文章,每次失败,都得按(先装Windows,再装ubuntu,再装黑苹果)这个顺序重来一遍。直到我发现了这个网站tonymacx86,很吃力地看了里面许多教程,多次利用easyuefi,才成功地装好了三系统。由于电脑固态只有可怜的128G,我经过多次思考,终于想到了一个办法,就是把Clover 引导程序装在u盘efi分区里(装黑苹果需要在U盘划分EFI分区),Windows10和ubuntu装在固态里,Mac OS装在机械硬盘里。
大概是这样:

  • Windows 10 大概80G(固态里)(EFI分区和MSR分区也在这里,但下图中MSR分区没显示出来);
  • ubuntu: 大概39G(固态里);
    技术图片

  • Mac OS: 100G(机械硬盘里);

然后按下面步骤干活:

  1. 用U盘EFI里的引导程序进入硬盘上的MAC OS系统;
  2. 在MAC OS里,先把固态下EFI里的Windows引导程序和ubuntu引导程序备份好;
  3. 再把U盘上EFI分区的EFI文件复制到电脑上的EFI分区里,最后再把开始你备份的固态下EFI里的Windows引导程序和ubuntu引导程序复制进clover文件夹里。

理论上你进入其他系统也能将U盘EFI分区里的文件复制到固态里的EFI分区里,但由于mac os下挂在efi分区比较方便,我一直是在mac os里对efi进行复制移动文件操作

做到这里,如果你没有U盘,你是进不去电脑上的系统,你得再借助U盘进入Windows系统,然后借助easyuefi把clover引导条目添加到BIOS启动项目里,这时候,不需要U盘,你也能进入电脑中任何一个系统了。
启动界面大概这样:
技术图片

然而成功点亮系统只是第一步,黑苹果里面的很多驱动,得自己修改源码(当然有教程),才能继而点亮驱动。所以,之后的几乎一年里,我基本上都在搞三系统。也就是在这段时间里:

  1. 我意识到英语十分重要,花了很大功夫在学习英语里;
  2. 解决事情之前,你需要良好的知识背景才能让你想出清晰正确的思路;

开始遇到问题!

同时也是装三系统那段时间里,我的电脑固态坏了,联想售后给我免费换了一条。也就是这个时候,我的电脑无法再次写入新条目(也就是BIOS里无法添加新的Boot引导)。我到现在都无法判断,为什么无论我重装了多少次电脑,还是不能在BIOS里写入新的条目,哪怕我只装Windows系统,也不行。

为了测试,我把电脑机械硬盘拆下来,把固态硬盘重新格式化,重新分区,然后再重装Windows 10系统,还是不行,无法在BIOS启动项里添加新条目,大概就是下面这样:
技术图片

虽然说不能在BIOS里添加新条目,但适当的设置,还是能够进入系统的(偶尔无法进入重复按F8可以解决)。所以过去的一年里,我一直使用Windows,偶尔需要linux环境通过虚拟机\\云主机\\git软件解决(git bash挺好的),而我的时间更多是花在编程上了。但问题还是一直没有被解决:无法往BIOS添加新条目,也就是无法添加开机引导!!!


亟需解决问题

由于跟了导师做项目,需要真正的linux环境,所以维持一年左右的纯Windows环境被打破了。这一次也经历了十几次重装系统,每次都遇到ubuntu下“无法将grub-efi-amd64-signed软件包安装到/target”问题,虽然应用某些技巧可以正常双启动,但在使用ubuntu时时不时会遇到和“grub-efi-amd64-signed”相关的错误或者直接死机了。这使得我十分苦恼。

之后凭借经验和阅读相关文章,我知道是采取GPT分区格式时,需要设置一些参数,才能装好系统。但我不想再装ubuntu了。换了manjaro,一次点亮,成功双启动!除了无法往BIOS添加新条目,其他一切都好了。

但这一切美好,在今天下午又被打破了,我升级了Windows 10系统,估计是个大升级,Windows 10系统自己又多分了一个恢复分区,而EFI里的东西也被更新了,所以我现在只能这样启动系统:
技术图片

按照正常来说,进入manjaro后,更新grub就可以了,但是“无法往BIOS添加新条目”问题让我无法更新grub!如下:
技术图片
技术图片

我尝试把grub装在EFI分区/dev/sdb1和整个硬盘开头位置/dev/sdb都不成功。后来我想到了还没挂载,于是我就先挂载,再装grub,但还是失败,原因还是没空间,如下:
技术图片

猜想问题根源

根据电脑本身一直存在的问题无法往BIOS添加新条目和linux下的报错信息,还有阅读了一些文章帖子帖子1帖子2,我终于把我电脑的问题根源和NVROM联想到一起。只是我无法确定:

  1. 是因为我使用easyuefi对boot引导操作不当/太频繁;
  2. 还是我重刷了BIOS版本留下了暗病;
  3. 还是我装太多次电脑对主板NVROM造成了损害;

才最后造成我的NVRAM没有空间写入新条目呢?


怎么解决?

我联系了联想的工程师,把我的情况和linux下的输出信息发送给他们看,得到下面回复(注:本人对联想工程师态度中立,并无黑他们之意,计算机知识很多,不可能都懂,他们没遇到过我的问题是正常的):
技术图片

还是没解决问题。打算明天去联想售后看一下。
未完待续......

以上是关于记一次关于NVROM中遇到的“Could not prepare Boot variable:No space left on device”问题的解决历程的主要内容,如果未能解决你的问题,请参考以下文章

could not find or load main class

关于Ubuntu中Could not get lock /var/lib/dpkg/lock解决方案

windows 中使用hbase 异常:java.io.IOException: Could not locate executable nullinwinutils.exe in the Ha

关于Could not load driverClass ${jdbc.driverClassName}问题解决方案

关于Could not load driverClass ${jdbc.driverClassName}问题解决方案

Could not Open Install.Log File解决方法