grubby命令示例
在本教程中,我将分享有关Linux中grubby命令用法的不同示例,这些命令用于修改内核引导项,检查和更改默认内核,列出活动的已安装内核等等。
grubby是用于处理特定于引导加载程序的配置文件的实用程序。
我们也可以使用grubby更改默认的引导项,以及从GRUB2菜单项添加/删除参数。
什么是启动项
在本教程中,我们将使用内核启动项,因此首先让我简要介绍一下启动项
引导项是选项的集合,这些选项存储在配置文件中并与特定的内核版本绑定。
实际上,引导条目至少与系统已安装内核的数目相同。
上面的文件名由存储在
/etc/machine-id
文件中的机器ID和内核版本组成。引导条目配置文件包含有关内核版本,初始ramdisk镜像和kernelopts环境变量的信息,其中包含内核命令行参数。
引导条目配置文件位于/boot/loader/entries /
目录中,如下所示。
在/boot/grub2/grubenv文件中定义了kernelopts
环境变量。
# cat /boot/loader/entries/d88fa2c7ff574ae782ec8c4288de4e85-4.18.0-193.14.3.el8_2.x86_64.conf title Red Hat Enterprise Linux (4.18.0-193.14.3.el8_2.x86_64) 8.2 (Ootpa) version 4.18.0-193.14.3.el8_2.x86_64 linux /vmlinuz-4.18.0-193.14.3.el8_2.x86_64 initrd /initramfs-4.18.0-193.14.3.el8_2.x86_64.img $tuned_initrd options $kernelopts $tuned_params id rhel-20170720141339-4.18.0-193.14.3.el8_2.x86_64 grub_users $grub_users grub_arg --unrestricted grub_class kernel
1. grubby命令添加新的内核条目
假设我们已经构建了自己的内核,该内核已安装在服务器上,并且希望为此新内核添加一个自定义条目。
因此,我们可以使用以下语法:
grubby --add-kernel=new_kernel --title="entry_title" --initrd="new_initrd" --copy-default
其中我使用--copy-default将所有内核参数从默认内核复制到此新内核条目。
要添加自己的自定义内核参数,可以使用:
grubby --add-kernel=new_kernel --title="entry_title" --initrd="new_initrd" --args=kernel_args
获取可用启动项的列表
# ls -l /boot/loader/entries/* -rw-r--r--. 1 root root 408 Nov 13 2019 /boot/loader/entries/d88fa2c7ff574ae782ec8c4288de4e85-0-rescue.conf -rw-r--r-- 1 root root 366 Aug 15 16:03 /boot/loader/entries/d88fa2c7ff574ae782ec8c4288de4e85-4.18.0-193.1.2.el8_2.x86_64.conf -rw-r--r-- 1 root root 371 Aug 15 16:07 /boot/loader/entries/d88fa2c7ff574ae782ec8c4288de4e85-4.18.0-193.14.3.el8_2.x86_64.conf -rw-r--r-- 1 root root 336 Aug 15 15:12 /boot/loader/entries/d88fa2c7ff574ae782ec8c4288de4e85-4.18.0-193.el8.x86_64.conf
在此示例中,我将为4.18.0-193.el8.x86_64
内核创建一个新的引导项。
# grubby --grub2 --add-kernel=/boot/vmlinuz-4.18.0-193.el8.x86_64 --title="Red Hat Enterprise 8 Test" --initrd=/boot/initramfs-4.18.0-193.el8.x86_64.img --copy-default
验证新添加的启动项:
# ls -l /boot/loader/entries/* -rw-r--r--. 1 root root 408 Nov 13 2019 /boot/loader/entries/d88fa2c7ff574ae782ec8c4288de4e85-0-rescue.conf -rw-r--r-- 1 root root 366 Aug 15 16:03 /boot/loader/entries/d88fa2c7ff574ae782ec8c4288de4e85-4.18.0-193.1.2.el8_2.x86_64.conf -rw-r--r-- 1 root root 371 Aug 15 16:07 /boot/loader/entries/d88fa2c7ff574ae782ec8c4288de4e85-4.18.0-193.14.3.el8_2.x86_64.conf -rw-r--r-- 1 root root 287 Aug 16 15:17 /boot/loader/entries/d88fa2c7ff574ae782ec8c4288de4e85-4.18.0-193.el8.x86_64.0~custom.conf -rw-r--r-- 1 root root 287 Aug 16 15:29 /boot/loader/entries/d88fa2c7ff574ae782ec8c4288de4e85-4.18.0-193.el8.x86_64.conf
现在,我们可以更改默认内核并重新引导服务器以验证更改。
2.删除内核条目
重要的提示:
请谨慎使用此命令,因为它将删除提供的内核的引导项。
如果删除了不正确内核的内核条目,则系统可能无法启动,然后必须启动到单用户模式才能修复损坏的服务器
# grubby --remove-kernel=old_kernel
或者我们也可以使用
grubby --remove-kernel=menu_index
3.添加新的内核参数
要在GRUB2中添加新参数,请使用:
grubby --update-kernel=current_kernel --args="kernel_args"
例如,我将在此命令中禁用IPv6:
# grubby --update-kernel=/boot/vmlinuz-$(uname -r) --args="ipv6.disable=1"
我使用了uname -r来获取默认内核的发行信息。
这种方式比提供内核版本要容易得多。
尽管如果我们打算向默认内核以外的其他内核添加新参数,则必须手动提供内核版本。
现在验证更改。
# 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
向所有可用内核添加新的内核参数
grubby --update-kernel=ALL --args="kernel_args"
4.删除内核参数
与添加类似,我们还可以使用以下命令从内核引导项中删除其他内核参数:
grubby --update-kernel=current_kernel --remove-args="kernel_args"
在上一个示例中,我禁用了ipv6,因此现在我将删除此内核参数
# grubby --update-kernel=/boot/vmlinuz-$(uname -r) --remove-args="ipv6.disable=1"
验证默认内核的启动条目,以确保已删除该条目
# grep ipv6 /boot/loader/entries/d88fa2c7ff574ae782ec8c4288de4e85-$(uname -r).conf
同样从所有内核中删除内核条目
grubby --update-kernel=ALL --args="kernel_args"
5.删除并添加内核参数
我们可以结合使用grubby命令删除和添加内核参数。
grubby --remove-args="kernel-args" --args="kernel_args"
在此示例中,我在同一grubby命令中删除了" quiet"并添加了" console = ttys0"参数。
# grubby --update-kernel=/boot/vmlinuz-$(uname -r) --remove-args="quiet" --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
6.列出已安装的内核
要列出所有已安装的内核,可以使用:
# grubby --info=ALL | grep ^kernel kernel="/boot/vmlinuz-4.18.0-193.14.3.el8_2.x86_64" kernel="/boot/vmlinuz-4.18.0-193.1.2.el8_2.x86_64" kernel="/boot/vmlinuz-4.18.0-193.el8.x86_64" kernel="/boot/vmlinuz-0-rescue-d88fa2c7ff574ae782ec8c4288de4e85"
7.获取有关内核启动项的更多信息
要获得有关已安装内核的更多详细信息,我们可以使用grubby --info
。
这将为我们提供诸如索引号,引导项ID,应用于内核的参数等信息。
# grubby --info="/boot/vmlinuz-$(uname -r)" index=1 kernel="/boot/vmlinuz-4.18.0-193.1.2.el8_2.x86_64" args="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" root="/dev/mapper/rhel-root" initrd="/boot/initramfs-4.18.0-193.1.2.el8_2.x86_64.img $tuned_initrd" title="Red Hat Enterprise Linux (4.18.0-193.1.2.el8_2.x86_64) 8.2 (Ootpa)" id="d88fa2c7ff574ae782ec8c4288de4e85-4.18.0-193.1.2.el8_2.x86_64"
8.默认内核的列表路径
默认内核是将在重新引导后激活的内核版本。
如果我们已经安装/删除了任何内核,则活动内核版本可能会与默认内核版本不同。
要获取默认内核版本,请使用:
# grubby --default-kernel /boot/vmlinuz-4.18.0-193.el8.x86_64
9.默认内核的列表索引
现在要获取默认内核的索引值,请使用grubby --default-index
。
例如下面的输出来自我的服务器:
# grubby --default-index 2
10.列出默认内核标题
内核标题是在重新引导Linux服务器时在GRUB2菜单中看到的输出。
因此,要检查默认内核的标题,请使用:
# grubby --default-title Red Hat Enterprise Linux (4.18.0-193.1.2.el8_2.x86_64) 8.2 (Ootpa)
11.使用内核路径设置默认内核
要更改默认内核,即使用内核路径在重启后激活的内核:
# grubby --set-default="/boot/vmlinuz-4.18.0-193.1.2.el8_2.x86_64" The default is /boot/loader/entries/d88fa2c7ff574ae782ec8c4288de4e85-4.18.0-193.1.2.el8_2.x86_64.conf with index 1 and kernel /boot/vmlinuz-4.18.0-193.1.2.el8_2.x86_64
因此,现在将" kernel-4.18.0-193.1.2.el8_2"设置为默认启动,以便在重启后激活。
12.使用索引设置默认内核
除了使用内核vmlinuz条目之外,我们还可以提供索引号来更改默认内核。
要获取所有已安装内核的索引号:
# grubby --info=ALL | grep -E "^kernel|^index" index=0 kernel="/boot/vmlinuz-4.18.0-193.14.3.el8_2.x86_64" index=1 kernel="/boot/vmlinuz-4.18.0-193.1.2.el8_2.x86_64" index=2 kernel="/boot/vmlinuz-4.18.0-193.el8.x86_64" index=3 kernel="/boot/vmlinuz-4.18.0-193.el8.x86_64" index=4 kernel="/boot/vmlinuz-0-rescue-d88fa2c7ff574ae782ec8c4288de4e85"
因此,现在我们有了服务器上安装的每个内核的映射索引号。
现在我们可以使用--set-default-index = <val>来更改默认内核
# grubby --set-default-index=2 The default is /boot/loader/entries/d88fa2c7ff574ae782ec8c4288de4e85-4.18.0-193.el8.x86_64.0~custom.conf with index 2 and kernel /boot/vmlinuz-4.18.0-193.el8.x86_64
我们可以验证输出,以确保添加了正确的内核作为默认内核