记一次ubuntu内核升级造成virtualbox崩溃的解决过程

一、环境配置

系统版本:ubuntu16.04 LTS

内核版本可通过:

uname -r

命令查看
内核版本:升级前=>4.4.0-142-generic 升级后=>4.4.0-143-generic

二、出现的问题

virtualbox在打开启动一个虚拟环境后,报错,并提示:

The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module by executing

'/sbin/vboxconfig'

as root.

where: suplibOsInit what: 3 VERR_VM_DRIVER_NOT_INSTALLED (-1908) - The support driver is not installed. On linux, open returned ENOENT.

然后按照提示执行

sudo /sbin/vboxconfig

后,又有报错提示。

三、解决方案

将ubuntu内核降级到原版本,即4.4.0-143-generic=>4.4.0-142-generic。我们直接用简单粗暴的移除当前最新版本的方法,当然你需要保证之前的内核版本还存在。顺序执行以下命令
1)此命令查看当前系统中存在哪些内核版本,可以查看install状态的是不是还有上一个内核版本,如果没有,咱们这个方法就不管用了,你要另寻他法

sudo dpkg --get-selections |grep linux-image

2)移除当前内核版本

sudo apt remove linux-image-4.4.0-143-generic

3)记得要删除boot文件中相关的内核文件

sudo rm /boot/*4.4.0-143*

4)删除一些无用的包

sudo apt update
sudo apt autoremove
sudo apt autoclean

5)重启系统

6)再次执行

sudo /sbin/vboxconfig

若无报错,即完成修复,可以正常打开虚拟机

四、这一段是我自己因为gcc版本造成的另一个问题,如果你在完成上面步骤没有出错,就不需要参考一下内容了。

因为之前手贱,通过以下命令升级了gcc版本

1)sudo add-apt-repository ppa:jonathonf/gcc-7.1
2)sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 100
3)//此命令会出现可供选择的gcc版本列表,然后提示我们选择。如果不出现,证明已应用此版本
sudo update-alternatives --config gcc

所以,在内核降级完成后,执行

sudo /sbin/vboxconfig 

命令仍然报错,提示:

vboxdrv.sh: failed: modprobe vboxdrv failed. Please use 'dmesg' to find out why.

然后根据提示输入dmesg命令,显示的日志中最后一行是:

vboxdrv: version magic '4.4.0-142-generic SMP mod_unload modversions ' should be '4.4.0-142-generic SMP mod_unload modversions retpoline '

经查询,是因为当前内核版本和gcc版本不匹配造成,之前的gcc版本我给忘了,所以直接安装了一个gcc-5,幸好成功了。下面是降低gcc版本的命令:

1)sudo apt installl gcc-5
2)sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 100
3)输入该命令后,选择需要的gcc版本前的序号
sudo update-alternatives --config gcc

gcc降低版本后,再次执行sudo /sbin/vboxconfig命令,vboxxdrv成功被编译,至此解决了我的问题,虚拟机正常运行。。。

你可能感兴趣的:(ubuntu)