对于 RHEL、Fedora 和 CentOS 系统,相当于“update-grub”的是什么?

对于 RHEL、Fedora 和 CentOS 系统,相当于“update-grub”的是什么?

乌班图(我猜在德班也)有一个名为 的系统脚本,它会使用 GRUB 配置文件的正确路径update-grub自动执行。grub-mkconfig -o

基于 Red Hat 的发行版是否有类似的命令?

如果没有,当安装新的内核版本时,系统如何知道 GRUB 配置文件要更新到哪里?

答案1

在分析了Fedora中的脚本后,我意识到配置文件路径是从符号链接读取的/etc/grub2.conf。正确的grub2-mkconfig行是:

grub2-mkconfig -o "$(readlink -e /etc/grub2.conf)"

正如评论中所指出的,它可能是/etc/grub2.cfg、 或/etc/grub2-efi.cfg在 UEFI 系统上。实际上,两个链接可能同时存在并且指向不同的位置。如果目标文件不存在,但在我的系统上两者都存在,则标志将出错...我想请检查您的命令-ereadlink

答案2

包括安装或删除 RPM 包时需要执行的特定操作在 RPM 包内本身位于安装前、安装后、卸载前和卸载后部分。

对于每个已安装的 RPM 软件包,您可以查询 RPM 数据库以获取命令中包含的确切脚本rpm

rpm -q --scripts <package-name>

在 CentOS 6 的内核包上运行该命令会返回以下结果:

postinstall scriptlet (using /bin/sh):
<snip>
/sbin/new-kernel-pkg --package kernel --install 2.6.32-431.17.1.el6.x86_64 || exit $?

从手册:

new-kernel-package- 编写内核安装脚本的工具

答案3

在 Fedora 上我使用:

grub2-mkconfig -o "$(readlink -e /etc/grub2.cfg)"

因为执行时没有选项readlink返回相对路径,并grub2-mkconfig给出错误:

$ ls -l /etc/grub2.cfg
lrwxrwxrwx. 1 root root 22 Dec 10  2015 /etc/grub2.cfg -> ../boot/grub2/grub.cfg

$ readlink /etc/grub2.cfg
../boot/grub2/grub.cfg

$ sudo grub2-mkconfig -o "$(readlink /etc/grub2.cfg)"
/usr/sbin/grub2-mkconfig: line 244: ../boot/grub2/grub.cfg.new: No such file or directory

我使用该-e选项,以便如果符号链接无法解析为存在的文件,输出将显示在标准输出上,这样我就知道出了问题。

从 readlink 的手册页中:

      -e, --canonicalize-existing
          canonicalize  by  following  every symlink in every component of
          the given name recursively, all components must exist

答案4

根据红帽文档:

更改后/etc/default/grub需要重建grub.cfg文件,如下所示:

  • 在基于 BIOS 的计算机上,以 root 身份发出以下命令:

    ~]# grub2-mkconfig -o /boot/grub2/grub.cfg

  • 在基于 UEFI 的计算机上,以 root 身份发出以下命令:

    ~]# grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg

相关内容