如何删除Ubuntu的GRUB启动项

问题

有时候我们对编译的内核不满意,比如少打开了某个配置项什么的,想删除该版本内核,并让其从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+/

你可能感兴趣的:(驱动开发,ubuntu,linux,内核,grub)