在修改grub时看到很多资料,上来就是直接修改/etc/default/grub配置文件中的GRUB_DEFAULT配置项,但是有时候修改不成功,本文简单说明一下修改的原理。注:根据本人机器上的配置文件讲解,其他人可能不一样,所以只做参考。
介绍的是Ubuntu下的修改方式,Centos下的修改方式不一样。
Centos下可参考:https://cloud.tencent.com/developer/article/2086777
一、查看内核信息和启动界面:
1、查看当前内核启动顺序:可以看到有两个内核Linux 5.4.0-147-generic和Linux 5.4.0-146-generic。
book@book-vm:~$ cat /boot/grub/grub.cfg |grep "menuentry "
menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-56e2ca8b-3d73-46df-9a2a-58fa2247002f' {
menuentry 'Ubuntu, with Linux 5.4.0-147-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.4.0-147-generic-advanced-56e2ca8b-3d73-46df-9a2a-58fa2247002f' {
menuentry 'Ubuntu, with Linux 5.4.0-147-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.4.0-147-generic-recovery-56e2ca8b-3d73-46df-9a2a-58fa2247002f' {
menuentry 'Ubuntu, with Linux 5.4.0-146-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.4.0-146-generic-advanced-56e2ca8b-3d73-46df-9a2a-58fa2247002f' {
menuentry 'Ubuntu, with Linux 5.4.0-146-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.4.0-146-generic-recovery-56e2ca8b-3d73-46df-9a2a-58fa2247002f' {
menuentry 'Memory test (memtest86+)' {
menuentry 'Memory test (memtest86+, serial console 115200)' {
2、在启动系统时,grub的菜单界面为:
可以看到有四个菜单选项,这个界面是由配置文件 /boot/grub/grub.cfg 定义的,此文件一般是通过配置文件 /etc/default/grub 生成,命令为 sudo update-grub 。
二、相关配置文件
1、/boot/grub/grub.cfg
ubuntu@ubuntu-vm:/boot/grub$ ls
fonts gfxblacklist.txt grub.cfg grubenv i386-pc locale unicode.pf2
打开此配置文件,这里对照grub菜单看:
(1)Ubuntu 选项,在配置文件中的定义为:
此选项下,启动的内核为Linux 5.4.0-147-generic,在配置文件/etc/default/grub中,GRUB_DEFAULT=0时,会默认选择此选项,从而启动相关内核。
(2)Advanced options for Ubuntu 选项
在配置文件中的定义为:
此选项下有四个选项,分别启动相关内核。其它选项就不详述了。
2、/etc/default/grub
此配置文件内容为:
(1)GRUB_DEFAULT 配置项:默认菜单项
说明:GRUB_DEFAULT=0时,默认选择grub菜单界面的第一项Ubuntu;GRUB_DEFAULT=1时,默认选择grub菜单界面的第二项Advanced options for Ubuntu 。在本人的菜单界面或者配置文件 /boot/grub/grub.cfg 下,如果只修改GRUB_DEFAULT=1,则只选择了第二项,但是没有指定此选项下的哪一个,所以修改不会成功。
修改方法如下:要根据配置文件 /boot/grub/grub.cfg 定义的grub界面修改。
$ sudo vim /etc/default/grub
GRUB_DEFAULT=0 ##修改为
GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 4.4.0-31-generic"
(2)其余的配置项可参考以下资料:
(3)修改完成后,使用命令重新配置 /boot/grub/grub.cfg 文件,然后重启reboot。
$ sudo grub-mkconfig -o /boot/grub/grub.cfg
或者
$ sudo update-grub //此命令本质上就是grub-mkconfig
总结:
修改Linux系统默认内核启动顺序时,要参考配置文件 /boot/grub/grub.cfg 定义的grub,从而修改 /etc/default/grub 中的GRUB_DEFAULT配置项。本文介绍了修改grub启动顺序的原理,具体的方法除本文外还有很多,不再详述。