新搭載のGRUB 2とCentOS 7でのレスキューモード

2014年11月28日(金)
古賀 政純

前回に引き続き、CentOS 7のインストーラーの変更点についてみていきます。今回は、新しく搭載されたGRUB 2、運用管理者が知っておくべきCentOS 7でのレスキューモードの利用方法についてご紹介します。

CentOS 7で採用された新ブートローダ「GRUB 2」

CentOS 7から、ブートローダにGRUB 2が採用されています。従来のCentOS 6系までのGRUBと構造が大きく異なるため、注意が必要です。以下では、CentOS 7の管理者が、最低限知っておくべきGRUB 2の設定方法について紹介します。

GRUB 2の設定の基本は、/etc/default/grubファイルの編集と、grub2-mkconfigコマンドによる設定ファイルの生成です。GRUB 2の設定ファイル/etc/default/grubファイルにパラメータを設定し、grub2-mkconfigによってその設定を含んだファイル/boot/grub2/grub2.cfgファイルを生成します。

以下は、GRUB 2メニューが表示される時間(タイムアウト)を60秒に設定し、さらにIPv6を無効にする例です。タイムアウト値は、/etc/default/grubファイルの「GRUB_TIMEOUT=」に設定します。ブートパラメータは、/etc/default/grubファイルの「GRUB_CMDLINE_LINUX=」に設定します。

# vi /etc/default/grub
GRUB_TIMEOUT=60 ←デフォルトの5を60に変更
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="nomodeset crashkernel=auto  vconsole.font=latarcyrheb-sun16 vconsole.keymap=us rhgb quiet ipv6.disable=1" ←IPv6を無効化するパラメータを追加
GRUB_DISABLE_RECOVERY="true"
~

上記/etc/default/grubファイルの変更を有効にするため、/boot/grub2/grub.cfgを再生成します。

# cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.org
# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-123.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-123.el7.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-123.6.3.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-123.6.3.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-41f28cff512735f914d4f894f1944df1
Found initrd image: /boot/initramfs-0-rescue-41f28cff512735f914d4f894f1944df1.img
done

BIOS搭載マシンとUEFI搭載マシンでgrub2-mkconfigコマンドで出力するファイルgrub.cfgファイルのパスが異なりますので注意して下さい。

BIOS搭載マシン

# grub2-mkconfig -o /boot/grub2/grub.cfg

UEFI搭載マシン

# grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg

OSを再起動してタイムアウト値が反映されているかを確認します。

# reboot

OSのブートメニューが表示されたら、メニュー画面が60秒間表示されていることを確認します。OSが起動したら、ブートパラメータが有効になっているかを確認します。

# cat /proc/cmdline
BOOT_IMAGE=/vmlinuz-3.10.0-123.el7.x86_64 root=UUID=f5dd4af7-9cb9-4dd1-a6fe-a1b59725f0e1 ro nomodeset crashkernel=auto vconsole.font=latarcyrheb-sun16 vconsole.keymap=us rhgb quiet ipv6.disable=1

以上でカーネルのパラメータを変更することができました。CentOS 6系に慣れた管理者は、grub2-mkconfigコマンドを実行することを忘れてしまうミスを犯しがちです。GRUB 2の設定は慎重に行うようにして下さい。

ブートメニューのエントリーを追加する方法

GRUB 2では、複数のブートメニューエントリーが/boot/grub2/grub.cfgファイルに生成されますが、独自のブートパラメータを含んだカスタムのブートメニューエントリーを追加したい場合、grub.cfgファイルを直接編集することはできません。そこで、GRUB 2では、/etc/grub.d/40_customファイルを使用します。このファイルに、カスタムのエントリーを追加することができます。以下では、既存のエントリーにさらにカスタムのエントリーを追加する例です。

まず、cpコマンドで、既存の40_customファイルのバックアップを取っておき、バックアップを取ったファイルの実行権限を削除します。

# cd /etc/grub.d/
# cp 40_custom 40_custom.org
# chmod -x 40_custom.org

カスタムのエントリーを40_customファイルに記述します。

# vi 40_custom
menuentry 'CUSTOM CentOS Linux, with Linux 3.10.0-123.el7.x86_64' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-123.el7.x86_64-advanced-f5dd4af7-9cb9-4dd1-a6fe-a1b59725f0e1' {
        load_video
        set gfxpayload=keep
        insmod gzio
        insmod part_msdos
        insmod xfs
        set root='hd0,msdos1'
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1'  033eb63d-33d5-49e4-b045-463f2297ccaa
        else
          search --no-floppy --fs-uuid --set=root 033eb63d-33d5-49e4-b045-463f2297ccaa
        fi
        linux16 /vmlinuz-3.10.0-123.el7.x86_64 root=UUID=f5dd4af7-9cb9-4dd1-a6fe-a1b59725f0e1 ro nomodeset crashkernel=auto  vconsole.font=latarcyrheb-sun16 vconsole.keymap=jp106 rhgb quiet ipv6.disable=0
        initrd16 /initramfs-3.10.0-123.el7.x86_64.img
}

