更新时间:2022-01-14 11:26:22浏览次数:947+次
在Linux系统上安装多个内核版本后,这时需要修改GRUB配置。Grubby是一个命令行工具,用于显示和更新lilo、elilo、zipl、yaboot和grub引导加载程序的信息,它通常用于更改grub.cfg文件。Grubby可用于修改内核引导条目、检查和更改默认内核、列出活动安装的内核、从GRUB2菜单条目中添加/删除参数。
入门
检查包含有关的内核版本、初始ramdisk映像和内核opts环境变量的信息的引导条目文件,这些信息通常存储在/boot/loader/entries/中,如下所示:
$ sudo ls -1 /boot/loader/entries/
723b266ce27e45698c2c0e30032ea83f-0-rescue.conf
723b266ce27e45698c2c0e30032ea83f-4.18.0-305.17.1.el8_4.x86_64.conf
# cat /boot/loader/entries/723b266ce27e45698c2c0e30032ea83f-4.18.0-305.17.1.el8_4.x86_64.conf
title Red Hat Enterprise Linux (4.18.0-305.17.1.el8_4.x86_64) 8.4 (Ootpa)
version 4.18.0-305.17.1.el8_4.x86_64
linux /vmlinuz-4.18.0-305.17.1.el8_4.x86_64
initrd /initramfs-4.18.0-305.17.1.el8_4.x86_64.img $tuned_initrd
options $kernelopts $tuned_params
id rhel-20210830114656-4.18.0-305.17.1.el8_4.x86_64
grub_users $grub_users
grub_arg --unrestricted
grub_class kernel
从输出中可以看出,启动项配置文件中存储了一些详细信息。
使用grubby在Linux上修改grub.cfg配置的具体方法
1.添加一个新的内核条目
首先,获取所有已安装内核的列表:
$ sudo grubby --info=ALL | grep ^kernel
kernel="/boot/vmlinuz-4.18.0-348.2.1.el8_5.x86_64"
kernel="/boot/vmlinuz-4.18.0-348.2.1.el8_5.x86_64"
kernel="/boot/vmlinuz-4.18.0-305.19.1.el8_4.x86_64"
kernel="/boot/vmlinuz-4.18.0-305.17.1.el8_4.x86_64"
kernel="/boot/vmlinuz-0-rescue-723b266ce27e45698c2c0e30032ea83f"
如果想向现有引导选项添加自定义条目,请使用以下语法:
sudo grubby --add-kernel=new_kernel \
--title="entry_title" \
--initrd="new_initrd" \
--copy-default
这里的--copy-default标志用于将所有默认内核参数复制到这个新的内核条目。可以添加自己的自定义内核参数,如下所示:
sudo grubby --add-kernel=new_kernel \
--title="entry_title" \
--initrd="new_initrd" \
--args=kernel_args
例如,将创建一个新的引导条目Linux_Test_4.18.0-348.2.1.el8_5.x86_64,如下所示:
$ sudo grubby --grub2 \
--add-kernel=/boot/vmlinuz-4.18.0-348.2.1.el8_5.x86_64 \
--title="Linux_Test_Kernel" \
--initrd=/boot/initramfs-4.18.0-348.2.1.el8_5.x86_64.img \
--copy-default
内核条目将添加如下:
-rw-r--r--. 1 root root 395 Jan 13 05:41 /boot/loader/entries/723b266ce27e45698c2c0e30032ea83f-0-rescue.conf
-rw-r--r--. 1 root root 371 Jan 13 05:26 /boot/loader/entries/723b266ce27e45698c2c0e30032ea83f-4.18.0-305.17.1.el8_4.x86_64.conf
-rw-r--r--. 1 root root 371 Jan 13 05:29 /boot/loader/entries/723b266ce27e45698c2c0e30032ea83f-4.18.0-305.19.1.el8_4.x86_64.conf
-rw-r--r--. 1 root root 303 Jan 13 03:23 /boot/loader/entries/723b266ce27e45698c2c0e30032ea83f-4.18.0-348.2.1.el8_5.x86_64.0~custom.conf
-rw-r--r--. 1 root root 366 Jan 13 06:15 /boot/loader/entries/723b266ce27e45698c2c0e30032ea83f-4.18.0-348.2.1.el8_5.x86_64.conf
2.2.更改默认引导条目
首先列出默认内核,如下所示:
$ sudo grubby --default-kernel
/boot/vmlinuz-4.18.0-348.2.1.el8_5.x86_64
还可以找出默认内核的索引号:
$ sudo grubby --default-index
找出内核标题:
$ sudo grubby --default-title
Red Hat Enterprise Linux (4.18.0-305.19.1.el8_4.x86_64) 8.4 (Ootpa)
可以使用两种方法对默认内核进行持久更改。
方法一:使用内核路径
sudo grubby --set-default /boot/vmlinuz-4.18.0-305.19.1.el8_4.x86_64
样本输出:
The default is /boot/loader/entries/723b266ce27e45698c2c0e30032ea83f-4.18.0-305.19.1.el8_4.x86_64.conf with index 2 and kernel /boot/vmlinuz-4.18.0-305.19.1.el8_4.x86_64
在上面的代码中,我从默认的vmlinuz-4.18.0-348.2.1.el8_5.x86_64切换到vmlinuz-4.18.0-305.19.1.el8_4.x86_64作为新默认内核。
方法二:使用内核索引
查找所有已安装内核的索引:
$ sudo grubby --info=ALL | grep -E "^kernel|^index"
index=0
kernel="/boot/vmlinuz-4.18.0-348.2.1.el8_5.x86_64"
index=1
kernel="/boot/vmlinuz-4.18.0-348.2.1.el8_5.x86_64"
index=2
kernel="/boot/vmlinuz-4.18.0-305.19.1.el8_4.x86_64"
index=3
kernel="/boot/vmlinuz-4.18.0-305.17.1.el8_4.x86_64"
index=4
kernel="/boot/vmlinuz-0-rescue-723b266ce27e45698c2c0e30032ea83f"
现在继续进行所需的更改:
$ sudo grubby --set-default-index=3
The default is /boot/loader/entries/723b266ce27e45698c2c0e30032ea83f-4.18.0-305.17.1.el8_4.x86_64.conf with index 3 and kernel /boot/vmlinuz-4.18.0-305.17.1.el8_4.x86_64
通过重新启动系统来应用更改:
sudo reboot -i
默认内核将自动选择如下:
可以使用以下命令列出所有菜单条目的信息:
$ sudo grubby --info=ALL
index=0
kernel="/boot/vmlinuz-4.18.0-348.2.1.el8_5.x86_64"
args="ro crashkernel=auto resume=/dev/mapper/cl-swap rd.lvm.lv=cl/root rd.lvm.lv=cl/swap $tuned_params"
root="/dev/mapper/cl-root"
initrd="/boot/initramfs-4.18.0-348.2.1.el8_5.x86_64.img"
title="Linux_Test_Kernel"
id="723b266ce27e45698c2c0e30032ea83f-4.18.0-348.2.1.el8_5.x86_64.0~custom"
index=1
kernel="/boot/vmlinuz-4.18.0-348.2.1.el8_5.x86_64"
args="ro crashkernel=auto resume=/dev/mapper/cl-swap rd.lvm.lv=cl/root rd.lvm.lv=cl/swap $tuned_params"
root="/dev/mapper/cl-root"
initrd="/boot/initramfs-4.18.0-348.2.1.el8_5.x86_64.img $tuned_initrd"
title="Red Hat Enterprise Linux (4.18.0-348.2.1.el8_5.x86_64) 8.5 (Ootpa)"
id="723b266ce27e45698c2c0e30032ea83f-4.18.0-348.2.1.el8_5.x86_64"
index=2
kernel="/boot/vmlinuz-4.18.0-305.19.1.el8_4.x86_64"
args="ro crashkernel=auto resume=/dev/mapper/cl-swap rd.lvm.lv=cl/root rd.lvm.lv=cl/swap $tuned_params"
root="/dev/mapper/cl-root"
initrd="/boot/initramfs-4.18.0-305.19.1.el8_4.x86_64.img $tuned_initrd"
title="Red Hat Enterprise Linux (4.18.0-305.19.1.el8_4.x86_64) 8.4 (Ootpa)"
id="723b266ce27e45698c2c0e30032ea83f-4.18.0-305.19.1.el8_4.x86_64"
..........
还可以查看特定内核的GRUB菜单:
$ sudo grubby --info /boot/vmlinuz-4.18.0-305.19.1.el8_4.x86_64
index=2
kernel="/boot/vmlinuz-4.18.0-305.19.1.el8_4.x86_64"
args="ro crashkernel=auto resume=/dev/mapper/cl-swap rd.lvm.lv=cl/root rd.lvm.lv=cl/swap $tuned_params"
root="/dev/mapper/cl-root"
initrd="/boot/initramfs-4.18.0-305.19.1.el8_4.x86_64.img $tuned_initrd"
title="Red Hat Enterprise Linux (4.18.0-305.19.1.el8_4.x86_64) 8.4 (Ootpa)"
id="723b266ce27e45698c2c0e30032ea83f-4.18.0-305.19.1.el8_4.x86_64"
3.删除内核条目
如果想删除某个内核条目,请使用语法:
$ sudo grubby --remove-kernel=old_kernel
或者:
sudo grubby --remove-kernel=menu_index
注意:删除不正确内核的内核条目可能会使Linux系统无法引导,因此需要引导至单用户模式以修复此错误。
4.添加新的内核参数
可以使用以下语法向内核添加参数:
sudo grubby --update-kernel=current_kernel --args="kernel_args"
实际上,假设我想在我的默认内核上禁用IPV6:
sudo grubby --update-kernel=/boot/vmlinuz-$(uname -r) --args="ipv6.disable=1"
可以验证所做的更改如下:
# grep ipv6 /boot/loader/entries/d88fa2c7ff574ae782ec8c4288de4e85-$(uname -r).conf
options root=/dev/mapper/rhel-root ro resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet biosdevname=0 net.ifnames=0 enforcing=0 $tuned_params ipv6.disable=1
一个新的参数也可以添加到所有可用的内核中:
sudo grubby --update-kernel=ALL --args="kernel_args"
5.删除内核参数
内核参数也可以从内核引导条目中删除,通常使用的语法如下:
grubby --update-kernel=current_kernel --remove-args="kernel_args"
现在要删除之前添加到上述默认内核的IPV6禁用参数,请使用:
sudo grubby --update-kernel=/boot/vmlinuz-$(uname -r) --remove-args="ipv6.disable=1"
可以删除所有内核条目的参数,如下所示:
sudo grubby --update-kernel=ALL --remove-args="kernel_args"
6.删除和添加内核参数
可以使用Grubby使用具有以下语法的单个命令删除和添加内核参数:
sudo grubby --remove-args="kernel-args" --args="kernel_args"
例如,将删除IPv6禁用并添加一个新参数console=ttys0,如下所示:
$ sudo grubby --update-kernel=/boot/vmlinuz-$(uname -r) \
--remove-args="ipv6.disable=1" \
--args="console=ttsy0"
验证所做的更改:
$ grep console /boot/loader/entries/d88fa2c7ff574ae782ec8c4288de4e85-$(uname -r).conf
options root=/dev/mapper/rhel-root ro resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb biosdevname=0 net.ifnames=0 enforcing=0 $tuned_params console=ttsy0
至此,操作成功。
相关资讯