Infra Engineer

ブートマネージャのインストールと設定 ~ブートローダ~
2020.11.30
Lv1

ブートマネージャのインストールと設定 ~ブートローダ~

今回の内容

今回は、ブートローダについて解説します。

試験ポイント

★LPIC試験ポイント①★

/boot配下に格納されているファイルが重要です!
boot配下には、カーネルのイメージファイル初期RAMディスクが格納されていることをしっかり覚えておきましょう。★LPIC試験ポイント①★

★LPIC試験ポイント②★

GRUB2をインストールするコマンドが重要です!
★LPIC試験ポイント②★

GRUB

コンピュータに電源を入れ、LINUXシステムが起動すると、以下の順番で起動します。

今回は、ブートローダについてです。
ブートローダの役割は、カーネルを選択して起動することです。
多くのディストリビューションで標準的に採用されているブートローダに、GRUBがあります。
GRUBは、コンピュータ起動時に、OSをメモリにロードするプログラム(ブートローダ)の一つ であり、
多くの※ファイルシステムを直接読むことができます。
また、GRUBには、「GRUB Legacy」と「GRUB2」のバージョンがあります。
バージョン0.9系ものを「GRUB Legacy」、1.9系のものを「GRUB2」と呼びます。
GRUB Legacyから見ていきましょう。

(用語解説1)ファイルシステムについて

用語解説:ファイルシステム
ファイルを管理する仕組みのこと。
LINUXにおいては、デバイス(ハードディスク等)をファイルとして認識します。

GRUB Legacy

CentOS6では、GRUBLegacyがインストールされています。
GRUBLegacyがインストールされている環境では、以下のような起動画面が表示されます。
inの次に「0」とありますが、これは待機時間が設定されていて、5→4→3→2→1→0とカウントされていきます。複数のカーネルがある場合、ここで起動したいカーネルを選択することもできます。また、そのまま何もしないと、デフォルトのカーネルが自動的に起動します。

上記の設定ファイルはどこにあるのでしょうか。
GRUBLegacyの※設定ファイルは「/boot/grub/grub.conf」となっています。
(Debian系では「/boot/grub/menu.lst」となります)

(用語解説2)設定ファイルについて
設定ファイルとは、プログラムで使う「設定値」が書いてあるファイルの事です。
通常設定ファイルは、プログラムとは別ファイルで用意されています。
プログラムの中に埋め込んでしまうと、設定値に変更があった場合に変更するのが大変なためです。
言い換えれば、「変更する可能性がある値」が書いてあるファイルのこと認識してもよいでしょう。
/boot/grub/grub.confの中身を確認
ファイルの中身を確認するには、catコマンドを使用します。
[root@localhost ~]# cat /boot/grub/grub.conf

default=0          //timoutの秒数が経過後、起動するデフォルトのエントリ
timeout=5          //プロンプトが表示されるまでの時間(待機時間)
splashimage=(hd0,0)/grub/splash.xpm.gz     //起動時のGRUBの設定画面の背景
hiddenmenu                                 //起動時にGRUBメニューを表示する
title CentOS 6 (2.6.32-696.el6.x86_64)     //メニューに表示するエントリの名前
        root (hd0,0)                       //①ルートパーティションの指定
                                           //↓②カーネルイメージの指定
        kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=0a7a7c72-fc41-41e0-925a-eb6bb2e392e5 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
        initrd /initramfs-2.6.32-696.el6.x86_64.img     //初期RAMディスクの指定
[root@localhost ~]#

①8行目(root (hd0,0) )
ルートパーティションを指定するには、「root (hdディスク番号,パーティション番号)」と指定します。
GRUBLegacyは、番号はどちらも0から数えます。
「root」のところでは、GRUBが格納されているパーティションを示していて、root (hd0,0)は、1番目のディスクの1番目の※パーティションを意味します。
つまり、「(hd0,0)にブートローダの情報(/boot/)が入ってますよ」という意味です。

★LPIC試験ポイント①★

②10行目( kernel /vmlinuz-<バージョン>)
また、設定ファイル内の「/vmlinuz~」はカーネルイメージファイルです。
ブートローダがこのファイルを検索して、カーネルを起動します。
③11行目(initramfs<バージョン>)
初期RAMディスクです。
このカーネルイメージファイルと初期RAMディスクのファイルは、/boot/のディレクトリ配下に格納されています。

初期RAMディスクとはなんでしょうか。
ブートローダがカーネル本体のプログラムと初期RAMディスクをメモリーに読みこんでカーネルを起動します。カーネルはハードディスクに格納されたファイルシステムにマウントする必要があり、そのためにデバイスドライバーが必要になります。しかし、デバイスドライバーそのものが、ファイルシステムに格納されているので、ファイルシステムにマウントすることができません。そこで、初期RAMディスクに含まれるデバイスドライバーを利用して、ファイルシステムにマウントします。その後、ファイルシステムの中にある設定ファイルに従ってinit(systemd)が各種サービスを起動していく流れとなります。

