インフラエンジニアの羅針盤

インフラエンジニア1〜3年目のための技術ガイド

LinuxのブートプロセスとGRUB2・systemd起動管理【201試験 主題2.01】

公開
,
LinuC Level 2 第01回 主題2.01 キャパシティプランニング・システム起動

サーバー障害の初動対応やメンテナンスにおいて、OSの起動シーケンスとブートローダの制御に関する正確な知識は不可欠です。電源投入からログインプロンプトが表示されるまでの処理は、ファームウェア、ブートローダ、カーネル、初期RAMディスク、初期化プロセス(systemd)へと順次制御を引き継ぐ多段階のシーケンスで構成されています。

LinuC 201試験の主題2.01(重要度合計7)において、この「システムの起動」と「サービスの管理」は極めて出題頻度の高い中核分野です。特に、現代のLinux標準であるGRUB2の設定再生成手順や、旧SysVinitのランレベルから移行したsystemdのターゲット(Target)操作、そして障害復旧時のレスキューモードへの移行は、記述式問題(コマ問)の定番ターゲットとなっています。

本記事では、AlmaLinux 9の実機検証環境から採取したターミナルログをもとに、Linuxブートプロセスの各フェーズ、GRUB2設定のカスタマイズ手順、systemdターゲットの運用、および緊急時のトラブルシューティング手順を解説します。

  • 対象試験 LinuC 201試験(Version 10.0 / 主題2.01.1・2.01.2)
  • 検証OS AlmaLinux release 9.8 (Olive Jaguar)
  • ブート形式 UEFI / GPT
  • ブートローダ GRUB 2.06
  • 初期化システム systemd 252
  • 電源投入からログイン画面に至る5段階のブートプロセスを順序立てて説明できる
  • BIOSとUEFIの仕組みの違い、およびESP(EFIシステムパーティション)の役割を把握できる
  • GRUB2の設定ファイル体系を理解し、/etc/default/grub の編集と再生成コマンドを実行できる
  • 旧SysVinitのランレベルとsystemdターゲットの対応関係を把握し、デフォルトターゲットを変更できる
  • システム起動不能時に、GRUBメニューからレスキューモードやシングルユーザーモードへ移行できる
本記事の学習スコープと位置づけ
公式試験の必須出題範囲 主題2.01.1(ブートプロセスとGRUB2)、主題2.01.2(systemdによるシステム起動のカスタマイズ)
現場で役立つ実務拡張 UEFI vs BIOSの実機判別、grub2-mkconfigによる動的生成、レスキューモードでの実務障害復旧手順
目次
  1. 1. Linuxブートプロセスの流れ ——電源ONからログイン画面まで
    1. 1.1 BIOS(レガシー)とUEFIの決定的な違い
    2. 1.2 カーネル(vmlinuz)と初期RAMディスク(initramfs)の役割分担
  2. 2. GRUB2の構造と設定カスタマイズ
    1. 2.1 GRUB2の設定ファイル体系
    2. 2.2 実機検証:/etc/default/grub の編集と設定の再生成
    3. 2.3 GRUBメニュー画面での一時的なカーネルパラメータ編集
  3. 3. systemdのシステム初期化とターゲット管理
    1. 3.1 ターゲット(Target)と旧SysVinitランレベルの対応
    2. 3.2 実機検証:デフォルトターゲットの確認と変更
    3. 3.3 稼働中システムでの一時的なターゲット切り替え(isolate)
  4. 4. 試験頻出:起動トラブルシューティングとレスキュー手順
    1. 4.1 rootパスワード紛失時の緊急復旧(init=/bin/bash)
  5. 5. コマ問(記述式)頻出チェック & Ping-t演習導線
    1. 5.1 コマ問ミニ演習
    2. 5.2 Ping-t推奨演習分野
  6. 6. まとめと次回予告

1. Linuxブートプロセスの流れ ——電源ONからログイン画面まで

Linuxシステムが起動する過程は、大きく分けて5つのフェーズで構成されています。それぞれのフェーズが前の処理の完了を受けて次のコンポーネントをメモリに読み込み、制御権を渡していきます。

