Ubuntu系统Linux内核升级、降级

本文主要针对Ubuntu系统由于Linux内核版本的不兼容导致的问题,而需要对内核进行升级、降级所需的操作及步骤。

首先,我所遇到的问题可以描述为:在更新了Ubuntu 19.04后,Linux内核升级至了5.0.0-13,而NVIDIA显卡驱动被迫升级至了418以上,导致tensorflow(版本1.13.0)在运行tf.Session()语句时显卡会卡住,无法继续运行,甚至连SSH都会卡住无法操作。经过分析判断为内核版本过高导致,所以需要采取内核降级的方式,将至4.18.0-18。

我是在遇到问题后尝试重新安装CUDA及显卡驱动,遇到了unable to locate kernel source 报错,判断是内核问题。

下面介绍如何对Ubuntu系统的Linux系统进行降级(升级同理)

1·查看可用的Linux内核

命令行输入grep menuentry /boot/grub/grub.cfg查看可用的内核信息

例如

if [ x"${feature_menuentry_id}" = xy ]; then
  menuentry_id_option="--id"
  menuentry_id_option=""
export menuentry_id_option
menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-5b5cabf4-e78b-457c-b10f-b662ba4c57d9' {
submenu 'Advanced options for Ubuntu' $menuentry_id_option 'gnulinux-advanced-5b5cabf4-e78b-457c-b10f-b662ba4c57d9' {
 menuentry 'Ubuntu, with Linux 5.0.0-13-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.0.0-13-generic-advanced-5b5cabf4-e78b-457c-b10f-b662ba4c57d9' {
 menuentry 'Ubuntu, with Linux 5.0.0-13-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.0.0-13-generic-recovery-5b5cabf4-e78b-457c-b10f-b662ba4c57d9' {
 menuentry 'Ubuntu, with Linux 4.18.0-18-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.18.0-18-generic-advanced-5b5cabf4-e78b-457c-b10f-b662ba4c57d9' {
 menuentry 'Ubuntu, with Linux 4.18.0-18-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.18.0-18-generic-recovery-5b5cabf4-e78b-457c-b10f-b662ba4c57d9' {
menuentry 'Memory test (memtest86+)' {
menuentry 'Memory test (memtest86+, serial console 115200)' {

可以发现我这里有5.0.0-13以及4.18.0-18两个版本

2·如果未找到想要的内核版本,可以执行

sudo apt-get install linux-headers-x.x.x-x-generic linux-image-x.x.x-x-generic

下载安装对应版本的Linux内核
对于内核升级,下载了安装后 reboot重启即可

3·修改GRUB

编辑/etc/default/grub文件中的GRUB_DEFAULT
默认为GRUB_DEFAULT=0
降级时如需特定版本的内核
则将上述语句修改为:

GRUB_DEFAULT="Advanced options for Ubuntu > Ubuntu, with Linux 4.18.0-18-generic"

GRUB_DEFAULT="gnulinux-advanced-5b5cabf4-e78b-457c-b10f-b662ba4c57d9>gnulinux-4.18.0-18-generic-advanced-5b5cabf4-e78b-457c-b10f-b662ba4c57d9"

我是采用后者成功的,两条语句功能一样,但似乎适用的版本不同,这一点还没搞清楚,不过新一些的系统可以直接尝试第二种方式。引号内的版本信息均可在步骤1的输出内容中找到,只要确认是所需内核版本即可

4·更新GRUB并重启

sudo update-grub
sudo reboot

重启后可用uname -r查看,内核版本已成功降级。

以上就是Ubuntu系统的Linux内核降级方法,内核降级多见于Ubuntu系统初更新的一段时间,导致驱动、上层框架、应用程序等的兼容性出现异常,或强制升级、适配了高版本驱动等带来了程序运行异常等问题。

针对我所遇到的具体问题,在内核降级后,重新安装CUDA10.0以及对应的显卡驱动(版本410.48)以及对应的CUDNN,就恢复正常了。

你可能感兴趣的:(Ubuntu)