この記事では、GRUB の知識を紹介し、ブート ローダーが必要な理由と、ブート ローダーがどのようにシステムに機能を追加するかについて説明します。
Linux ブート プロセスは、コンピュータの電源ボタンを押したときから開始され、システムが完全に機能するまで続きます。プロセス全体は次の主な手順に従います:
シリーズの 7 回目の講義 (「SysVinit、Upstart、および Systemd」) では、最新の Linux ディストリビューションで使用されるサービス管理システムとツールのいくつかを紹介しました。続行する前に、そのレッスンを復習することをお勧めします。
GRUB ブート ローダーの概要最新のシステムでは、2 つの主要な GRUB バージョン (1 つは GRUB Legacy とも呼ばれる v1 バージョン、もう 1 つは ##v2 バージョン) があります。ほとんどの最新バージョンの配布システムは、デフォルトで v2 バージョンを使用します。現在、Red Hat Enterprise Linux 6 とその派生バージョンのみが依然としてバージョン v1 を使用しています。
したがって、このガイドでは、v2 バージョンの機能に焦点を当てます。
GRUBのバージョンに関係なく、ブートローダーを使用するとユーザーは次のことができます。
別のカーネルの使用を指定してシステムの動作を変更します。プロジェクトは GRUB を維持しており、Web サイトで広範なドキュメントを提供しています。このガイドを読みながら、公式の GNU ドキュメントを参照することを強くお勧めします。 システムが起動すると、メイン コンソールに次の
GRUB画面が表示されます。最初は、プロンプトに従って複数のカーネル バージョンの中からカーネルを選択し (デフォルトでは、システムは最新のカーネルで起動します)、GRUB コマンド ライン モードに入ることができます (c# を使用) ## キー)、またはスタートアップ項目を編集します (e キーを押します)。
GRUB スプラッシュ画面
古いバージョンのカーネルで起動することを検討する理由の 1 つは、以前は正常に動作していたハードウェア デバイスがアップグレード後に「動作する」場合です (たとえば、AskUbuntu フォーラムのこのスレッドを参照できます。 )。
起動中に、GRUB v2
が/boot/grub/grub.cfg または /boot/grub2/grub.cfg ファイルから読み取られます。構成ファイル。GRUB v1 で使用される構成ファイルは、/boot/grub/grub.conf または /boot/grub/menu.lst から取得されます。これらのファイル は手動で直接編集するべきではなく、/etc/default/grub の内容および /etc/grub.d## 内のファイルを介して更新する必要があります。 # ディレクトリ。 CentOS 7 では、システムが最初にインストールを完了すると、次の構成ファイルが生成されます: リーリー オンライン ドキュメントに加えて、次のコマンドを使用して GNU GRUB マニュアルを参照することもできます。 リーリー
/etc/default/grub ファイルで使用できるオプションに特に興味がある場合は、設定セクションのヘルプ ドキュメントを直接参照できます。
# info -f grub -n 'Simple configuration'
使用上述命令,你会发现 GRUB_TIMEOUT 用于设置启动画面出现和系统自动开始启动(除非被用户中断)之间的时间。当该变量值为 -1 时,除非用户主动做出选择,否则不会开始启动。
当同一台机器上安装了多个操作系统或内核后,GRUB_DEFAULT 就需要用一个整数来指定 GRUB 启动画面默认选择启动的操作系统或内核条目。我们既可以通过上述启动画面查看启动条目列表,也可以使用下面的命令:
在 CentOS 和 openSUSE 系统上# awk -F/' '$1=="menuentry " {print $2}' /boot/grub2/grub.cfg
# awk -F/' '$1=="menuentry " {print $2}' /boot/grub/grub.cfg
如下图所示的例子中,如果我们想要使用版本为 3.10.0-123.el7.x86_64 的内核(第四个条目),我们需要将 GRUB_DEFAULT 设置为 3(条目从零开始编号),如下所示:
GRUB_DEFAULT=3
使用旧版内核启动系统
最后一个需要特别关注的 GRUB 配置变量是 GRUB_CMDLINE_LINUX,它是用来给内核传递选项的。我们可以在 内核变量文件 和 man 7 bootparam 中找到能够通过 GRUB 传递给内核的选项的详细文档。
我的 CentOS 7 服务器上当前的选项是:
GRUB_CMDLINE_LINUX="vconsole.keymap=la-latin1 rd.lvm.lv=centos_centos7-2/swap crashkernel=auto vconsole.font=latarcyrheb-sun16 rd.lvm.lv=centos_centos7-2/root rhgb quiet"
为什么你希望修改默认的内核参数或者传递额外的选项呢?简单来说,在很多情况下,你需要告诉内核某些由内核自身无法判断的硬件参数,或者是覆盖一些内核检测的值。
不久之前,就在我身上发生过这样的事情,当时我在自己已用了 10 年的老笔记本上尝试了衍生自 Slackware 的 Vector Linux。完成安装后,内核并没有检测出我的显卡的正确配置,所以我不得不通过 GRUB 传递修改过的内核选项来让它工作。
另外一个例子是当你需要将系统切换到单用户模式以执行维护工作时。为此,你可以直接在 GRUB_CMDLINE_LINUX 变量中直接追加 single 并重启即可:
GRUB_CMDLINE_LINUX="vconsole.keymap=la-latin1 rd.lvm.lv=centos_centos7-2/swap crashkernel=auto vconsole.font=latarcyrheb-sun16 rd.lvm.lv=centos_centos7-2/root rhgb quiet single"
编辑完 /etc/default/grub 之后,你需要运行 update-grub (在 Ubuntu 上)或者 grub2-mkconfig -o /boot/grub2/grub.cfg (在 CentOS 和 openSUSE 上)命令来更新 grub.cfg 文件(否则,改动会在系统启动时丢失)。
这条命令会处理早先提到的那些启动配置文件来更新 grub.cfg 文件。这种方法可以确保改动持久化,而在启动时刻通过 GRUB 传递的选项仅在当前会话期间有效。
修复 Linux GRUB 问题如果你安装了第二个操作系统,或者由于人为失误而导致你的 GRUB 配置文件损坏了,依然有一些方法可以让你恢复并能够再次启动系统。
在启动画面中按下 c 键进入 GRUB 命令行模式(记住,你也可以按下 e 键编辑默认启动选项),并可以在 GRUB 提示中输入 help 命令获得可用命令:
修复 Linux 的 Grub 配置问题
我们将会着重关注 ls 命令,它会列出已安装的设备和文件系统,并且我们将会看看它查找到的东西。在下面的图片中,我们可以看到有 4 块硬盘(hd0 到 hd3)。
貌似只有 hd0 已经分区了(msdos1 和 msdos2 可以证明,这里的 1 和 2 是分区号,msdos 则是分区方案)。
现在我们来看看能否在第一个分区 hd0(msdos1)上找到 GRUB。这种方法允许我们启动 Linux,并且使用高级工具修复配置文件,或者如果有必要的话,干脆重新安装 GRUB:
# ls (hd0,msdos1)/
从高亮区域可以发现,grub2 目录就在这个分区:
查找 Grub 配置
一旦我们确信了 GRUB 位于 (hd0, msdos1),那就让我们告诉 GRUB 该去哪儿查找它的配置文件并指示它去尝试启动它的菜单:
set prefix=(hd0,msdos1)/grub2 set root=(hd0,msdos1) insmod normal normal
查找并启动 Grub 菜单
然后,在 GRUB 菜单中,选择一个条目并按下回车键以使用它启动。一旦系统成功启动后,你就可以运行 grub2-install /dev/sdX 命令修复问题了(将 sdX 改成你想要安装 GRUB 的设备)。然后启动信息将会更新,并且所有相关文件都会得到恢复。
# grub2-install /dev/sdX
其它更加复杂的情景及其修复建议都记录在 Ubuntu GRUB2 故障排除指南 中。该指南中阐述的概念对于其它发行版也是有效的。
总结本文向你介绍了 GRUB,并指导你可以在何处找到线上和线下的文档,同时说明了如何面对由于引导加载相关的问题而导致系统无法正常启动的情况。
幸运的是,GRUB 是文档支持非常丰富的工具之一,你可以使用我们在文中分享的资源非常轻松地获取已安装的文档或在线文档。
你有什么问题或建议吗?请不要犹豫,使用下面的评论框告诉我们吧。我们期待着来自你的回复!
以上がGRUB の設定とトラブルシューティングの方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。