一、介绍

grubby 命令用于跨多个架构配置引导加载程序菜单项的命令行工具。

不同架构默认引导程序配置文件路径:

架构 引导程序 配置文件
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 为指定内核添加一个引导条目
--update-kernel=kernel-path 更新内核,目前唯一可以更新的项目是内核参数列表,它通过 --args 和 --remove-args 选项进行修改。
--args=kernel-args 指定内核参数
--remove-args=kernel-args 移除指定内核参数
--copy-default 会复制当前默认内核尽可能多的信息(例如内核参数和根设备),但是不会复制内核路径和 initrd 路径。
--title=entry-title 添加新的内核引导条目时,指定条目的标题
--initrd=initrd-path 使用 initrd-path 作为要添加的新内核的初始 ram 磁盘的路径
--set-default=kernel-path 指定默认启动内核
--set-default-index=entry-index 指定默认引导内核条目列表索引号
--default-kernel 显示当前默认内核的完整路径
--default-index 显示当前默认启动内核的条目列表索引号
--default-title 查看当前默认启动内核条目标题
--info=kernel-path 显示与内核路径匹配的所有引导条目的信息
--bootloader-probe 尝试探测已安装的引导加载程序,会尝试确定当前是否安装了 grub 或 lilo

二、示例

1、基本查看

# 查看当前默认内核路径
[root@cp1 ~]# grubby --default-kernel
/boot/vmlinuz-3.10.0-957.1.3.el7.x86_64

# 查看当前默认启动内核的条目列表索引号
[root@cp1 ~]# grubby --default-index
1

# 查看当前默认启动内核条目标题
[root@cp1 ~]# grubby --default-title
CentOS Linux (3.10.0-957.1.3.el7.x86_64) 7 (Core)

# 显示与内核路径匹配的所有引导条目的信息
[root@cp1 ~]# grubby --info=/boot/vmlinuz-3.10.0-957.1.3.el7.x86_64
index=1
kernel=/boot/vmlinuz-3.10.0-957.1.3.el7.x86_64
args="ro console=tty0 crashkernel=auto console=ttyS0,115200"
root=UUID=f856d385-fe64-4188-b4f8-51f6089b75e6
initrd=/boot/initramfs-3.10.0-957.1.3.el7.x86_64.img
title=CentOS Linux (3.10.0-957.1.3.el7.x86_64) 7 (Core)

# 查看引导加载程序
[root@cp1 ~]# grubby --bootloader-probe
grub2

2、修改网卡命名规则

  为保持各服务器网卡名称一致,将其统一修改为以 eth0、eth1 这种形式命名,配置内核参数来修改网卡命名规则。

[root@cp1 ~]# grubby --update-kernel=ALL --args="net.ifnames=0 biosdevname=0"
[root@cp1 ~]# grubby --info=/boot/vmlinuz-3.10.0-957.1.3.el7.x86_64
index=1
kernel=/boot/vmlinuz-3.10.0-957.1.3.el7.x86_64
args="ro console=tty0 crashkernel=auto console=ttyS0,115200 net.ifnames=0 biosdevname=0"
root=UUID=f856d385-fe64-4188-b4f8-51f6089b75e6
initrd=/boot/initramfs-3.10.0-957.1.3.el7.x86_64.img
title=CentOS Linux (3.10.0-957.1.3.el7.x86_64) 7 (Core)

3、修改默认启动内核

# 查看默认启动内核
[root@cp1 ~]# uname -r
3.10.0-957.1.3.el7.x86_64
[root@cp1 ~]# grubby --default-kernel
/boot/vmlinuz-3.10.0-957.1.3.el7.x86_64

# 查看内核排列顺序,即开机时内核的排列顺序。
# 可以看出5.14.13内核顺序是0(启动顺序是按0、1、2进行排列)。
[root@cp1 ~]# cat /boot/grub2/grub.cfg | grep 'menuentry ' | awk -F '[()]'  '{print $2}'
5.14.13-1.el7.elrepo.x86_64
3.10.0-957.1.3.el7.x86_64
0-rescue-607ed7e2b03a61872e5d3b0aba2c900d

# 修改默认启动内核
[root@cp1 ~]# grubby --default-index
1
[root@cp1 ~]# grubby --set-default-index=0
[root@cp1 ~]# reboot
[root@cp1 ~]# uname -r
5.14.13-1.el7.elrepo.x86_64

# 换种方式修改回去
[root@cp1 ~]# grubby --set-default=/boot/vmlinuz-3.10.0-957.1.3.el7.x86_64 
[root@cp1 ~]# reboot
[root@cp1 ~]# uname -r
3.10.0-957.1.3.el7.x86_64

4、添加和删除内核条目

# 添加一个新的内核条目并复制当前默认内核中的所有选项。
grubby --add-kernel=new_kernel --title="entry_title" --initrd="new_initrd" --copy-default

# 添加带有自定义参数的新内核条目
grubby --add-kernel=new_kernel --title="entry_title" --initrd="new_initrd" --copy-default

# 删除指定内核的所有条目。 
grubby --remove-kernel=old_kernel

发表评论

验证码: 5 + 2 =