CentOS7のGRUB2の概要、設定ファイルの構成、設定例についてメモ書きしています。
※目次をクリックすると目次の下部にコンテンツが表示されます。
GRUB2の概要
・GRUBと比較すると、より堅牢で、移植性の高い強力な新規ブートローダー。
・64-bitインテルおよびAMDアーキテクチャーのほかに、PowerPCを含む多種多様なプラットフォームをサポート。
・BIOS、EFIおよびOpenFirmwareを含むファームウェアの追加のタイプをサポート。
※EFI(Extensible Firmware Interface)
従来パソコンのハードウェア制御を担ってきたBIOSに代わる、OSとファームウェアのインターフェース仕様。
※OpenFirmware
現行のnew-world Macintosh に用いられているブートローダ。
・マスターブートレコード(MBR)パーティションテーブルのほかにも、GUIDパーティションテーブル(GPT)をサポート。
※GUIDパーティションテーブル(GPT)
ハードディスクドライブ上のパーティションテーブルの配置に関する標準規格。これはEFI標準の一部であり、旧来のBIOSで使用されているマスターブートレコード (MBR)の置き換えを意図している。従来のMBRパーティションが、テーブルのパラメータから、1セクタ512Byteで定義した場合、最大2TiB迄の領域までしか管理できないのに対し、GPTでは、最大8ZiB迄の領域を定義、管理できる。
・Apple Hierarchical File System Plus(HFS+)およびMicrosoftのNTFSファイルシステムなどのLinux以外のファイルシステムもサポート。
・64-bitインテルおよびAMDアーキテクチャーのほかに、PowerPCを含む多種多様なプラットフォームをサポート。
・BIOS、EFIおよびOpenFirmwareを含むファームウェアの追加のタイプをサポート。
※EFI(Extensible Firmware Interface)
従来パソコンのハードウェア制御を担ってきたBIOSに代わる、OSとファームウェアのインターフェース仕様。
※OpenFirmware
現行のnew-world Macintosh に用いられているブートローダ。
・マスターブートレコード(MBR)パーティションテーブルのほかにも、GUIDパーティションテーブル(GPT)をサポート。
※GUIDパーティションテーブル(GPT)
ハードディスクドライブ上のパーティションテーブルの配置に関する標準規格。これはEFI標準の一部であり、旧来のBIOSで使用されているマスターブートレコード (MBR)の置き換えを意図している。従来のMBRパーティションが、テーブルのパラメータから、1セクタ512Byteで定義した場合、最大2TiB迄の領域までしか管理できないのに対し、GPTでは、最大8ZiB迄の領域を定義、管理できる。
・Apple Hierarchical File System Plus(HFS+)およびMicrosoftのNTFSファイルシステムなどのLinux以外のファイルシステムもサポート。
設定ファイルの構成
1)GRUB2設定ファイルの概要
・設定ファイルのパス
従来のBIOSベースマシン:/boot/grub2/grub.cfg
UEFIマシンの場合:/boot/efi/EFI/redhat/grub.cfg
・上記設定ファイルは以下のディレクトリ、ファイルから情報を取得し構成し、/usr/sbin/grub2-mkconfigユーティリティが生成しているので、手動で直接編集を行わないようにする。
①/boot/ディレクトリにあるLinuxカーネル
②/etc/grub.d/ディレクトリにあるテンプレートファイル
③/etc/default/grubファイル内のカスタム設定
・設定を変更する場合は上記②、③のファイルを変更し、変更した内容を以下のコマンドで反映させる。
# grub2-mkconfig -o /boot/grub2/grub.cfg(従来BIOSの場合)
# grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg(UEFIの場合)
2)/etc/default/grubファイル
# more /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT=”console”
GRUB_CMDLINE_LINUX=”crashkernel=auto rd.lvm.lv=cl/root rd.lvm.lv=cl/swap rhgb quiet”
GRUB_DISABLE_RECOVERY=”true”
3)/etc/grub.d/ディレクトリ内のメニュー構築用スクリプト
・00_header
/etc/default/grubファイルからGRUB2設定を読み込む。
・01_users
ブートローダーのパスワードがkickstartに割り当てられている場合にのみ、作成される。
・10_linux
Red Hat Enterprise Linuxのデフォルトのパーティションでカーネルを見つける。
・30_os-prober
別のパーティションで見つかったオペレーティングシステム用にエントリーを構築する。
・40_custom
追加のメニューエントリー作成に使用可能なテンプレート。
※/etc/grub.d/ディレクトリからのスクリプトはアルファベット順に読み取られるので、名前を変更して特定のメニューエントリーの起動順を変更することができる。
・設定ファイルのパス
従来のBIOSベースマシン:/boot/grub2/grub.cfg
UEFIマシンの場合:/boot/efi/EFI/redhat/grub.cfg
・上記設定ファイルは以下のディレクトリ、ファイルから情報を取得し構成し、/usr/sbin/grub2-mkconfigユーティリティが生成しているので、手動で直接編集を行わないようにする。
①/boot/ディレクトリにあるLinuxカーネル
②/etc/grub.d/ディレクトリにあるテンプレートファイル
③/etc/default/grubファイル内のカスタム設定
・設定を変更する場合は上記②、③のファイルを変更し、変更した内容を以下のコマンドで反映させる。
# grub2-mkconfig -o /boot/grub2/grub.cfg(従来BIOSの場合)
# grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg(UEFIの場合)
2)/etc/default/grubファイル
# more /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT=”console”
GRUB_CMDLINE_LINUX=”crashkernel=auto rd.lvm.lv=cl/root rd.lvm.lv=cl/swap rhgb quiet”
GRUB_DISABLE_RECOVERY=”true”
3)/etc/grub.d/ディレクトリ内のメニュー構築用スクリプト
・00_header
/etc/default/grubファイルからGRUB2設定を読み込む。
・01_users
ブートローダーのパスワードがkickstartに割り当てられている場合にのみ、作成される。
・10_linux
Red Hat Enterprise Linuxのデフォルトのパーティションでカーネルを見つける。
・30_os-prober
別のパーティションで見つかったオペレーティングシステム用にエントリーを構築する。
・40_custom
追加のメニューエントリー作成に使用可能なテンプレート。
※/etc/grub.d/ディレクトリからのスクリプトはアルファベット順に読み取られるので、名前を変更して特定のメニューエントリーの起動順を変更することができる。
GRUB2のデフォルトのブートエントリーの変更
1)設定値の確認
・/etc/default/grubファイルのGRUB_DEFAULTキーで設定。
例)
GRUB_DEFAULT=saved
・”saved”はGRUB2環境ファイル(/boot/grub2/grubenv)のsaved_entry指示文で指定しているカーネルをGRUB2が読み込むように指示している。
例)
# more /boot/grub2/grubenv
# GRUB Environment Block
saved_entry=CentOS Linux (3.10.0-229.20.1.el7.i686) 7 (Core)
・デフォルトでは、saved_entry値は直近にインストールされたカーネルの名前に設定されている。
2)設定値の変更方法
・grub2-set-defaultコマンドで、メニューエントリの番号(0から開始)又はカーネル名を指定して、変更することができる。
①利用可能なカーネル名を確認
# awk -F\’ ‘$1==”menuentry ” {print $2}’ /boot/grub2/grub.cfg
CentOS Linux (3.10.0-229.20.1.el7.i686) 7 (Core)
CentOS Linux (3.10.0-229.20.1.el7.i686) 7 (Core) with debugging
CentOS Linux 7 (Final), with Linux 3.10.0-229.el7.i686
CentOS Linux 7 (Final), with Linux 0-rescue-7728fff6d5f04c3ea8dbff86887d7712
CentOS release 6.5 (Final) (on /dev/mapper/vg_dual-LogVol00)
Windows XP
②grub2-set-defaultコマンドで変更
・数字を指定する場合
# grub2-set-default 2
# more /boot/grub2/grubenv
saved_entry=2
・カーネル名を指定する場合
・/etc/default/grubファイルのGRUB_DEFAULTキーで設定。
例)
GRUB_DEFAULT=saved
・”saved”はGRUB2環境ファイル(/boot/grub2/grubenv)のsaved_entry指示文で指定しているカーネルをGRUB2が読み込むように指示している。
例)
# more /boot/grub2/grubenv
# GRUB Environment Block
saved_entry=CentOS Linux (3.10.0-229.20.1.el7.i686) 7 (Core)
・デフォルトでは、saved_entry値は直近にインストールされたカーネルの名前に設定されている。
2)設定値の変更方法
・grub2-set-defaultコマンドで、メニューエントリの番号(0から開始)又はカーネル名を指定して、変更することができる。
①利用可能なカーネル名を確認
# awk -F\’ ‘$1==”menuentry ” {print $2}’ /boot/grub2/grub.cfg
CentOS Linux (3.10.0-229.20.1.el7.i686) 7 (Core)
CentOS Linux (3.10.0-229.20.1.el7.i686) 7 (Core) with debugging
CentOS Linux 7 (Final), with Linux 3.10.0-229.el7.i686
CentOS Linux 7 (Final), with Linux 0-rescue-7728fff6d5f04c3ea8dbff86887d7712
CentOS release 6.5 (Final) (on /dev/mapper/vg_dual-LogVol00)
Windows XP
②grub2-set-defaultコマンドで変更
・数字を指定する場合
# grub2-set-default 2
# more /boot/grub2/grubenv
saved_entry=2
・カーネル名を指定する場合
# grub2-set-default “CentOS Linux (3.10.0-229.20.1.el7.i686) 7 (Core)”
# more /boot/grub2/grubenv
saved_entry=CentOS Linux (3.10.0-229.20.1.el7.i686) 7 (Core)
③変更したファイルを設定ファイルに反映
# grub2-mkconfig -o /boot/grub2/grub.cfg(従来BIOSの場合)
# grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg(UEFIの場合)
Windowsとのデュアルブートの設定例
GRUB2の設定でWindowsの起動をメニューに追加する。
①Windowsがインストールされている領域のデバイス名を確認
# fdisk -l
②Windows起動用の設定を追加
# vi /etc/grub.d/40_custom
例)
①Windowsがインストールされている領域のデバイス名を確認
# fdisk -l
②Windows起動用の設定を追加
# vi /etc/grub.d/40_custom
例)
menuentry 'Windows 7' { set root=(hd0,1) chainloader +1 }
③”grub2-mkconfig -o”コマンドを実行して、grub.cfgファイルを更新
# grub2-mkconfig -o /boot/grub2/grub.cfg