ブートマネージャのインストールと設定 ~ブートローダ~
今回の内容
今回は、ブートローダについて解説します。
試験ポイント
/boot配下に格納されているファイルが重要です!
boot配下には、カーネルのイメージファイルと初期RAMディスクが格納されていることをしっかり覚えておきましょう。★LPIC試験ポイント①★
GRUB2をインストールするコマンドが重要です!
★LPIC試験ポイント②★
GRUB
コンピュータに電源を入れ、LINUXシステムが起動すると、以下の順番で起動します。
今回は、ブートローダについてです。
ブートローダの役割は、カーネルを選択して起動することです。
多くのディストリビューションで標準的に採用されているブートローダに、GRUBがあります。
GRUBは、コンピュータ起動時に、OSをメモリにロードするプログラム(ブートローダ)の一つ であり、
多くの※ファイルシステムを直接読むことができます。
また、GRUBには、「GRUB Legacy」と「GRUB2」のバージョンがあります。
バージョン0.9系ものを「GRUB Legacy」、1.9系のものを「GRUB2」と呼びます。
GRUB Legacyから見ていきましょう。
GRUB Legacy
CentOS6では、GRUBLegacyがインストールされています。
GRUBLegacyがインストールされている環境では、以下のような起動画面が表示されます。
inの次に「0」とありますが、これは待機時間が設定されていて、5→4→3→2→1→0とカウントされていきます。複数のカーネルがある場合、ここで起動したいカーネルを選択することもできます。また、そのまま何もしないと、デフォルトのカーネルが自動的に起動します。
上記の設定ファイルはどこにあるのでしょうか。
GRUBLegacyの※設定ファイルは「/boot/grub/grub.conf」となっています。
(Debian系では「/boot/grub/menu.lst」となります)
[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)が各種サービスを起動していく流れとなります。
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秒に編集したものです。
[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 #
[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"
[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
[root@localhost ~]# cat /boot/grub2/grub.cfg ・ ・ ・ # unavailable. else set timeout=10 //10秒に変更されている fi
GRUBのインストール
通常、GRUB2は、デフォルトでインストールされていますので、インストールする必要はありませんが、インストール時にGRUB2がうまくインストールできなかった場合などに行います。
★LPIC試験ポイント②★
新規にGRUB2をインストールするには、インストール先のデバイスファイルを※引数に指定して、「grub-install」コマンドを実行します。例として、「grub-install /dev/sda」のように指定します。※また、Ubuntuの場合、実行するコマンドは、「grub2-install」ではなく、「grub-install」となりますので、注意が必要です。
まとめ
LINUXのカーネルを起動するのに必要なブートローダである「「GRUB Legacy」と「GRUB2」の理解と試験ポイントをしっかりと覚えましょう!
それでは今回はこのあたりで。