ウェブサイト検索

LFCS: Grand Unified Bootloader (GRUB) を構成およびトラブルシューティングする方法 - パート 13


2016 年 2 月 2 日から LFCS 認定試験の目標が変更されたため、ここで公開されている LFCS シリーズに必要なトピックを追加しています。この試験の準備として、LFCE シリーズも受講することを強くお勧めします。

この記事では、GRUB を紹介し、ブート ローダーが必要な理由と、ブート ローダーがシステムにどのように多用途性をもたらすかについて説明します。

コンピュータの電源ボタンを押してからシステムが完全に機能するまでの Linux ブート プロセスは、次の高レベルのシーケンスに従います。

  1. 1. POST (電源投入時自己テスト) と呼ばれるプロセスは、コンピュータのハードウェア コンポーネントの全体的なチェックを実行します。
  2. 2. POST が完了すると、制御がブート ローダーに渡され、ブート ローダーが Linux カーネルを (initramfs とともに) メモリにロードします。 )して実行します。 Linux で最もよく使用されるブート ローダーはGRand ユニファイド ブート ローダー、または略してGRUBです。
  3. 3. カーネルはハードウェアをチェックしてアクセスし、初期プロセス (主に一般名「init 」で知られています) を実行します。これにより、次の処理が開始されてシステムのブートが完了します。サービス。

このシリーズのパート 7 (「SysVinit、Upstart、および Systemd 」) では、最新の Linux ディストリビューションで使用されるサービス管理システムとツールを紹介しました。次に進む前に、その記事を確認してください。

GRUB ブートローダーの紹介

最新のシステムには 2 つの主要な GRUB バージョン (v1GRUB Legacy および v2 とも呼ばれます) が存在しますが、ほとんどのシステムではディストリビューションの最新バージョンでは、デフォルトで v2 が使用されます。現在でもRed Hat Enterprise Linux 6 とその派生版のみがv1を使用しています。

したがって、このガイドでは主にv2 の機能に焦点を当てます。

GRUB のバージョンに関係なく、ブート ローダーを使用すると、ユーザーは次のことを行うことができます。

  1. 1). 使用する別のカーネルを指定してシステムの動作を変更します。
  2. 2). 起動する代替オペレーティング システムを選択します。
  3. 3). 構成スタンザを追加または編集して、ブート オプションなどを変更します。

現在、GRUBGNU プロジェクトによって保守されており、その Web サイトに詳しく文書化されています。このガイドを読み進める際には、GNU 公式ドキュメントを使用することをお勧めします。

システムが起動すると、メイン コンソールに次のGRUB 画面が表示されます。最初に、代替カーネルのどちらかを選択するように求められ (デフォルトでは、システムは最新のカーネルを使用して起動します)、GRUB コマンド ラインを入力することができます (c を使用)。または、ブート オプションを編集します (e キーを押します)。

古いカーネルでの起動を検討する理由の 1 つは、以前は正常に動作していたハードウェア デバイスが、アップグレード後に「正常に動作し」始めたことです (AskUbuntu のこのリンクを参照してください)。例としてフォーラム)。

GRUB v2 設定は、起動時に /boot/grub/grub.cfg または /boot/grub2/grub.cfg から読み取られますが、/boot/grub/grub.conf または /boot/grub/menu.lstv1 で使用されます。これらのファイルは手動で編集することはできませんが、/etc/default/grub の内容と /etc/grub.d 内にあるファイルに基づいて変更されます。

CentOS 7 では、システムの最初のインストール時に作成される構成ファイルは次のとおりです。

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="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"
GRUB_DISABLE_RECOVERY="true"

オンライン ドキュメントに加えて、次の情報を使用して GNU GRUB マニュアルを見つけることもできます。

info grub

/etc/default/grub で使用できるオプションに特に興味がある場合は、構成セクションを直接呼び出すことができます。

info -f grub -n 'Simple configuration'

上記のコマンドを使用すると、GRUB_TIMEOUT が、最初の画面が表示されてから、ユーザーによって中断されない限りシステムの自動起動が開始されるまでの時間を設定していることがわかります。この変数が -1 に設定されている場合、ユーザーが選択するまでブートは開始されません。

複数のオペレーティング システムまたはカーネルが同じマシンにインストールされている場合、GRUB_DEFAULT には、GRUB 初期画面のどの OS またはカーネル エントリをデフォルトで選択して起動するかを示す整数値が必要です。エントリのリストは、上に示したスプラッシュ画面だけでなく、次のコマンドを使用しても表示できます。

CentOS および openSUSE の場合:

awk -F\' '$1=="menuentry " {print $2}' /boot/grub2/grub.cfg

Ubuntuの場合:

awk -F\' '$1=="menuentry " {print $2}' /boot/grub/grub.cfg

以下の画像に示す例では、カーネル バージョン 3.10.0-123.el7.x86_64 (4 番目のエントリ) で起動する場合は、GRUB_DEFAULT を設定する必要があります。 から 3 (エントリは内部的にゼロで始まる番号が付けられます) は次のようになります。

GRUB_DEFAULT=3

特に重要な最後の GRUB 構成変数は GRUB_CMDLINE_LINUX です。これは、カーネルにオプションを渡すために使用されます。 GRUB 経由でカーネルに渡すことができるオプションは、カーネル パラメータ ファイルと man 7 bootparam に詳しく文書化されています。

私の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 を介して渡されたカーネル オプションを変更する必要がありました。

もう 1 つの例は、メンテナンス タスクを実行するためにシステムをシングル ユーザー モードにする必要がある場合です。これを行うには、単語「single」を GRUB_CMDLINE_LINUX に追加して再起動します。

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/defalt/grub を編集した後、update-grub (Ubuntu) または grub2-mkconfig -o /boot/grub2/grub を実行する必要があります。その後、cfg (CentOS および openSUSE) を実行して grub.cfg を更新します (そうしないと、起動時に変更が失われます)。

このコマンドは、前述のブート構成ファイルを処理して grub.cfg を更新します。この方法では、変更が永続的であることが保証されますが、起動時に GRUB を介して渡されたオプションは現在のセッション中にのみ持続します。

Linux GRUB の問題の修正

2 番目のオペレーティング システムをインストールした場合、または人為的エラーにより GRUB 設定ファイルが破損した場合、システムを正常な状態に戻して再度起動できるようにする方法があります。

最初の画面で、c を押して GRUB コマンド ラインを取得し (e を押してデフォルトのブート オプションを編集することもできることに注意してください)、ヘルプを使用して利用可能なオプションを表示します。 GRUB プロンプトのコマンド:

ここでは、インストールされているデバイスとファイルシステムを一覧表示する ls に焦点を当て、検出される内容を調べます。下の画像では、4 つのハード ドライブ (hd0hd3) があることがわかります。

hd0 のみがパーティション化されているようです (msdos1msdos2 で明らかなように、12) はパーティション番号、msdos はパーティション スキームです)。

次に、hd0 (msdos1) の最初のパーティションを調べて、そこに GRUB が見つかるかどうかを確認してみましょう。このアプローチにより、Linux を起動できるようになり、必要に応じて他の高レベルのツールを使用して構成ファイルを修復したり、GRUB を完全に再インストールしたりできます。

ls (hd0,msdos1)/

強調表示された領域にあるように、このパーティション内に grub2 ディレクトリが見つかりました。

GRUB が (hd0,msdos1) に存在することが確認できたら、設定ファイルの場所を GRUB に指示し、メニューの起動を試行するように指示しましょう。

set prefix=(hd0,msdos1)/grub2
set root=(hd0,msdos1)
insmod normal
normal

次に、GRUB メニューでエントリを選択し、Enter キーを押してそのエントリを使用して起動します。システムが起動したら、grub2-install /dev/sdX コマンドを発行できます (sdX を GRUB をインストールするデバイスに変更します)。その後、ブート情報が更新され、すべての関連ファイルが復元されます。

grub2-install /dev/sdX

その他のより複雑なシナリオは、推奨される修正とともに「Ubuntu GRUB2 トラブルシューティング ガイド」に記載されています。そこで説明されている概念は、他のディストリビューションにも当てはまります。

まとめ

この記事では、GRUB について紹介し、オンラインとオフラインの両方でドキュメントを見つけることができる場所を示し、ブートローダー関連の問題によりシステムが正常に起動しなくなったシナリオに対処する方法を説明しました。

幸いなことに、GRUB は最も文書化されているツールの 1 つであり、インストールされたドキュメントまたはこの記事で共有したリソースを使用してオンラインでヘルプを簡単に見つけることができます。

ご質問やご意見はありますか?以下のコメントフォームを使用して、遠慮なくお知らせください。お返事おまちしております!