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

この記事では、GRUBについて紹介し、ブートローダーがなぜ必要であり、システムに柔軟性を追加する方法について説明します。
コンピューターの電源ボタンを押すときから完全に機能するシステムを取得するまでのLinuxブートプロセスは、次の高レベルのシーケンスに従います:
- 1. POST(Power-On Self Testとしても知られる)と呼ばれるプロセスがコンピューターのハードウェアコンポーネント全体をチェックします。
- 2. POSTが完了すると、コントロールをブートローダーに渡し、ブートローダーはLinuxカーネルをメモリにロードし(initramfsと一緒に)、実行します。Linuxで最も使用されているブートローダーは、GRand Unified Boot loader(GRUBとも呼ばれる)です。
- 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). 使用するカーネルを指定してシステムの動作を変更する、
- 2). 別のオペレーティングシステムをブートすることを選択する、および
- 3). ブートオプションを変更するための構成スタンザを追加または編集するなどのことができます。
今日、GRUBはGNUプロジェクトによって維持され、彼らのウェブサイトで十分に文書化されています。このガイドを進む際には、GNU公式ドキュメントを使用することをお勧めします。
システムが起動すると、メインコンソールで以下のGRUB画面が表示されます。最初に、代替カーネルの選択を求められます(デフォルトでは、システムは最新のカーネルを使用して起動します)、そしてc
を押してGRUBコマンドラインに入力するか、ブートオプションを編集することができます(e
キーを押します)。

古いカーネルで起動する理由の1つは、アップグレード後に正常に動作していたハードウェアデバイスが「不調になる」ことがあるためです(例としてこのリンクを参照してくださいAskUbuntuフォーラム)。
GRUB v2の構成は、/boot/grub/grub.cfg
または/boot/grub2/grub.cfg
から起動時に読み込まれますが、/boot/grub/grub.conf
または/boot/grub/menu.lst
はv1で使用されます。これらのファイルは手動で編集しないでくださいが、/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

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 Linux、Slackwareの派生物を試したときに私に起こりました。 インストール後、ビデオカードの正しい設定を検出しなかったため、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.cfg
(CentOSおよびopenSUSE)を実行してgrub.cfg
を更新する必要があります(そうしないと、変更はブート時に失われます)。
このコマンドは、以前に言及されたブート構成ファイルを処理して、grub.cfg
を更新します。この方法により、変更が永続化され、ブート時にGRUBを介して渡されたオプションは現在のセッション中のみ有効になります。
LinuxのGRUBの問題を修正する
第2のオペレーティングシステムをインストールした場合や、人為的なエラーによりGRUB構成ファイルが破損した場合、システムを元通りにし、再起動できる方法があります。
初期画面で、GRUBコマンドラインを取得するにはc
を押します(デフォルトのブートオプションを編集するにはe
を押すこともできます)。利用可能なコマンドをGRUBプロンプトで表示するには、helpを使用します。

インストールされているデバイスとファイルシステムをリストアップするlsに焦点を当て、見つかったものを調べます。以下の画像では、4つのハードドライブ(hd0
からhd3
)があることがわかります。
hd0
だけがパーティション分割されているようです(msdos1とmsdos2によって示されており、1と2はパーティション番号で、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 Troubleshooting guideに記載されており、そこで推奨される修正方法も説明されています。
要約
この記事では、GRUBを紹介し、オンラインおよびオフラインのドキュメントの場所を示し、ブートローダー関連の問題によりシステムが正常に起動しなくなったシナリオに取り組む方法を説明しました。
幸いにも、GRUBは最もよく文書化されたツールの1つであり、この記事で共有したリソースを使用して、インストールされたドキュメントまたはオンラインで簡単にヘルプを見つけることができます。
質問やコメントがありましたら、以下のコメントフォームを使用してお知らせください。お問い合わせをお待ちしております!
Source:
https://www.tecmint.com/configure-and-troubleshoot-grub-boot-loader-linux/