服务器重新启动后,内核可能被自动更新,这就会造成开机后服务器有些服务无法正常使用。例如:
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的内核版本呢?介绍两种方法。
如果服务器在身边,可以手动启动服务器的话就可以选择这种方法
开机进入grub引导界面,选择 Advanced options for Ubuntu
选择 Advanced options for Ubuntu 后,进入其子菜单,如下图所示:

选择一个低版本的内核进入系统就可以了

大多数场景人都不在服务器都旁边,都是使用ssh操作,无法做到手动重启并现场在服务器设置以上操作,这时可以使用第二种方法:
(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)重启服务器
reboot
(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)
列出不包括当前内核版本的其它所有内核版本:

输出的内容中可能会包括内核映像的如下三种状态(红框中):
rc:表示已经被移除
ii:表示符合移除条件(可移除)
iU:已进入 apt 安装队列,但还未被安装(不可移除)
如果要移除状态为 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)的步骤切换成你所需的内核版本启动了。