今回は、カスタムメニューを追加したことがわかるように、上記ファイルのmenuentry行に、'CUSTOM CentOS Linux, with Linux 3.10.0-123.el7.x86_64'を記載しました。

さらに、追加したカスタムメニューがOS起動時に自動的に選択されるように/etc/default/grubファイルを編集します。複数あるエントリーから特定のものを選択してデフォルトで起動させるには、40_custom ファイルのmenuentry行で、''で囲んだエントリー名の文字列をGRUB_DEFAULT行にそのまま記述することが可能です。

# vi /etc/default/grub
...
GRUB_DEFAULT='CUSTOM CentOS Linux, with Linux 3.10.0-123.el7.x86_64'
...

/boot/grub2/grub.cfgファイルを生成します。

# grub2-mkconfig -o /boot/grub2/grub.cfg

ブート可能なカーネルのエントリーを表示するには、/boot/gurb2/grub.cfgファイルのmenuentryの以下の'CentOS Linux, ...'の箇所を確認します。

# cat /boot/grub2/grub.cfg |grep ^menuentry
menuentry 'CentOS Linux, with Linux 3.10.0-123.el7.x86_64' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-123.el7.x86_64-advanced-f5dd4af7-9cb9-4dd1-a6fe-a1b59725f0e1' {
menuentry 'CentOS Linux, with Linux 3.10.0-123.6.3.el7.x86_64' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-123.6.3.el7.x86_64-advanced-f5dd4af7-9cb9-4dd1-a6fe-a1b59725f0e1' {
menuentry 'CentOS Linux, with Linux 0-rescue-41f28cff512735f914d4f894f1944df1' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-0-rescue-41f28cff512735f914d4f894f1944df1-advanced-f5dd4af7-9cb9-4dd1-a6fe-a1b59725f0e1' {
menuentry 'CUSTOM CentOS Linux, with Linux 3.10.0-123.el7.x86_64' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-123.el7.x86_64-advanced-f5dd4af7-9cb9-4dd1-a6fe-a1b59725f0e1' {

また、以下のようにawkコマンドを駆使することで、'CentOS Linux...'の箇所のみを抽出することもできます。

# awk -F\' '$1=="menuentry " {print $2}' /boot/grub2/grub.cfg
CentOS Linux, with Linux 3.10.0-123.el7.x86_64
CentOS Linux, with Linux 3.10.0-123.6.3.el7.x86_64
CentOS Linux, with Linux 0-rescue-41f28cff512735f914d4f894f1944df1
CUSTOM CentOS Linux, with Linux 3.10.0-123.el7.x86_64

上記より、メニューエントリー' CUSTOM CentOS Linux, with Linux 3.10.0-123.el7.x86_64'が登録されていることがわかります。以上で、新しく追加したカスタムのエントリーで起動する準備が整いましたので、OSを再起動します。

# reboot

OS再起動後に、自動的にカスタムのメニューが選択され、正常に起動するかを確認してください。

先述のawkコマンドを駆使したエントリーの表示では、4つのエントリーが表示されていますが、デフォルトで起動してほしいエントリーは、/etc/default/grubファイル内で、数字で指定することも可能です。たとえば、先述のawkコマンドの出力結果の一番上に出力されている「CentOS Linux, with Linux 3.10.0-123.el7.x86_64」をブート時にデフォルトで起動させる場合は、/etc/default/grubファイルのGRUB_DEFAULT=0を指定します。

# vi /etc/default/grub
...
GRUB_DEFAULT=0
...

/etc/default/grubファイルを更新したら、必ず/boot/grub2/grub.cfgファイルを生成してからOSを再起動して下さい。

# grub2-mkconfig -o /boot/grub2/grub.cfg && reboot
日本ヒューレット・パッカード株式会社 プリセールス統括本部 ソリューションセンター OSS・Linux担当 シニアITスペシャリスト

兵庫県伊丹市出身。1996年頃からオープンソースに携わる。2000年よりUNIXサーバーのSE及びスーパーコンピューターの並列計算プログラミング講師を担当。科学技術計算サーバーのSI経験も持つ。2005年、大手製造業向けLinuxサーバー提案で日本HP社長賞受賞。2006年、米国HPからLinux技術の伝道師に与えられる「OpenSource and Linux Ambassador Hall of Fame」を2年連続受賞。日本HPプリセールスMVPを4度受賞。現在は、Linux、FreeBSD、Hadoop等のOSSを駆使したスケールアウト型サーバー基盤のプリセールスSE、技術検証、技術文書執筆を担当。日本HPのオープンソース・Linuxテクノロジーエバンジェリストとして講演活動も行っている。Red Hat Certified Engineer、Red Hat Certified Virtualization Administrator、Novell Certified Linux Professional、EXIN Cloud Computing Foundation Certificate、HP Accredited Systems Engineer Cloud Architect、Red Hat Certified System Administrator in Red Hat OpenStack、Cloudera Certified Administrator for Apache Hadoop認定技術者。HP公式ブログ執筆者。趣味はレーシングカートとビリヤード

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています