システム起動と systemd - GRUB/runlevel/systemctl【LPIC-1 101.2/101.3】

システム起動と systemd - GRUB/runlevel/systemctl【LPIC-1 101.2/101.3】

この記事で達成できること

  • ブートプロセスの 4 段階(BIOS/UEFI → ブートローダ → カーネル → init/systemd)を順に説明できる
  • GRUB2 の設定を /etc/default/grub 経由で安全に変更できる
  • systemctl でサービスの起動・停止・自動起動を制御できる
  • ブートターゲットと SysVinit ランレベルの対応を答えられる
  • shutdown で時刻指定の再起動・停止を実行できる
  • dmesg / journalctl でブート時のログを調査できる

LPIC-1 主題 101.2「システムのブート」と 101.3「ランレベル/ブートターゲットを変更してシステムをシャットダウン・リブートする」の中核。サーバー運用の起点となる知識をまとめる。

ブートプロセスはどう進むのか

電源投入から利用可能になるまで、Linux は 4 段階を順にたどる。各段階が次の段階をロードする「バトンリレー」構造を押さえれば、どこで止まったかを切り分けられる。

段階 担当 主な役割
1. ファームウェア BIOS / UEFI ハードウェア初期化、ブートデバイス選択
2. ブートローダ GRUB2 カーネルと initramfs をメモリへロード
3. カーネル Linux kernel ハードウェア検出、ルートファイルシステムをマウント
4. init systemd サービス起動、ターゲット到達

BIOS は MBR(ディスク先頭 512 バイト)からブートローダを読み込み、UEFI は EFI システムパーティション上のブートローダ(*.efi)を読み込む。どちらの環境でも、現代の主要ディストリビューションは GRUB2 をブートローダに、systemd を init システムに採用している。

カーネルが読み込む initramfs(初期 RAM ファイルシステム)は、ルートファイルシステムをマウントするために必要なドライバ群を含む一時的な環境。これによりルートが暗号化・LVM・特殊なストレージ上にあってもマウントできる。

GRUB2 の設定はどこを編集するのか

GRUB2 の動作は生成済みの grub.cfg ではなく、/etc/default/grub/etc/grub.d/ を編集してから再生成するのが正しい手順。grub.cfg を直接書き換えてはいけない。

GRUB2 の主要ファイルは次の通り。

ファイル 役割
/boot/grub/grub.cfg(Debian系) 生成される最終設定。直接編集しない
/boot/grub2/grub.cfg(RHEL系) 同上。ディストリでパスが異なる
/etc/default/grub タイムアウト、既定エントリ、カーネルパラメータの定義元
/etc/grub.d/ メニューエントリ生成スクリプト群

/etc/default/grub の代表的な項目。

GRUB_TIMEOUT=5
GRUB_DEFAULT=0
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

GRUB_TIMEOUT はメニュー表示秒数、GRUB_DEFAULT は既定で選択されるエントリ、GRUB_CMDLINE_LINUX_DEFAULT はカーネルに渡す起動パラメータ。

grub.cfg を再生成する

編集後は grub.cfg を再生成して反映する。コマンド名はディストリビューションで異なる。

sudo grub-mkconfig -o /boot/grub/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-6.1.0-18-amd64
Found initrd image: /boot/initrd.img-6.1.0-18-amd64
done

Debian / Ubuntu 系には上記をラップした update-grub がある。RHEL / Fedora 系では grub2-mkconfig -o /boot/grub2/grub.cfg を使う。

ディストリビューション 再生成コマンド 出力先
Debian / Ubuntu update-grub または grub-mkconfig -o ... /boot/grub/grub.cfg
RHEL / Fedora / CentOS grub2-mkconfig -o ... /boot/grub2/grub.cfg

grub.cfg を直接編集しても、次回 grub-mkconfig 実行時に上書きされて消える。恒久的な変更は必ず /etc/default/grub または /etc/grub.d/ を編集してから再生成する。

systemctl でサービスをどう操作するのか

systemd では systemctl がサービス制御の中心。起動・停止・状態確認・自動起動設定をすべてこのコマンドで行う。

