一、介绍
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