何の話かというと
RHEL7/CentOS7でGRUB2に変わりましたよね。。。
起動メニューを編集しようと思って、/etc/grub2.cfg(もしくは /boot/grub2/grub.cfg)を開いてのけぞりますよね。。。。
そんな貴方へのメッセージです。。。。
起動メニューは自動生成
起動メニューは、/boot以下のファイルを見て自動生成するようになっているので、設定ファイルを直接編集するのはあきらめましょう。
自由にいじれるのは、全般的な設定を指定する /etc/default/grub と独自のエントリーを追加する /etc/grub.d/40_custom です。
/etc/default/grub の内容はこんな感じです。
GRUB_TIMEOUT=5 GRUB_DEFAULT=saved GRUB_DISABLE_SUBMENU=true GRUB_TERMINAL_OUTPUT="console" GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet" GRUB_DISABLE_RECOVERY="true"
各エントリーに共通のカーネルオプションは、/etc/default/grub の GRUB_CMDLINE_LINUX に指定します。たとえば、起動メッセージをずらずら流すのが好みの方は、「rhgb quiet」を削除しておきます。設定を変更したら、次のコマンドで変更を反映します。(UEFIブート環境の場合は、「-o /boot/efi/EFI/redhat/grub.cfg」(RHELの場合)、もしくは、「-o /boot/efi/EFI/centos/grub.cfg」(CentOSの場合)を指定。)
# grub2-mkconfig -o /boot/grub2/grub.cfg Generating grub configuration file ... Found linux image: /boot/vmlinuz-3.10.0-229.el7.x86_64 Found initrd image: /boot/initramfs-3.10.0-229.el7.x86_64.img Found linux image: /boot/vmlinuz-3.10.0-229.11.1.el7.x86_64 Found initrd image: /boot/initramfs-3.10.0-229.11.1.el7.x86_64.img Found linux image: /boot/vmlinuz-0-rescue-f7553ca5fb094cd0a58e6d7604177d4a Found initrd image: /boot/initramfs-0-rescue-f7553ca5fb094cd0a58e6d7604177d4a.img done
デフォルトエントリーの指定方法
GRUB2の起動画面で実際に表示されるエントリーは、次のコマンドで確認します。awkでなくてもいいんですけどね。。。。
# awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg Employee SKU, with Linux 3.10.0-229.el7.x86_64 Employee SKU, with Linux 3.10.0-229.11.1.el7.x86_64 Employee SKU, with Linux 0-rescue-f7553ca5fb094cd0a58e6d7604177d4a
こっちの方が簡単?
# grep "^menuentry" /boot/grub2/grub.cfg | cut -d "'" -f2
(ちなみに「Employee SKU」というのは、レッドハット社員は無料でRHELが使い放題という福利厚生の証です。。。あと、ソースコードも読み放題です。)
デフォルトエントリーは、/etc/default/grub の GRUB_DEFAULT に指定するのですが先のデフォルトのように「saved」となっている場合は、別ファイルに指定が格納されています。
# head -2 /boot/grub2/grubenv # GRUB Environment Block saved_entry=Red Hat Enterprise Linux Server (3.10.0-229.11.1.el7.x86_64) 7.1 (Maipo)
もしくは、次のコマンドでも確認できます。
# grub2-editenv list saved_entry=Red Hat Enterprise Linux Server (3.10.0-229.11.1.el7.x86_64) 7.1 (Maipo)
このファイルも直接編集はできないので、次のコマンドで変更します。先の awk で確認したエントリーの一番上が 0 になります。
# grub2-set-default 2 # head -2 /boot/grub2/grubenv # GRUB Environment Block saved_entry=2
むむ。なにやら微妙な気分になりますが、これで正しく設定できているので大丈夫なはずです。。。。。サーバーを再起動して確認してください。
レスキューモードとemergencyモード
メニューのエントリーにある「Linux 0-rescue-...」は、レスキューモードでの起動ですが、これは、いわゆるシングルユーザーモードと同等です。RHEL7/CentOS7では、これとは別に、emergencyモードも用意されており、こちらは、systemdが起動した直後にシェルを起動するというもので、余計なプロセスはまったく存在しない状態になります。ファイルシステムのマウント処理も行われないので、ルートファイルシステムだけが Read-only でマウントされた状態になります。
emergencyモードで起動する際は、GRUB2のメニュー画面で「e」を押して設定編集画面に入って、カーネルオプションの末尾に「systemd.unit=emergency.target」を指定します。(レスキューモードの場合は、「systemd.unit=rescue.target」)
systemdと仲良しの方は、/usr/lib/systemd/system/emergency.service を開くと、emergencyモードで何をしているかがわかると思います。
ステージ1.5(core.img)の配置場所
GRUB/GRUB2の本体は、/bootファイルシステムに保存されていますが、(UEFIではない)古典的なBIOSブート環境では、MBRの先頭にあるブートストラップイメージ(GRUBで言うところのステージ1、GRUB2のboot.img)がロードされた後、どこか別の場所にあるステージ1.5(GRUB2のcore.img)がロードされて、こいつが/bootファイルシステム内の本体を起動します。ステージ1.5の置き場所は、MBRの直後の部分か、/bootファイルシステムがあるパーティションのどこかになりますが、RHEL7/CentOS7では、デフォルトでMBRの直後の部分が使われます。(こちらの図も参照。)
(参考)6.10.1.1. MBR と GPT に関する注意点
2T超えのディスクでGPTを使う場合は、こちらにも注意してください。