systemd が管理する対象は「ユニット」と呼ばれ、種別ごとに拡張子が異なる。

ユニット種別 拡張子 内容
サービス .service デーモン・プロセス
ターゲット .target ユニットのグループ(旧ランレベル相当)
ソケット .socket ソケット起動の待ち受け
マウント .mount ファイルシステムのマウント点

主要な systemctl サブコマンド

systemctl status sshd
systemctl start sshd
systemctl stop sshd
systemctl restart sshd
systemctl enable sshd
systemctl disable sshd
● sshd.service - OpenSSH server daemon
     Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; preset: enabled)
     Active: active (running) since Fri 2026-05-30 09:00:00 JST; 2h ago

statusActive: 行が現在の稼働状態、Loaded: 行末の enabled/disabled が自動起動設定。start は今すぐ起動、enable は次回ブート以降の自動起動を設定する。

startenable は別物。start は即時起動するが再起動後は元に戻り、enable は自動起動を設定するが今すぐは起動しない。両方を同時に行うなら systemctl enable --now sshd を使う。

ブートターゲットとランレベルはどう対応するのか

systemd のブートターゲットは、SysVinit のランレベル(0〜6)を置き換えた概念。試験では両者の対応表が頻出する。

SysVinit ランレベル systemd ターゲット 状態
0 poweroff.target システム停止(電源オフ)
1 rescue.target シングルユーザー(レスキュー)
2, 3, 4 multi-user.target マルチユーザー(CUI)
5 graphical.target マルチユーザー+GUI
6 reboot.target 再起動

ランレベル 2・3・4 はいずれも multi-user.target に対応する点に注意。GUI 起動が graphical.target(旧ランレベル 5)、CUI 起動が multi-user.target(旧ランレベル 3)と覚えると整理しやすい。

既定ターゲットの確認と変更

systemctl get-default
sudo systemctl set-default multi-user.target
graphical.target
Removed "/etc/systemd/system/default.target".
Created symlink /etc/systemd/system/default.target → /usr/lib/systemd/system/multi-user.target.

get-default は次回ブート時のターゲットを表示し、set-default でそれを変更する。default.target は実体がシンボリックリンクで、これが指す先が既定ターゲットになる。

実行中にターゲットを切り替える

sudo systemctl isolate multi-user.target
runlevel
N 5

isolate は再起動せずに現在のターゲットを切り替える(指定ターゲットに属さないユニットは停止される)。SysVinit 互換の runlevel コマンドは「直前のランレベル」「現在のランレベル」を表示する(上記は直前なし N、現在 5)。

システムを安全に停止・再起動するには

停止・再起動は shutdown コマンドを基本とする。時刻指定と警告メッセージにより、他ユーザーへの影響を抑えられる。

shutdown の時刻指定

sudo shutdown -h now
sudo shutdown -r +10
sudo shutdown -h 23:30
sudo shutdown -c
Shutdown scheduled for Fri 2026-05-30 23:30:00 JST, use 'shutdown -c' to cancel.

-h は停止(halt/poweroff)、-r は再起動。時刻は now(即時)、+m(m 分後)、hh:mm(時刻指定)で渡す。shutdown -c は予約された停止をキャンセルする。

関連コマンドの整理

コマンド 動作
shutdown -h +m m 分後に停止(推奨。警告を全ユーザーに通知)
shutdown -r +m m 分後に再起動
reboot 即時再起動(systemctl reboot 相当)
poweroff 即時に電源オフ(systemctl poweroff 相当)
halt システム停止(電源オフは伴わない場合がある)
wall ログイン中の全ユーザーへメッセージ送信
echo "10分後にメンテナンス再起動します" | wall

shutdown は予約時に自動で wall 相当の警告を送る。手動で任意の通知を送りたい場合は wall を単体で使う。

ブートのトラブルはどこを見るのか

ブートに関する問題は、カーネルメッセージとブートログから切り分ける。dmesgjournalctl が二本柱。

dmesg | less
journalctl -k
journalctl -b
journalctl -b -1
[    0.000000] Linux version 6.1.0-18-amd64 ...
[    1.234567] EXT4-fs (sda1): mounted filesystem ...

