LFCS:Grand Unified Bootloader(GRUB)の構成とトラブルシューティング方法 – パート13

2016年2月2日から有効なLFCS認定試験の目的の最近の変更により、こちらに掲載されているLFCSシリーズに必要なトピックを追加しています。この試験の準備のために、LFCEシリーズにも従うことを強くお勧めします。

LFCS: Configure and Troubleshoot Grub Boot Loader – Part 13

この記事では、GRUBについて紹介し、ブートローダーがなぜ必要であり、システムに柔軟性を追加する方法について説明します。

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

  1. 1. POST(Power-On Self Testとしても知られる)と呼ばれるプロセスがコンピューターのハードウェアコンポーネント全体をチェックします。
  2. 2. POSTが完了すると、コントロールをブートローダーに渡し、ブートローダーはLinuxカーネルをメモリにロードし(initramfsと一緒に)、実行します。Linuxで最も使用されているブートローダーは、GRand Unified Boot loader(GRUBとも呼ばれる)です。
  3. 3. カーネルはハードウェアをチェックしてアクセスし、その後初期プロセス(一般的には「init」として知られています)を実行してサービスを起動することでシステムの起動を完了させます。

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

GRUBブートローダーの紹介

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

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

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

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

今日、GRUBGNUプロジェクトによって維持され、彼らのウェブサイトで十分に文書化されています。このガイドを進む際には、GNU公式ドキュメントを使用することをお勧めします。

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

GRUB Boot Screen

古いカーネルで起動する理由の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_DEFAULT3 に設定する必要があります(エントリはゼロから内部的に番号が付けられています)。

GRUB_DEFAULT=3
Boot System with Old Kernel Version

1つの特別な関心を持つ最終的な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年前のラップトップでVector LinuxSlackwareの派生物を試したときに私に起こりました。 インストール後、ビデオカードの正しい設定を検出しなかったため、GRUBを介して渡されるカーネルオプションを変更する必要がありました。

もう1つの例は、システムをシングルユーザーモードにしてメンテナンスタスクを実行する必要がある場合です。 これは、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/defalt/grubを編集した後、update-grub(Ubuntu)またはgrub2-mkconfig -o /boot/grub2/grub.cfgCentOSおよびopenSUSE)を実行してgrub.cfgを更新する必要があります(そうしないと、変更はブート時に失われます)。

このコマンドは、以前に言及されたブート構成ファイルを処理して、grub.cfgを更新します。この方法により、変更が永続化され、ブート時にGRUBを介して渡されたオプションは現在のセッション中のみ有効になります。

LinuxのGRUBの問題を修正する

第2のオペレーティングシステムをインストールした場合や、人為的なエラーによりGRUB構成ファイルが破損した場合、システムを元通りにし、再起動できる方法があります。

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

Fix Grub Configuration Issues in Linux

インストールされているデバイスとファイルシステムをリストアップするlsに焦点を当て、見つかったものを調べます。以下の画像では、4つのハードドライブ(hd0からhd3)があることがわかります。

hd0だけがパーティション分割されているようです(msdos1msdos2によって示されており、12はパーティション番号で、msdosはパーティションスキームです)。

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

# ls (hd0,msdos1)/

ハイライトされた領域に、このパーティションにgrub2ディレクトリが見つかりました。

Find Grub Configuration

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

set prefix=(hd0,msdos1)/grub2
set root=(hd0,msdos1)
insmod normal
normal
Find and Launch Grub Menu

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

# grub2-install /dev/sdX

その他のより複雑なシナリオは、Ubuntu GRUB2 Troubleshooting guideに記載されており、そこで推奨される修正方法も説明されています。

要約

この記事では、GRUBを紹介し、オンラインおよびオフラインのドキュメントの場所を示し、ブートローダー関連の問題によりシステムが正常に起動しなくなったシナリオに取り組む方法を説明しました。

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

質問やコメントがありましたら、以下のコメントフォームを使用してお知らせください。お問い合わせをお待ちしております!

Source:
https://www.tecmint.com/configure-and-troubleshoot-grub-boot-loader-linux/