环境:ubuntu 16.04 server
服务器重新启动后,内核可能被自动更新,这就会造成开机后服务器有些服务无法正常使用。例如:
查看显卡状态:nvidia-smi 会有报错
NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.
造成报错原因:内核版本太高,与NVIDIA驱动不匹配。因为NVIDIA驱动是在内核版本低的时候安装的。
这时的解决方法就是切换回来低版本内核就行。
如何切换ubuntu的内核版本呢?介绍两种方法。
1. 如果服务器在身边,可以手动启动服务器的话就可以选择这种方法
开机进入
机进入grub引导界面,选择Advanced options for Ubuntu::
选择Advanced options for Ubuntu后,进入其子菜单,如下图所示:
上图来自:https://blog.csdn.net/sinat_23619409/article/details/85220561
选择一个低版本的内核进入系统。
再次运行nvidia-smi就可以了
2. 大部分服务器都是不在身边的,都是使用远程连接操作的,无法做到手动重启并桌面设置以上操作。这时可以使用第二种方法。
(1)首先查看当前内核版本:
uname -r
(2)查看服务器启动内核的顺序
grep menuentry /boot/grub/grub.cfg
红框内就是ubuntu系统目前所拥有的内核版本与启动顺序,menuentry就是每一条,记住这个顺序,下面要用到。
(3)比如我们要切换成4.15.0-54-generic这个,它在上图中的启动顺序是第七个。
终端运行命令 : sudo gedit /etc/default/grub
红框内GRUB_DEFAULT=0 修改为 GRUB_DEFAULT="1> 7"。
注意:> 与7之间有个空格
保存并退出。
(4)更新grub
sudo update-grub
(5)重启服务器
sudo shutdown -r now
(6)重启后查看内核版本(uname -r)已修改成4.15.0-54-generic了。再运行nvidia-smi就正常了。
下面说可能出现的问题:
ubuntu自动更新内核的过程中,也会自动删除掉一些内核旧版本。因此你可能切换不到与NVIDIA驱动匹配的版本了。
能切换到的内核版本只能是步骤(2)中内核启动顺序中的内核版本。其他版本切不到。
也可以运行命令:
dpkg -l | tail -n +6| grep -E 'linux-image-[0-9]+'| grep -Fv $(uname -r)
列出不包括当前内核版本的其它所有内核版本:
输出的内容中可能会包括内核映像的如下三种状态(红框中):
如果要移除状态为 ii 的「linux-image-4.15.0-88-generic」内核,可以使用如下命令:
sudo dpkg --purge linux-image-4.15.0-88-generic
如前面所说,如果没有我们需要的内核,我们就需要安装所需版本内核,安装命令如下:
sudo apt-get install linux-image-4.15.0-55-generic
然后就可以按照(1)-(6)的步骤切换成你所需的内核版本启动了。
Reference:
https://blog.csdn.net/zs15yy/article/details/77188030
https://blog.csdn.net/sinat_23619409/article/details/85220561