问题
有时候我们对编译的内核不满意,比如少打开了某个配置项什么的,想删除该版本内核,并让其从GRUB
启动项中消失,但是直接改/boot/grub/grub.cfg
不好,因为该文件是生成的,改/etc/default/grub
更是缘木求鱼,所以只能是手工删除文件。
解决
可以看到,Ubuntu
默认将内核的四大组成部分(内核镜像vmlinuz
、内存磁盘initrd.img
、符号表System.map
、编译配置config
)都放在/boot
目录,那么可以猜测安装内核时make install
是先将上述文件拷贝到该目录,再调用update-grub
扫描该目录,最后重新生成/boot/grub/grub.cfg
下面是我环境的/boot
目录,可以看到里面有10个启动项
dh@dh-desktop:~$ ls /boot/
abi-4.4.0-141-generic config-4.4.0-197-generic initrd.img-4.4.0-150-generic retpoline-4.4.0-141-generic System.map-4.4.0-197-generic vmlinuz-4.4.0-150-generic
config-4.15.18+ config-4.4.0-200-generic initrd.img-4.4.0-166-generic System.map-4.15.18+ System.map-4.4.0-200-generic vmlinuz-4.4.0-166-generic
config-4.15.18+.old config-4.4.0-201-generic initrd.img-4.4.0-197-generic System.map-4.15.18+.old System.map-4.4.0-201-generic vmlinuz-4.4.0-197-generic
config-4.4.0-141-generic grub initrd.img-4.4.0-200-generic System.map-4.4.0-141-generic vmlinuz-4.15.18+ vmlinuz-4.4.0-200-generic
config-4.4.0-143-generic initrd.img-4.15.18+ initrd.img-4.4.0-201-generic System.map-4.4.0-143-generic vmlinuz-4.15.18+.old vmlinuz-4.4.0-201-generic
config-4.4.0-145-generic initrd.img-4.4.0-141-generic memtest86+.bin System.map-4.4.0-145-generic vmlinuz-4.4.0-141-generic
config-4.4.0-150-generic initrd.img-4.4.0-143-generic memtest86+.elf System.map-4.4.0-150-generic vmlinuz-4.4.0-143-generic
config-4.4.0-166-generic initrd.img-4.4.0-145-generic memtest86+_multiboot.bin System.map-4.4.0-166-generic vmlinuz-4.4.0-145-generic
删除指定版本4.15.18+
内核的上述4个文件
dh@dh-desktop:/boot$ sudo rm vmlinuz-4.15.18+
dh@dh-desktop:/boot$ sudo rm config-4.15.18+
dh@dh-desktop:/boot$ sudo rm System.map-4.15.18+
dh@dh-desktop:/boot$ sudo rm initrd.img-4.15.18+
记得运行
sudo update-grub
然后重启,就OK了
注意
如果想彻底删除内核,就需要再删除/lib/modules
目录下指定版本的内核驱动模块
sudo rm -rf /lib/modules/4.15.18+/