本文共 5134 字,大约阅读时间需要 17 分钟。
linux grub2
在研究上个月的文章 ,我开始对GRUB2的学习感兴趣。 本文提供了有关配置GRUB2的快速介绍,为简单起见,我通常将其称为GRUB。
GRUB代表GRand Unified Bootloader 。 它的功能是在引导时从BIOS接管,加载自身,将Linux内核加载到内存中,然后将执行移交给内核。 一旦内核接管,GRUB便完成了工作,不再需要它。
GRUB支持多个Linux内核,并允许用户在启动时使用菜单在它们之间进行选择。 我发现这是一个非常有用的工具,因为在许多实例中,我遇到了由于特定内核版本而失败的应用程序或系统服务的问题。 很多时候,引导到较旧的内核可以避免诸如此类的问题。 默认情况下,当使用yum或dnf进行升级时,将保留三个内核(最新的内核和两个先前的内核)。 软件包管理器删除内核之前保留的内核数量可以在/etc/dnf/dnf.conf或/etc/yum.conf文件中配置。 我通常将installonly_limit值更改为9,以保留总共九个内核。 当我不得不恢复到低版本几个版本的内核时,这已经派上用场了。
GRUB菜单的功能是在默认内核不是所需内核的情况下,允许用户选择已安装的内核之一进行引导。 使用向上和向下箭头键,您可以选择所需的内核,然后按Enter键继续使用所选内核进行引导过程。
GRUB菜单还提供了超时,因此,如果用户未进行任何其他选择,则GRUB将继续使用默认内核进行引导,而无需用户干预。 按下键盘上除Enter键之外的任何键,将终止控制台上显示的倒数计时器。 按Enter键立即使用默认内核或可选的内核继续引导过程。
GRUB菜单还提供了一个“救援”内核,用于故障排除或常规内核由于某种原因无法完成启动过程时使用。 不幸的是,该救援内核无法启动到救援模式。 本文稍后将对此进行更多介绍。
grub.cfg文件是GRUB配置文件。 它是由grub2-mkconfig程序使用一组主要配置文件和grub默认文件作为用户配置规范的源生成的。 是/ boot / GRUB2 /文件的grub.cfg Linux安装过程中首先产生并安装一个新的内核时再生。
grub.cfg文件包含类似Bash的代码和按安装顺序排列的数组中的已安装内核列表。 例如,如果您有四个已安装的内核,则最新的内核将位于索引0,先前的内核将位于索引1,而最早的内核将位于索引3。如果您可以访问grub。 cfg文件,您应该看一下它以了解一下外观。 grub.cfg文件太大,无法包含在本文中。
grub.cfg的主要配置文件集位于/etc/grub.d目录中。 该目录中的每个文件都包含GRUB代码,这些代码将收集到最终的grub.cfg文件中。 这些配置文件的名称中使用的编号方案旨在提供顺序,以便最终的grub.cfg文件组装成正确的顺序。 这些文件中的每个文件都有一个注释来表示该部分的开头和结尾,并且这些注释也是最终grub.cfg文件的一部分,因此可以查看从哪个文件生成了每个部分。 分隔注释如下所示:
### BEGIN /etc/grub.d/10_linux ### ### END /etc/grub.d/10_linux ###
除非您是GRUB专家并且了解所做的更改,否则不要修改这些文件。 即使这样,您也应该始终保留原始的工作grub的备份副本。 cfg文件。 特定文件40_custom和41_custom旨在用于生成对GRUB配置的用户修改。 您仍然应该意识到对这些文件进行任何更改的后果,并维护原始grub的备份。 cfg文件。
您也可以将自己的文件添加到/etc/grub.d目录。 这样做的一个原因可能是为非Linux操作系统添加菜单行。 只需确保遵循命名约定,以确保在配置文件中的10_linux条目之前或之后立即添加了附加菜单项。
原始GRUB的配置非常简单明了。 我只要修改/boot/grub/grub.conf即可。 我仍然可以通过更改/ boot / grub2 / grub来修改GRUB2 。 cfg ,但是新版本比原始GRUB复杂得多。 另外,在安装新内核时, grub.cfg可能会被覆盖,因此所有更改都可能消失。 但是,GNU.org GRUB手册确实讨论了/boot/grub2/grub.cfg的直接创建和修改。
一旦您真正知道如何做,更改GRUB2的配置就非常容易。 我只是在研究GRUB2的上一篇文章时才发现的。 秘密公式位于/ etc / default目录中,其中自然有一个名为grub的文件,然后将其与简单的终端命令配合使用。 / etc / default目录包含一些程序的配置文件,例如Google Chrome,useradd和grub。
/ etc / default / grub文件非常简单。 grub默认文件已经列出了许多有效的键/值对。 您可以简单地更改现有键的值或添加文件中尚未存在的其他键。 下面的清单1显示了未修改的/ etc / default / gru b文件。
GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)" GRUB_DEFAULT=saved GRUB_DISABLE_SUBMENU=true GRUB_TERMINAL_OUTPUT="console" GRUB_CMDLINE_LINUX="rd.lvm.lv=fedora_fedora25vm/root rd.lvm.lv=fedora_fedora25vm/swap rd.lvm.lv=fedora_fedora25vm/usr rhgb quiet" GRUB_DISABLE_RECOVERY="true"
清单1:Fedora 25的原始grub默认文件。
包含有关grub文件中可能包含的所有可能密钥的信息。 除了修改grub默认文件中已经存在的某些键的值外,我不需要做任何其他事情。 让我们看一下每个键的含义以及一些不出现在grub默认文件中的键。
在这里我没有介绍的其他键可能对您有用。 它们的描述位于 5.1节中。
完成所需的配置后,必须生成/ boot / grub2 / grub。 cfg文件。 这可以通过以下命令完成。
grub2-mkconfig > /boot/grub2/grub.cfg
此命令按顺序获取/etc/grub.d中的配置文件以构建grub。 cfg文件,并使用grub默认文件的内容来修改输出以实现最终所需的配置。 grub2-mkconfig命令尝试查找所有已安装的内核,并在grub的10_Linux部分为每个内核创建一个条目。 cfg文件。 它还创建一个“救援”条目,以提供一种方法来从阻止Linux启动的重大问题中恢复。
强烈建议您不要编辑grub。 手动cfg文件,因为对文件的任何直接修改都会在下次安装新内核或手动运行grub2-mkconfig时被覆盖。
我遇到了GRUB2的一个问题,如果您不了解,可能会导致严重的后果。 救援内核不引导,而是引导其他内核之一。 我发现它是列表中索引1处的内核,即列表中的第二个内核。 其他测试表明,无论使用原始grub还是发生此问题。 cfg配置文件或我生成的文件。 我已经在虚拟和真实硬件上进行了尝试,但每个问题都相同。 我仅在Fedora 25上尝试过此操作,因此在其他Fedora版本中可能不是问题。
请注意,从“救援”内核生成的“恢复”内核条目确实可以工作并引导至维护模式登录名。
我建议在grub默认文件中将GRUB_DISABLE_RECOVERY更改为“ false”,并生成自己的grub.cfg 。 这将在GRUB菜单中为每个已安装的内核生成可用的恢复条目。 这些恢复配置将按预期运行,并在命令行中根据runlevel命令引导至运行级别1,该命令行要求输入密码以进入维护模式。 您也可以按Ctrl-D组合键以继续正常启动到默认运行级别。
GRUB是在BIOS之后发生的一系列事件中的第一步,这些事件将Linux计算机引导到可用状态。 理解如何配置GRUB对于从各种问题中恢复或规避是很重要的。
多年来,我不得不多次引导至恢复或救援模式,以解决许多类型的问题。 其中一些问题是由于诸如/ etc / fstab或其他配置文件中的条目不正确之类的东西导致的实际引导问题,而其他问题则是由于与最新内核不兼容的应用程序或系统软件所引起的。 硬件兼容性问题也可能阻止特定内核启动。
希望这些信息可以帮助您开始使用GRUB配置。
翻译自:
linux grub2
转载地址:http://qryzd.baihongyu.com/