grubby - 用于配置grub,lilo和elilo的命令行工具。grubby是一个命令行工具,用于更新和显示关于各种特定于体系结构的引导加载程序的配置文件的信息。它主要用于安装新内核并需要查找有关当前引导环境的信息的脚本。
grubby [--add-kernel = kernel-path ] [--args = args ]
[--bad-image-okay] [--boot-filesystem = bootfs ]
[--bootloader-probe] [--config-file 路径 ]
[--copy-default] [--default-kernel]
[--grub] [--lilo] [--yaboot] [--silo] [--zipl]
[--info = kernel-path ] [--initrd = initrd-path ]
[--make-default] [-o path] [--version]
[--remove-kernel = kernel-path ] [--remove-args = args ]
[--set -default = kernel-path ] [--title = entry-title]
[--add-multiboot = multiboot-path ] [--mbargs = args ]
[--remove-multiboot = multiboot-path ] [--remove-mbargs = args ]
基于bios的Intel x86平台,默认的引导加载程序为grub2,配置文件在“/boot/grub2/grub.cfg”路径下。基于uefi的Intel x86平台默认的引导加载程序为grub2,配置文件路径为/boot/efi/efi/redhat/grub.cfg。在PowerPC平台上,基于Power8和Power9的系统支持grub2作为引导加载程序,并使用存储在/boot/grub2/grub.cfg中的配置。在s390x平台上,zipl引导加载程序使用/etc/zipl.conf中的默认配置。
在Intel x86平台上,grub是默认引导加载程序,配置文件位于/boot/grub/grub.conf中。在Intel ia64平台上,使用 elilo模式,配置文件的默认位置是/boot/grub/grub.conf。在PowerPC平台上,使用yaboot分析,配置文件应该位于/etc/yaboot.conf中。
所有引导加载程序都将引导项定义为单独的配置片段,这些配置片段默认存储在/boot/loader/entries中。配置文件的格式在https://systemd.io/BOOT_LOADER_SPECIFICATION上指定。这个肮脏的工具用于更新和显示BootLoaderSpec片段文件中定义的配置。
有许多方法可以指定用于--info、--remove-kernel和--update-kernel的内核。指定DEFAULT或ALL分别选择默认条目和所有条目。另外,引导项的标题可以通过使用TITLE=Ititle作为参数来指定;使用带有该标题的所有条目。
默认的引导加载器目标主要由构建grubby的体系结构决定。每个体系结构都有一个首选的引导加载程序,并且每个引导加载程序都有自己的配置文件。如果在命令行上没有选择引导加载程序,那么grubby将使用这些默认设置来搜索现有配置。如果没有找到引导加载程序配置文件,则grubby将使用该体系结构的默认值。这些默认值在下表中列出。
arch | bootloader | configuration file |
x86_64 [BIOS] | grub2 | /boot/grub2/grub.cfg |
x86_64 [UEFI] | grub2 | boot/efi/EFI/redhat/grub.cfg |
i386 | grub2 | /boot/grub2/grub.cfg |
ia64 | elilo | /boot/efi/EFI/redhat/elilo.conf |
ppc [>=Power8] | grub2 | /boot/grub2/grub.cfg |
ppc [<=Power7] | yaboot | /etc/yaboot.conf |
s390 | zipl | /etc/zipl.conf |
s390x | zipl | /etc/zipl.conf |
标签 | 描述 |
--add-kernel=kernel-path | 为位于kernel-path的内核添加一个新的启动项。 |
--args=kernel-args | 当添加一个新内核时,它指定了默认应该传递给内核的命令行参数(注意,如果使用--copy-default,它们将与模板中的参数合并)。当使用--update-kernel时,它指定了新的参数添加到参数列表。可以使用多个空格分隔的参数。如果参数已经存在,则新值将替换旧值。如果配置文件对指定根文件系统有特殊的处理(如lilo.conf那样),则 root = kernel参数会得到特殊处理。 |
--boot-filesystem = bootfs | grub引导加载程序希望配置路径中列出的文件路径相对于它们所在文件系统的顶部,而不是相对于当前根文件系统。默认情况下,grubby会搜索当前挂载的文件系统列表来确定这一点。如果给出了这个选项,grubby的行为就像指定的文件系统是包含内核的文件系统一样(这个选项主要是为测试而设计的)。 |
--bootloader-probe | grubby会尝试确定当前是否安装了grub或lilo。当找到其中一个引导加载程序时,该引导加载程序的名称将显示在stdout上。两者都可以安装(在不同的设备上),grubby会打印出两个引导程序的名称,每行一个。grub探针需要一个注释掉的引导指令grub.conf, 与lilo配置文件中的标准指令相同。如果不存在,grubby会假定grub没有安装(请注意,anaconda将该指令放置在它创建的grub.conf文件中)。该选项仅适用于x86 BIOS平台。 |
--bad-image-okay | 当grubby正在寻找一个用于某些东西(例如模板或默认启动项)的条目时,它会使用完整性检查(例如确保内核存在于文件系统中)来确保条目显然不起作用, t选中。此选项会覆盖该行为,主要用于测试。 |
--config-file=path | 使用路径作为配置文件,而不是默认值。 |
--config-default | grubby会从当前的默认内核拷贝尽可能多的信息(如内核参数和根设备)。内核路径和initrd路径将永远不会被复制。 |
--default-kernel | 显示当前默认内核的完整路径并退出。 |
--default-index | 显示当前默认引导项的索引值并退出 |
--default-title | 显示当前默认引导项的标题并退出 |
--env=path | 使用path作为grub2环境块文件,而不是默认路径。 |
--grub2 | Configure grub2 bootloader. |
--grub | 使用grub样式的配置文件而不是lilo样式。这是ia32平台的默认设置。 |
--info=kernel-path | 显示与内核路径匹配的所有引导项的信息。如果kernel-path为DEFAULT,则显示默认内核的信息。如果kernel-path为ALL,则显示所有引导项的信息。 |
--initrd=initrd-path | 使用initrd-path作为添加的新内核的初始ram磁盘的路径。 |
--extrainitrd=initrd-path | 使用initrd-path作为要添加到引导项中的辅助初始ram磁盘映像的路径。 |
--make-default | 将添加的新内核条目设置为默认条目。 |
--remove-args=kernel-args | kernel-args指定的参数将从--update-kernel指定的内核中删除。对于支持独立根文件系统配置的配置文件,root参数得到特殊处理。 |
--remove-kernel=kernel-path | 删除与内核路径匹配的所有启动项。这可能会与--add-kernel一起使用,在这种情况下,添加的新内核将永远不会被删除。 |
--set-default=kernel-path | 引导指定内核的第一个条目将作为默认引导条目。 |
--set-default-index=entry-index | Makes the given entry number the default boot entry. |
--title=entry-title | 当添加一个新的内核条目时,entry-title将用作该条目的标题。 |
--update-kernel=kernel-path | 更新匹配kernel-path的内核条目。目前唯一可以更新的项是内核参数列表,它是通过--args和--remove-args选项修改的。 |
--zipl | 使用zipl样式配置文件。 |
--bls-directory=path | 使用path作为BootLoaderSpec配置文件的目录,而不是默认的/boot/loader/条目。 |
--no-etc-grub-update | 当使用——update-kernel选项和ALL参数时,使grubby不更新/etc/default/grub中的GRUB_CMDLINE_LINUX变量。 |
--debug | Display extra debugging information for failures. |
Multiboot Specification为引导加载程序和操作系统提供了一个genreic接口。它受GRUB引导加载程序的支持。 | |
--add-multiboot = multiboot-path | 为位于multiboot-path的multiboot内核添加一个新的启动项 。请注意,这通常伴随着 --add-kernel选项。 |
--remove-multiboot = multiboot-path | 删除与多引导路径相匹配的所有引导条目。 |
--mbargs = multiboot-args | 当添加一个新的多重引导内核时,它指定了默认应该传递给该内核的命令行参数。当使用--update-kernel时,它指定了新的参数添加到参数列表。可以使用多个空格分隔的参数。如果参数已经存在,则新值将替换旧值。 |
--remove-mbargs = multiboot-args | 由multiboot-args指定的参数将从--update-kernel指定的内核中删除。 |
示例:
1、添加一个新的内核条目并从当前默认内核复制所有选项。这是大多数用户想要的行为。
grubby --add-kernel=new_kernel --title="entry_title" --initrd="new_initrd" --copy-default
2、Add a new kernel entry with custom arguments
grubby --add-kernel=new_kernel --title="entry_title" --initrd="new_initrd" --args=kernel_args
3、Remove all menu entries for a specified kernel.
grubby --remove-kernel=old_kernel
4、Target a single menu entry to remove without targetting other entries with the same kernel.
grubby --info=old_kernel
grubby --remove-kernel=menu_index
5、Update the arguments for all entries of a specific kernel. New arguments get added while existing arguments get updated values.
grubby --update-kernel=current_kernel --args="kernel_args"
6、Remove the arguments for a single entry of a specific kernel.
grubby --info=current_kernel
grubby --remove-args=menu_index --args="kernel_args"
待更新完成grub参数, 在ubuntu系统中没有grubby命令。desktop版本使用update-grub2或者grub2-mkconfig -o /boot/efi/EFI/ubuntu/grub.cfg或者/boot/grub/grub.cfg。
server版本使用grub2-mkconfig -o /boot/grub2/grub.cfg。