dmesg はカーネルリングバッファ(ハードウェア検出・ドライバのメッセージ)を表示する。journalctl -k はカーネルメッセージのみ、journalctl -b は今回のブート、journalctl -b -1 は前回のブートのログを表示する。直前のブートで失敗した原因を -b -1 で追えるのが systemd の利点。

systemd-analyze を使うとブート所要時間を分析できる。systemd-analyze blame は各サービスの起動にかかった時間を降順で表示し、起動が遅い原因の特定に役立つ。

よくあるミスと対処

実務と試験の両方でつまずきやすいポイントを整理する。

ミス1: ランレベルとターゲットの対応を逆に覚える

ランレベル 5 が graphical.target(GUI)、ランレベル 3 が multi-user.target(CUI)。「数字が大きい 5 が GUI」と方向で覚える。ランレベル 2・3・4 がすべて multi-user.target に集約される点も頻出。

ミス2: grub.cfg を直接編集する

grub.cfg への直接編集は再生成で消える。/etc/default/grub を編集 → grub-mkconfig(または update-grub)で反映が正しい手順。

ミス3: enable と start を混同する

enable は自動起動設定で今すぐは起動せず、start は即時起動で再起動後は戻る。両方なら enable --now

ミス4: shutdown の時刻指定を誤る

shutdown -h +10 は「10 分後」であって「10 時」ではない。時刻を指定するなら shutdown -h 22:00 の形式を使う。引数なしの shutdown(時刻省略)は環境により +1 相当になり即時停止しないため、即時なら明示的に now を付ける。

ミス5: get-default と isolate を混同する

set-default は次回ブートの既定ターゲットを変える(永続)。isolate は今すぐ切り替えるが永続しない。永続変更と一時変更を区別する。

トラブルシューティング

症状: enable したのに再起動後サービスが起動していない

原因: enable のみ実行し、依存するターゲットに wantedby されていない、または start していないだけで設定自体は正しい

確認:

systemctl is-enabled sshd
systemctl status sshd

対処: is-enabledenabled なら設定は正常。即起動も必要なら systemctl enable --now sshd を使う。disabled なら enable を再実行する。

症状: GUI で起動してしまう(CUI にしたい)

原因: 既定ターゲットが graphical.target になっている

確認:

systemctl get-default

対処: sudo systemctl set-default multi-user.target で CUI を既定にする。今すぐ切り替えるなら sudo systemctl isolate multi-user.target も併用する。

症状: カーネルパラメータを変えたのに反映されない

原因: /etc/default/grub を編集しただけで grub.cfg を再生成していない

確認:

cat /proc/cmdline

対処: sudo grub-mkconfig -o /boot/grub/grub.cfg(Debian系は update-grub、RHEL系は grub2-mkconfig)を実行し再起動する。/proc/cmdline で現在の起動パラメータを照合できる。

作業完了チェックリスト

  • [ ] ブートの 4 段階を順に説明できる
  • [ ] /etc/default/grub 編集後に grub-mkconfig で再生成した
  • [ ] systemctl enable --now で自動起動と即起動を区別できた
  • [ ] ランレベルとターゲットの対応表を答えられる
  • [ ] shutdown -r +10 で時刻指定再起動を実行できた
  • [ ] journalctl -b でブートログを確認できた

まとめ

場面 コマンド 目的
サービス操作 systemctl start/enable --now 起動と自動起動
状態確認 systemctl status / is-enabled 稼働・自動起動の確認
既定ターゲット systemctl get-default/set-default 次回ブートの状態
一時切替 systemctl isolate <target> 再起動せず切り替え
GRUB 設定 /etc/default/grubgrub-mkconfig 起動オプション変更
停止・再起動 shutdown -h/-r 時刻指定で安全に
ログ調査 dmesg / journalctl -b ブート時の問題切り分け

システム起動と systemd はサーバー運用のすべての起点。ログ管理やプロセス制御と組み合わせると、障害時の切り分け力が一段上がる。

次に読む