最近在硬件上测试拨号,在排除问题的过程中,升级了内核。结果升级完后,不但不能解决问题,反而带来了新的问题。因此需要将内核版本降下来。网上参考了很多文章,经过了一番测试,最后算是解决了问题。在此记录一下,一方面怕自己时间长了忘记了,另一方面,如果有网友碰到类似的问题,可以借鉴。
话不多说,有效的解决办法有两种:
1. 修改/etc/default/grub文件
关于修改这个文件,无论是csdn还是stackexchange等网页上,都提到可以修改该文件中的GRUB_DEFAULT参数来实现内核的切换。并且指出,在修改这个参数前,首先要确认目标内核的索引。目标内核的索引,通过grep menuentry /boot/grub/grub.cfg中可以查到。比如在我的机器上,grep后,如下:
所以,我的索引为2。照着这个思路,我修改了/etc./default/grub中的GRUB_DEFAULT=2,保存文件后,再update-grub。重启。但是不幸的是,出来的结果,内核并没有切换。
参考另一种方法,说是将/etc/default/grub中的GRUB_DEFAULT改成需要切换的menuentry的名字,而不是索引。照这种意思,在我的环境中,需要将GRUB_DEFAULT修改为'Debian GNU/Linux,with Linux 4.19.0-9-amd64'(注意,加上'')。照着这个方向,去做了修改,同时update-grub,这次提示:
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-4.19.208
Found initrd image: /boot/initrd.img-4.19.208
Found linux image: /boot/vmlinuz-4.19.0-9-amd64
Found initrd image: /boot/initrd.img-4.19.0-9-amd64
Warning: Please don't use old title `Debian GNU/Linux, with Linux 4.19.0-9-amd64' for GRUB_DEFAULT, use `Advanced options for Debian GNU/Linux>Debian GNU/Linux, with Linux 4.19.0-9-amd64' (for versions before 2.00) or `gnulinux-advanced-f6ff0fac-f511-4915-be01-0f9c81aa1d9a>gnulinux-4.19.0-9-amd64-advanced-f6ff0fac-f511-4915-be01-0f9c81aa1d9a' (for 2.00 or later)
done
照这个意思,需要修改GRUB_DEFAULT,并且修改内容与grub的版本有关系。查看grub的版本信息,可以通过
dpkg -l|grep grub|grep ii
在我的机器上,都是2.00以上的,因此,将GRUB_DEFAULT修改为:
'gnulinux-advanced-f6ff0fac-f511-4915-be01-0f9c81aa1d9a>gnulinux-4.19.0-9-amd64-advanced-f6ff0fac-f511-4915-be01-0f9c81aa1d9a'(注意,要加上'')
再次update-grub。重启,Nice,这次成功了。在这里,我又测试了一下,如果按照grub版本号小于2.00(与我机器中版本不一致)的情形去修改GRUB_DEFAULT,结果是失败的。所以,还是与版本号一致靠谱。
除此以外,网上还有别的办法,比如grub-set-default index(index为目标索引),但是在我的环境中,基本都没有成功。
2. 删除多余的镜像文件
这个也是网上一老铁提出的办法,不走寻常路,但是简单有效。具体操作如下:
随意新建一个文件夹,比如/noot,同时将/boot下的所有文件拷贝到noot下。
进入boot文件夹,除了你想留下的内核镜像,删除其他的镜像文件。比如我的环境中,就是删除*.4.19.208*的文件。删除后,update-grub。重启。一样生效。