Linuxブートプロセスの5つのフェーズ(BIOS/UEFI→GRUB2→カーネル→initramfs→systemd)
図1:Linuxブートプロセスの流れ(電源ONからログインまで)
フェーズ 実行主体 主要な処理内容 主な参照・読込対象
① ファームウェア BIOS / UEFI ハードウェアのPOST(自己診断)、ブートデバイスの検出、ブートローダの呼び出し マザーボードROM、NVRAM、ESP(EFIシステムパーティション)
② ブートローダ GRUB2 設定ファイルの読込、ブートメニューの表示、カーネルとinitramfsのメモリ展開 /boot/grub2/grub.cfg/boot/vmlinuz-*/boot/initramfs-*
③ カーネル Linuxカーネル(vmlinuz) CPU・メモリの初期化、基本デバイスドライバの組み込み、initramfsの展開 圧縮カーネルイメージ(vmlinuz)
④ 初期RAMディスク initramfs メモリ上に一時的なルートファイルシステムを展開し、必要なストレージドライバ(LVM/RAID等)をロードして本物のルートファイルシステム(/)をマウント initramfs-*.img(cpio形式)
⑤ システム初期化 systemd(PID 1) 最初のユーザー空間プロセスとして起動し、default.target の設定に従って必要なサービスやデーモンを並行起動、ログインプロンプトを表示 /etc/systemd/system/default.target、各種Unitファイル

1.1 BIOS(レガシー)とUEFIの決定的な違い

PCやサーバーのファームウェアには、従来型の「BIOS(Basic Input/Output System)」と、現代の標準である「UEFI(Unified Extensible Firmware Interface)」が存在します。LinuC試験では、この両者の構造的な違いが頻出します。

