ブートローダーと初期 RAM ディスク

June 29, 2017

ブートローダー ( GRUB2 ) の役割と設定方法

GRUB2 は /boot/grub2/grub.cfg を読み込み、起動メニューを表示する。 新しいバージョンのカーネルを RPM パッケージから導入すると、GRUB2 の設定ファイルは自動的に更新される。この際、/boot 以下にあるカーネルのファイルを検出して、対応するエントリーを起動メニューに追加。 どのようなエントリーが設定されているかは、以下のコマンドで確認できる。

$ sudo grep "^menuentry" /boot/grub2/grub.cfg | cut -d "'" -f2

Red Hat Enterprise Linux Server (3.10.0-514.21.2.el7.x86_64) 7.3 (Maipo)
Red Hat Enterprise Linux Server (0-rescue-2c0164cc85e344b6837514530c15f0d7) 7.3 (Maipo)

カーネルの起動オプションを変更するには /etc/default/grub を編集する。

$ sudo emacs /etc/default/grub

GRUB_TIMEOUT=1
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="console=ttyS0,115200n8 console=tty0 net.ifnames=0 crashkernel=auto"
GRUB_DISABLE_RECOVERY="true"

それぞれの意味は以下の通り。

設定項目 説明
GRUB_TIMEOUT メニュー画面の待ち時間指定
GRUB_DEFAULT デフォルトエントリーの指定
GRUB_DISABLE_SUBMENU false にするとカーネルごとにメニューをグループ化する
GRUB_TERMINAL_OUTPUT GRUB2 の画面出力先の指定
GRUB_CMDLINE_LINUX デフォルトのカーネルオプションを指定
GRUB_DISABLE_RECOVERY false にするとレスキューモードの起動メニューを追加

変更の反映は以下のコマンドで行う。

$ grub2-mkconfig -o /boot/grub2/grub.cfg
 
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-514.21.2.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-514.21.2.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-2c0164cc85e344b6837514530c15f0d7
Found initrd image: /boot/initramfs-0-rescue-2c0164cc85e344b6837514530c15f0d7.img
done

現在デフォルトに設定されているエントリーは以下のコマンドで確認。

$ sudo grub2-editenv list
 
saved_entry=Red Hat Enterprise Linux Server (3.10.0-514.21.2.el7.x86_64) 7.3 (Maipo)

GRUB2 本体の保存場所はディスクのパーティション構成によって異なる。 通常のディスクパーティション構成: MBR の直後の空き領域 GPT 構成: BIOS boot partion という特別なパーティションを用意し、そこに保存される

初期 RAM ディスクの役割

カーネルが起動すると、起動ディスクにアクセスし、各種ファイルシステムをマウントする。その準備として、起動ディスクにアクセスするためのデバイスドライバーが必要になる。 Linux のカーネルモジュール一式は、/lib/modules/ 以下のディレクトリに保存されている。しかし、起動直後のカーネルはまだデバイスドライバーを読み込んでいないのでこのディレクトリにアクセスできない。 -> 初期 RAM ディスクの出番

初期 RAM ディスク: デバイスドライバーをはじめとする、カーネルが起動直後に使用するファイル群をまとめたアーカイブファイル。

初期 RAM ディスクに含まれるファイルの一覧は lsinitrd コマンドで表示できる。

$ sudo lsinitrd /boot/initramfs-3.10.0-514.21.2.el7.x86_64.img 
 
Image: /boot/initramfs-3.10.0-514.21.2.el7.x86_64.img: 36M
========================================================================
Early CPIO image
========================================================================
drwxr-xr-x   3 root     root            0 Jun 13 15:32 .
-rw-r--r--   1 root     root            2 Jun 13 15:32 early_cpio
drwxr-xr-x   3 root     root            0 Jun 13 15:32 kernel
drwxr-xr-x   3 root     root            0 Jun 13 15:32 kernel/x86
drwxr-xr-x   2 root     root            0 Jun 13 15:32 kernel/x86/microcode
-rw-r--r--   1 root     root        24070 Jun 13 15:32 kernel/x86/microcode/AuthenticAMD.bin
-rw-r--r--   1 root     root       947200 Jun 13 15:32 kernel/x86/microcode/GenuineIntel.bin
========================================================================
Version: dracut-033-463.el7_3.1
...

 © 2023, Dealing with Ambiguity