解决VirtualBox rc=-1908的错误(基于Ubuntu 18.04)

忍无可忍

最开始由于无知,不知道为什么会出现这个问题,后来经过查证,发现每次Linux内核更新以后都会出现这个问题,经过多方查证,有时可以解决问题,有时又不行,并且网上的说法不一,估计也是一篇篇的博客相互抄袭,今天更新内核又出现了这个问题,我下定决心一定要找出问题的深层原因,并提出一个一劳永逸的解决方式.

问题复现

如下图,更新了Linux内核以后,就会出现rc=-1908的错误代码:

pic1 pic2

按照它的指示,以root身份执行了/sbin/vboxconfig,结果如下:

 yjzzjy4@yjzzjy4-AERO-15XV8 ~ sudo /sbin/vboxconfig 
[sudo] yjzzjy4 的密码: 
vboxdrv.sh: Stopping VirtualBox services.
vboxdrv.sh: Starting VirtualBox services.
vboxdrv.sh: Building VirtualBox kernel modules.
vboxdrv.sh: failed: modprobe vboxdrv failed. Please use 'dmesg' to find out why.

There were problems setting up VirtualBox.  To re-start the set-up process, run
  /sbin/vboxconfig
as root.
 yjzzjy4@yjzzjy4-AERO-15XV8 ~ 

是的这并没有解决任何问题,但是其中有几个关键字dmesgmodprobe vboxdrv吸引了我的注意.

其中dmesg,按照Wiki上的描述,是一个这样的东西:

dmesg (display message or driver message) is a command on most Unix-like operating systems that prints the message buffer of the kernel.[1] The output of this command typically contains the messages produced by the device drivers.

查看了dmesg输出以后并没有什么有用的信息,输出太长了就不贴上来了.

而另一个关键字modprobe,则是我比较熟悉的命令了,这个命令可以理解为使某个模块生效,那么说明是vboxdrv没有生效,通过Google一番,我发现了这是VirtualBox的驱动,是的Linux内核专门有一个用于驱动VirtualBox的驱动,叫做virtualbox-dkms,其中dkms代表Dynamic Kernel Module Support.所以问题根源在于virtual-box-dkms没有被驱动,终于找到问题所在了!

解决问题

既然是驱动没有加载,那我们应该想想为什么没有加载,因为我们升级了内核!这样的话加载的就是上一个内核版本的驱动,已经不适用当前内核了,那我们需要为当前内核重新安装一个驱动,用以下命令:

sudo apt install --reinstall linux-headers-$(uname -r) virtualbox-dkms dkms

这条命令是先安装与当前内核版本相对应的linux-headers,用于配置virtualbox-dkms,然后再安装对应的驱动就能够自动完成配置了,完成配置后,再输入以下命令:

sudo modprobe vboxdrv

这样就激活了安装好的驱动.至此,问题得到解决,终于能进入虚拟机了.

小插曲

我在运行sudo modprobe vboxdrv时遇到了一个问题:

modprobe: ERROR: could not insert 'vboxdrv': Required key not available

通过Google,我知道了这是Secure Boot搞的鬼,是的这个东西在所有较新出厂的主板上都会有的,这是微软为了防止用户装Linux而联合硬件厂商搞出来的玩意儿.这个东西可以说是没有任何作用,起一个高大上的名字–安全启动就是为了唬人,让用户不敢去禁用它,从而给用户安装Linux带来极大的不便甚至无法安装Linux.

说到这个就真的不得不说一嘴,微软作为一个几乎垄断操作系统市场的大厂,居然如此小肚鸡肠,人家Linux的grub2启动器,都能够用来启动你windows的操作系统,你倒好,自己的启动器不支持其他操作系统,不但不友好相待,还要绝人后路,就凭这一点,我此生无悔黑微软!而且Linux总是强调自由,自由是什么?free不是免费好么! free指的是我的计算机只属于我,它只能做我想让它做的事情,只能有我想让它有的功能.擅自在计算机里加secure boot,你微软问过用户了么?就像《The Linux Command Line》里说的:

一个大公司不断地把它的控制权强加到世界绝大多数的计算机上,并且决定你对计算机的操作权力.

幸运的是,世界各地的人们正在努力进行抗争,他们通过自己编写的软件来争夺自己计算机的控制权.

他们创造了Linux!

非常幸运,我能够成为Linux的用户.那么话不多说,我们来破解掉secure boot吧!

首先安装一个MOK组件:

sudo apt install mokutil

然后输入以下命令:

sudo mokutil --disable-validation

之后shell会要求你创建密码,直接输入密码即可,输入两次确保正确,并记录下这个密码.

reboot

重启计算机,在弹出的画面选择Enroll MOK,按照要求(请仔细阅读密码输入要求),输入刚刚记录的密码即可.

最后跳转到一个对话框Disable secure boot?,选择yes,自动重启计算机.

进入系统以后再执行sudo modprobe vboxdrv即可.

注:

  • 本人所使用的计算机是技嘉Aero 15XV8,生产于2018年,有的计算机可以直接在BIOS里禁用secure boot,有的发行版可以在安装时设置密码禁用secure boot(如Ubuntu/Linux mint等),此方法不保证所有的计算机均有效,但新的计算机(2018+)应该可以使用此方法
neofetch
  • 以上是我使用的发行版信息,不同发行版使用不同的包管理器,安装程序命令可能不同,请酌情修改
  • 以上操作请在VirtualBox关闭状态下进行

猜你喜欢

转载自blog.csdn.net/AAMahone/article/details/86428040