比較項目 BIOS(レガシーBIOS) UEFI
ディスク管理方式 MBR(マスターブートレコード) GPT(GUIDパーティションテーブル)
最大認識容量 2TBまで 2TB以上(最大約9.4ZB)
最大パーティション数 基本4個(または基本3個+拡張パーティション) 最大128個(標準仕様)
ブートコードの格納場所 ディスクの先頭セクタ(第1セクタ・512バイト) 専用のFAT32パーティション(ESP: EFI System Partition
OS起動ファイルのパス例 /boot/grub2/grub.cfg /boot/efi/EFI/almalinux/grub.cfg
セキュアブート対応 非対応 対応(電子署名のないOSローダの実行を遮断)

稼働中のシステムがBIOSで起動しているか、UEFIで起動しているかは、/sys/firmware/efi ディレクトリの有無を確認することで瞬時に判別できます。

# UEFI起動かBIOS起動かの判別コマンド
$ [ -d /sys/firmware/efi ] && echo "System is UEFI" || echo "System is BIOS/Legacy"
System is UEFI

1.2 カーネル(vmlinuz)と初期RAMディスク(initramfs)の役割分担

GRUB2から制御を受け取ったカーネル(vmlinuz)は、ハードウェアの基本制御を開始します。しかし、ルートファイルシステム(/)がLVM(論理ボリューム)やソフトウェアRAID、あるいは専用ドライバを要するストレージ上にある場合、ルートファイルシステムをマウントする前に必要なドライバをどこから読み込むかという依存関係の課題が生じます。

この問題を解決するのが 初期RAMディスク(initramfs: Initial RAM File System) です。initramfsは、カーネルが必要とする最小限のモジュールやドライバ、初期化スクリプトを格納したcpioアーカイブファイルです。GRUB2によってあらかじめメモリ上に読み込まれており、カーネルはこの一時的なRAMディスクを仮のルートファイルシステムとしてマウントします。そこで必要なモジュールをロードしたあと、本物のルートファイルシステムへとマウントを切り替えます(switch_root)。

2. GRUB2の構造と設定カスタマイズ

GRUB2(GRand Unified Bootloader version 2)は、現代の主要なLinuxディストリビューションで標準採用されている高機能ブートローダです。旧世代のGRUB Legacy(バージョン0.9x)と比較して、モジュール構造の採用や高度なスクリプト構文のサポートなど、大幅な刷新が行われています。

GRUB2設定ファイルのビルドフローと旧SysVinitランレベルとsystemdターゲットの対照図
図2:GRUB2 設定反映フロー & systemd ターゲット対照図

2.1 GRUB2の設定ファイル体系

GRUB2の管理において最も重要な原則は、「最終的な設定ファイル(grub.cfg)を手作業で直接編集してはならない」 という点です。GRUB2では、共通パラメータファイルとテンプレートスクリプトをもとに、専用コマンドで grub.cfg を自動生成します。

ファイル / ディレクトリ 役割 編集可否
/etc/default/grub ブートメニューのタイムアウト秒数、デフォルト起動カーネル、カーネル起動引数などの基本設定を定義するファイル。 編集する
/etc/grub.d/ ブートメニューのエントリを生成するための実行スクリプト群(00_header, 10_linux, 40_custom 等)。ファイル名の先頭2桁の数字順に実行される。 編集する(カスタムエントリ追加時など)
/boot/grub2/grub.cfg
(または /boot/efi/EFI/.../grub.cfg
上記2つをもとに grub2-mkconfig コマンドによって自動生成される最終設定ファイル。 編集厳禁(直接編集しても再生成時に上書き消滅する)

注意:grub.cfg の直接編集は厳禁

/boot/grub2/grub.cfg の冒頭には「DO NOT EDIT THIS FILE」と警告が明記されています。カーネルアップデート時やシステム更新時に grub2-mkconfig が自動実行されるため、直接加えた変更はすべて消去されます。設定変更は必ず /etc/default/grub に対して行います。

2.2 実機検証:/etc/default/grub の編集と設定の再生成

AlmaLinux 9の実機で、現在の /etc/default/grub の内容を確認します。

$ cat /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="resume=/dev/mapper/almalinux-swap rd.lvm.lv=almalinux/root rd.lvm.lv=almalinux/swap"
GRUB_DISABLE_RECOVERY="true"
GRUB_ENABLE_BLSCFG=true

主要な設定パラメータの意味は以下のとおりです。

  • GRUB_TIMEOUT=5: ブートメニューを表示してからデフォルトのOSを自動起動するまでの待機秒数(秒単位)。-1 を指定するとキー入力があるまで無期限に待機します。
  • GRUB_DEFAULT=saved: デフォルトで起動するOSエントリ。saved を指定すると、前回起動したカーネルや grub2-set-default で明示的に指定したカーネルが選ばれます。
  • GRUB_CMDLINE_LINUX="...": Linuxカーネルに引き渡す標準の起動パラメータ(カーネルコマンドライン引数)。

設定を変更した後は、grub2-mkconfig コマンドを実行して設定ファイルを出力します。出力先ファイルは -o オプションで指定します。

# GRUB2設定の再生成コマンド(BIOS/UEFI共通の指定)
$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Adding boot menu entry for UEFI Firmware Settings ...
done

AlmaLinux 9やRHEL 9環境では、UEFI環境であっても /boot/grub2/grub.cfg/boot/efi/EFI/almalinux/grub.cfg へのスタブ(転送設定)またはシンボリックリンクとして機能する構成が標準化されています。試験対策としては、grub2-mkconfig -o <出力先ファイル> の構文を確実に記述できるようにしておくことが肝要です。

2.3 GRUBメニュー画面での一時的なカーネルパラメータ編集

OSが正常に起動しない緊急時には、設定ファイルを書き換えることなく、起動時に一時的なパラメータを渡すことができます。PC起動時のGRUBメニュー画面で、目的のカーネル行を選択してキーボードの e キーを押すと、エディタ画面が開きます。

linux(または linuxefi)から始まる行の末尾に、以下のようなパラメータを追記して Ctrl + x(または F10)を押すことで、その場限りのモードでシステムを起動できます。

  • systemd.unit=rescue.target: シングルユーザーモード(レスキューターゲット)で起動
  • systemd.unit=emergency.target: 緊急モード(エマージェンシーターゲット)で起動
  • init=/bin/bash: systemdを介さず、直接bashシェルをPID 1として起動(rootパスワード再設定時等)

3. systemdのシステム初期化とターゲット管理

カーネルが初期化を終えると、システムで最初のプロセスである systemd(プロセスID: 1)が起動します。systemdは従来のSysVinitに代わり、サービス起動の並行処理による高速化や、cgroupsを活用したリソース管理を実現した初期化機構です。

3.1 ターゲット(Target)と旧SysVinitランレベルの対応

SysVinitではシステムの動作状態を「0〜6」の数値で表す「ランレベル(Runlevel)」で管理していました。systemdではこれに代わり、ターゲット(Target Unit) という概念を採用しています。ターゲットは、関連するサービスやソケット、デバイスを束ねた到達目標グループです。

旧ランレベル systemdターゲット名 動作内容 主な用途
0 poweroff.target システムを完全にシャットダウンして電源を切断する状態。 電源OFF
1 / S rescue.target 最小限のローカルファイルシステムのみマウントし、rootパスワード認証を経てシングルユーザーで復旧作業を行う状態。ネットワークは無効。 保守・シングルユーザーモード
2 / 3 / 4 multi-user.target CUI(テキストモード)の通常運用状態。ネットワーク機能および複数ユーザーのログインが有効。 一般的なサーバー環境の標準
5 graphical.target GUI(ディスプレイマネージャ)が起動した状態。multi-user.target の全機能を含む。 デスクトップ環境
6 reboot.target システムを安全に再起動する状態。 再起動
emergency.target ルートファイルシステムを読み取り専用(ro)でマウントした超最小限の緊急シェル。rescue.target よりも極限状態の復旧に用いる。 深刻なファイルシステム破損等の復旧

AlmaLinux 9環境で /etc/inittab を確認すると、ランレベルが完全にターゲットへ置き換わっている旨が明記されています。

$ cat /etc/inittab
# inittab is no longer used.
#
# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
#
# multi-user.target: analogous to runlevel 3
# graphical.target: analogous to runlevel 5
#
# To view current default target, run:
# systemctl get-default
#
# To set a default target, run:
# systemctl set-default TARGET.target

3.2 実機検証:デフォルトターゲットの確認と変更

システム起動時にどのターゲットへ到達するかは、default.target によって定義されています。実機で現在のデフォルトターゲットを確認します。

# デフォルトターゲットの確認
$ systemctl get-default
multi-user.target

# 実体は /etc/systemd/system/default.target のシンボリックリンク
$ ls -l /etc/systemd/system/default.target
lrwxrwxrwx. 1 root root 41  9月  6  2026 /etc/systemd/system/default.target -> /usr/lib/systemd/system/multi-user.target

デフォルトターゲットを変更するには、systemctl set-default コマンドを実行します。このコマンドは、内部的に /etc/systemd/system/default.target のシンボリックリンク先を張り替える動作をします。

# デフォルトを graphical.target に変更する場合
$ sudo systemctl set-default graphical.target
Removed /etc/systemd/system/default.target.
Created symlink /etc/systemd/system/default.target → /usr/lib/systemd/system/graphical.target.

# 元の multi-user.target に戻す場合
$ sudo systemctl set-default multi-user.target
Removed /etc/systemd/system/default.target.
Created symlink /etc/systemd/system/default.target → /usr/lib/systemd/system/multi-user.target.

3.3 稼働中システムでの一時的なターゲット切り替え(isolate)

再起動することなく、現在稼働しているシステムの動作ターゲットを一時的に切り替えるには、systemctl isolate コマンドを使用します。指定したターゲットに必要なUnitを起動し、不要になったUnitを停止します。

# 一時的にレスキューモードへ切り替える(メンテナンス作業時等)
$ sudo systemctl isolate rescue.target

# メンテナンス終了後、通常のマルチユーザーモードへ復帰する
$ sudo systemctl isolate multi-user.target

なお、rescue.target への移行は専用の短縮コマンド sudo systemctl rescue でも実行可能です。

4. 試験頻出:起動トラブルシューティングとレスキュー手順

LinuC 201試験では、システムの起動トラブルが発生した際の復旧手順が問われます。特に rescue.targetemergency.target の挙動の違いは重要です。

比較項目 rescue.target(レスキューモード) emergency.target(緊急モード)
ルートファイルシステム 読み書き可能(rw)でマウント 読み取り専用(ro)でマウント
その他のローカルFS マウントされる マウントされない
基本サービス 最小限のサービスが起動 サービスはほぼ一切起動しない
rootパスワード認証 要求される(パスワード入力後にシェル起動) 要求される(パスワード入力後にシェル起動)
主な用途 設定ファイルの記述ミス修正、ドライバーのロード確認 ファイルシステムの破損修復(fsck / xfs_repair

emergency.target ではルートファイルシステムが読み取り専用で保護されているため、修復作業で設定ファイルを書き換える必要がある場合は、あらかじめ書き込み可能として再マウントする必要があります。

# emergencyモードでルートファイルシステムを読み書き可能に再マウントするコマンド
# mount -o remount,rw /

4.1 rootパスワード紛失時の緊急復旧(init=/bin/bash)

rootパスワード自体を忘れてしまい、rescue.target にもログインできない場合の古典的かつ確実な手法が、カーネルパラメータに init=/bin/bash を指定して起動する方法です。systemdを介さずにbashを直接起動するため、パスワード入力を回避してrootシェルを取得できます。

  1. GRUBメニューで起動対象カーネルを選択し、e キーを押して編集モードに入る
  2. linux 行の末尾に init=/bin/bash を追記し、Ctrl + x で起動する
  3. 起動後、ルートファイルシステムを読み書き可能に再マウントする:
    mount -o remount,rw /
  4. passwd root コマンドで新しいrootパスワードを設定する
  5. SELinuxが有効な環境では、再ラベル付けフラグを作成する:
    touch /.autorelabel
  6. exec /sbin/init または強制再起動(reboot -f)で通常起動に戻す

5. コマ問(記述式)頻出チェック & Ping-t演習導線

本章の総仕上げとして、本番試験の記述式問題で問われやすい重要キーワード・ファイルパスを確認します。

出題対象 正確なコマンド・ファイルパス 頻出ポイント・注意点
GRUB2設定反映 grub2-mkconfig -o /boot/grub2/grub.cfg 出力先オプション -o を忘れないこと。
GRUB2基本設定ファイル /etc/default/grub タイムアウトやカーネル引数を編集する唯一の場所。
GRUB2設定スクリプト群 /etc/grub.d/ 実行権限が必要。数値順に実行される。
デフォルトターゲット確認 systemctl get-default get-default サブコマンドのスペル。
デフォルトターゲット変更 systemctl set-default <target> set-default サブコマンドのスペル。
稼働中ターゲット切り替え systemctl isolate <target> isolate(隔離・切り替え)の単語指定。
デフォルトターゲット実体 /etc/systemd/system/default.target シンボリックリンクの完全パス。
マルチユーザーCUI multi-user.target ハイフンの位置に注意(旧ランレベル3相当)。
GUIデスクトップ graphical.target 旧ランレベル5相当。
レスキューモード rescue.target 旧ランレベル1相当。

5.1 コマ問ミニ演習

演習:GRUB2設定の再生成コマンド

/etc/default/grub を編集したあと、その設定を /boot/grub2/grub.cfg へ反映させるためのコマンドを、オプションを含めて正確に入力してください。

解答例を表示する
grub2-mkconfig -o /boot/grub2/grub.cfg

Debian/Ubuntu環境では update-grub コマンドがエイリアスとして用意されていますが、Red Hat系や試験の標準構文としては grub2-mkconfig -o <パス> が正解となります。

演習:現在のデフォルトターゲットの確認

systemd環境において、システムの次回起動時に適用されるデフォルトターゲットを確認するための systemctl コマンドを入力してください。

解答例を表示する
systemctl get-default

5.2 Ping-t推奨演習分野

本記事を読了した後は、学習サイト「Ping-t」の以下の問題群に直ちに取り組み、知識を定着させてください。

  • 試験区分: LinuC-201(Version 10.0)
  • 対象分野: 「2.01.1 システムの起動」「2.01.2 システムの初期化とサービスの管理」
  • 目標水準: 全問題を「銀」から「金」ステータスへ昇格させ、あわせて「コマ問」でコマンド名とファイルパスを100%スペルミスなく入力できる状態を目指します。

6. まとめと次回予告

Linuxのブートプロセスは、ファームウェア(BIOS/UEFI)からGRUB2、カーネル、initramfs、そしてsystemdへと順序正しく制御を受け渡す仕組みで成立しています。障害発生時に「いま起動のどの段階で停止しているのか」を正確に見極められるようになることが、インフラエンジニアとしてのトラブルシュート力の根幹となります。

次回予告:第2回「Linuxカーネルの構造・モジュール管理とsysctl動的変更」

続く第2回では、ブートプロセスによって起動されたLinuxカーネルの構造とモジュール管理を扱います。カーネルモジュールのロード・アンロード(lsmod, modprobe)、依存関係の更新(depmod)、および /proc/syssysctl コマンドを用いたカーネルパラメータの動的変更と永続化手順を、AlmaLinux 9実機で検証します。

前の記事
次の記事