(用語解説3)パーティションについて
「パーティション」は、ハードディスク内の分割された記憶領域のことをさします。もっとざっくり説明しますと、ハードディスク内で分けられた部屋(領域)のことです。
ハードディスク内を部屋分けしておくことで、個別にデータのバックアップが容易になったり、障害が発生したパーティションだけをリカバリするとができたりメリットがあります。パーティションについての詳しい説明は、違う記事で紹介いたします。
まずは、ハードディスク内に部屋分けすることをパーティションを言うと理解しておきましょう。
(用語解説4)ルートパーティション
※用語解説:ルートパーティション
頂点のルートディレクトリを含むディスクパーティションを指すUNIXの用語。

GRUB2

GRUB2は、最新のLinuxディストリビューションではGRUBの後継にあたるGRUB2が採用されています。
GRUB2では、モジュールを動的ロードする機能やリカバリーモードなどがあります。
また、GRUB2は、ハードディスクの番号とパーティションの番号がGRUB Legacyと数え方が異なります。

・GRUB Legacyではディスク番号、パーティション番号ともに「0」から数えます。
・GRUB2ではディスク番号は「0」、パーティションは「1」から数えます。

GRUB Legacy GRUB2
ディスク番号 0から数える 0から数える
パーティション番号 0から数える 1から数える

・GRUB2の設定ファイルは「/boot/grub/grub.cfg」です。
設定内容は 「/etc/default/grub」、および「/etc/grub.d/」ディレクトリ内のファイルに記述し、
「grub2-mkconfig」コマンドにて反映します。
※設定ファイル「/boot/grub2/grub.cfg」を直接操作しないのがポイントです。

——————–
以下の例では、「/boot/grub2/grub.cfg」のファイルの中身を確認後、/etc/default/grubのファイルの中身を編集し、LINUXが起動後プロンプトが表示されるまでの時間(待機時間)のデフォルトの秒数を5秒から10秒に編集したものです。

例1)/boot/grub2/grub.cfgの確認
3行目に「「DO NOT EDIT THIS FILE」と記載があり、直接編集しない事を確認できます。
[root@localhost ~]# cat /boot/grub2/grub.cfg
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub2-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#
例2)/etc/default/grubを編集
/etc/default/grubを編集して、3行目のTIMEOUT時間を「5」→「10」に変更
[root@localhost ~]# vi /etc/default/grub

GRUB_TIMEOUT=10 //5→10に変更


GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto spectre_v2=retpoline rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet"
GRUB_DISABLE_RECOVERY="true"
例3)grub2-mkconfigコマンドにて設定を反映
オプション「-o」により出力ファイルを指定します。
[root@localhost ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-1127.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-1127.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-a7c06e3e60ee411095f963857a40281f
Found initrd image: /boot/initramfs-0-rescue-a7c06e3e60ee411095f963857a40281f.img
done
例4)/boot/grub2/grub.cfgの確認
8行目のtimeout時間が5→10に変更されている事が確認できます。
[root@localhost ~]# cat /boot/grub2/grub.cfg
・
・
・
# unavailable.
else
  set timeout=10   //10秒に変更されている
fi
例5)LINUXのコンピュータを再起動
変更した設定が反映されており、10秒からカウントが始まります。

GRUBのインストール

GRUBをインストール
grub-install [オプション] <インストールする場所>

通常、GRUB2は、デフォルトでインストールされていますので、インストールする必要はありませんが、インストール時にGRUB2がうまくインストールできなかった場合などに行います。

★LPIC試験ポイント②★

新規にGRUB2をインストールするには、インストール先のデバイスファイルを※引数に指定して、「grub-install」コマンドを実行します。例として、「grub-install /dev/sda」のように指定します。※また、Ubuntuの場合、実行するコマンドは、「grub2-install」ではなく、「grub-install」となりますので、注意が必要です。

(用語解説4)引数について
[引数]はコマンドに渡す値の事です。

例えば、shutdown –h nowのコマンドは、今すぐに再起動(-reboot)するというコマンドです。ここで「now(今すぐ)」に該当するのが、引数になります。

まとめ

LINUXのカーネルを起動するのに必要なブートローダである「「GRUB Legacy」と「GRUB2」の理解と試験ポイントをしっかりと覚えましょう!
それでは今回はこのあたりで。

Linux資格 「LPIC Lv1」徹底解説 連載目次リンク

Linux資格 「LPIC Lv1」徹底解説 連載目次

連載執筆講師が講座開講中!ITスクール SAK

ITスクールSAK | LPIC Lv1合格保証コース 講座紹介ページ