systemdとブートプロセス完全攻略|ブートターゲット管理【LinuC 1.01.3対応】

LinuC対策

この記事はLinuC Level1 主題1.01.3「ブートプロセスとsystemd」に対応した要点解説です。試験で問われる範囲に絞り、電源オンからログインまでの流れ、systemctlの主要サブコマンド、ブートターゲットの切替と永続化を整理しました。

LinuC Level1 完全攻略マップ(全39サブ項目)へ戻る


目次

  1. この記事でできるようになること
  2. ブートプロセスの順序
  3. initシステムとinittab
  4. systemdのユニット
  5. systemctlでサービスを操作する
  6. ブートターゲットとデフォルト設定
  7. 停止・再起動のコマンド
  8. よくある質問(FAQ)
  9. まとめ
  10. 模擬問題にチャレンジ(ランダム出題)

1. この記事でできるようになること

LinuC 主題1.01.3 の出題範囲のうち、本記事で押さえる要点:

  • ブートプロセスの順序(UEFI/BIOS → ブートローダ → カーネル → init/systemd → 各サービス)
  • ブートローダ(GRUB2)の役割とカーネルの役割
  • /etc/inittab を使うinit(SysVinit)と使わないinit(systemd / Upstart)
  • systemdのユニット種別(.service / .target / .socket / .mount / .timer / .device / .path
  • systemctl の主要サブコマンド(start / stop / restart / reload / enable / disable / is-active / status / list-units
  • ブートターゲット(multi-user / graphical / rescue / emergency / poweroff / reboot)の使い分け
  • get-default / set-default / isolate の違いと、default.targetのシンボリックリンクを直接書き換える方法
  • systemctl poweroff / halt / reboot / suspend、および従来のreboot / shutdown -r nowの使い分け

2. ブートプロセスの順序

Linuxの電源オンからログインまでは、固定された順序で処理が進みます。試験では並び替え問題として頻出します。

  1. UEFI / BIOS 起動
    POST(Power-On Self Test)でハードウェアを診断し、ブートメディアの優先順位を決める。
  2. ブートローダ起動(GRUB2 等)
    OS選択メニューを表示し、選択されたカーネルとinitramfsをメモリへ読み込んでカーネルに制御を渡す。
  3. カーネル起動
    ハードウェアを初期化し、ルートファイルシステムをマウント。最初のユーザプロセス(PID 1 = init / systemd)を起動する。
  4. init(systemd)起動
    PID 1としてdefault.targetを読み、必要なユニットを依存順に並列起動。
  5. 各サービスの起動・ログイン可能状態
    sshd・cron・Display Manager などが立ち上がり、コンソール/SSH/GUIログインが受付可能になる。

2-1. ブートローダ(GRUB2)の役割

ブートローダはOSカーネルを起動する前段のプログラムです。役割は次の通り。

  • 複数のカーネル・複数OSからどれを起動するかの選択メニューを表示する
  • 選択されたカーネルとinitramfsをメモリに読み込む
  • カーネルパラメータを指定してカーネルに制御を渡す

GRUB2 が最も一般的です。POST(ハードウェア診断)はUEFI/BIOSの役割で、ブートローダは行いません。

2-2. カーネルの役割

Linuxカーネルは OS の中核ソフトウェアで、次の責務を持ちます。

  • CPU・メモリ・デバイスなどハードウェア資源の管理
  • プロセス管理、ファイルシステム、ネットワークなどシステム基盤機能の提供
  • GRUBからメモリへロードされ、初期化を終えると PID 1 のプロセス(init / systemd)を起動

Webブラウザやエディタなどのアプリ本体はカーネルに含まれません。GUIログイン画面も Display Manager というユーザ空間プログラムが提供します。


3. initシステムとinittab

initは PID 1 として最初に起動し、他のサービス群を順に立ち上げる役割を持ちます。Linuxでは歴史的に3世代のinitが使われてきました。

init 世代 設定の持ち方 /etc/inittab
SysVinit 古典的 /etc/inittabとランレベル別の/etc/rc*.d/ 使用する
Upstart 過渡期 イベント定義ファイル(/etc/init/*.conf 使用しない
systemd 現代の主流 ユニットファイル(.service / .target など) 使用しない

ポイントは「/etc/inittabを使うのはSysVinitだけ」という点です。systemdとUpstartはいずれも/etc/inittabを使いません。BusyBox init や runit など別実装の多くも独自の設定を使います。

systemdを中心に操作するコマンドがsystemctlです。サービスの起動・停止、ターゲットの切替、ユニット一覧の取得までをまとめて扱います。ログ参照はjournalctlという別コマンドになります。


4. systemdのユニット

systemd は「ユニット」という単位で全てを管理します。ユニットは拡張子で種別が分かります。

拡張子 役割
.service サービス(デーモン) sshd.service
.target ユニットのグループ(ランレベル相当) multi-user.target
.socket ソケット(アクティベーション用) cups.socket
.mount マウントポイント tmp.mount
.timer タイマー(cron代替) apt-daily.timer
.device デバイス dev-sda.device
.path パス監視(ファイル変更で発火) cups.path

試験では「ユニットとして正しいものを選べ」という形で出題されます。.config.runlevel.inittab.rc.kernel などはユニットには存在しないので除外できます。

4-1. ユニット一覧の確認

現在ロードされているユニットの一覧を取得するのはlist-units。ファイルとして定義されているユニット全体を見たいときはlist-unit-filesです。

# 現在ロード中のユニット一覧
$ systemctl list-units

# targetユニットだけに絞る
$ systemctl list-units --type=target

# ファイルとして定義されているユニット全体
$ systemctl list-unit-files

list-unitsの典型的な出力は「Unit / Load / Active / Sub / Description」のテーブル形式です。

UNIT            LOAD   ACTIVE SUB     DESCRIPTION
sshd.service    loaded active running OpenSSH server daemon
nginx.service   loaded active running A high performance web server
...

複数ユニットを列挙するこの形式を見たらlist-unitsと判断します。statusは特定ユニットの詳細ログまで含めて出すので出力形式が異なります。


5. systemctlでサービスを操作する

個別サービス(例: sshdhttpdpostfixmysqldnginx)を操作するsystemctlの主要サブコマンドです。

サブコマンド 動作
start サービスを今すぐ起動 systemctl start mysqld
stop サービスを今すぐ停止 systemctl stop postfix
restart 停止してから起動し直す(既存接続は切れる) systemctl restart nginx
reload プロセスを維持したまま設定ファイルだけ再読込 systemctl reload postfix
enable 次回起動時から自動起動するよう登録 systemctl enable httpd
disable 自動起動登録を解除 systemctl disable httpd
status 状態・最近のログ抜粋・PID等を表示 systemctl status httpd
is-active 稼働中かどうかだけ端的に返す(active / inactive / failed) systemctl is-active httpd
is-enabled 自動起動登録の有無を返す systemctl is-enabled httpd

5-1. startとenableは別物

試験で混同しやすいのがstartenableです。

  • systemctl start httpd今すぐhttpdを起動する(次回起動時の挙動は変わらない)
  • systemctl enable httpd次回起動から自動起動するよう登録する(その場では起動しない)

両方まとめて行いたい場合はsystemctl enable --now httpdchkconfigserviceはSysVinit時代のコマンドで、systemd環境では基本的に使いません。

5-2. stopとdisableも別物

  • systemctl stop postfix ― 今動いているpostfixを止める
  • systemctl disable postfix ― 自動起動の登録を外す(今動いているものは止めない)

5-3. restartとreloadの違い

restartはプロセスを一度停止してから起動し直すので既存接続は切れます。reloadSIGHUP等でプロセスに設定ファイルだけ読み直させるもので、接続を切らずに設定変更を反映できます。本番サービスで設定だけ変えたいときはreloadが安全です。

5-4. 稼働確認はis-active

「稼働中か」だけを端的に知りたいときはis-activeです。詳細ログも見たいときはstatus、自動起動登録の有無を問うのはis-enabledで観点が異なります。

$ systemctl is-active httpd
active

$ systemctl is-enabled httpd
enabled

6. ブートターゲットとデフォルト設定

ブートターゲットはSysVinit時代のランレベルに相当する概念で、「システムが今どの状態にあるか/どの状態で起動するか」を表します。

6-1. 主要ターゲット

ターゲット 旧ランレベル 用途
poweroff.target 0 電源オフ
rescue.target 1, s, S シングルユーザモード(rootシェル+最小サービス)
multi-user.target 2, 3, 4 マルチユーザー CUI(サーバ運用の標準)
graphical.target 5 マルチユーザー GUI(デスクトップ運用)
reboot.target 6 再起動
emergency.target 緊急モード(/を読み取り専用でマウント、rescueよりさらに最小)
default.target デフォルト起動ターゲットへのシンボリックリンク

サーバ運用としてはCUI中心のmulti-user.targetが一般的、GUIも必要ならgraphical.targetを選びます。メンテナンス用途ではrescue.targetか、より深刻な障害用のemergency.targetを使います。basic.targetは他のターゲットから依存される中間ターゲットで、通常単独で指定するものではありません。

6-2. 現在のデフォルトターゲットを確認する

次回起動時にどのターゲットに入るかを確認する方法は2つあります。

# systemctlのサブコマンドで取得
$ systemctl get-default
graphical.target

# default.target はシンボリックリンクなので ls -l でリンク先を確認してもよい
$ ls -l /etc/systemd/system/default.target
lrwxrwxrwx 1 root root 40 ... /etc/systemd/system/default.target -> /lib/systemd/system/graphical.target

systemctl list-targetssystemctl show-targetといったコマンドは存在しません。runlevelはSysVinit用です。

6-3. デフォルトターゲットを変更する(次回起動から反映)

永続的に変更するのはset-defaultです。

# 次回起動からCUI運用に
$ sudo systemctl set-default multi-user.target

# 次回起動からGUI運用に
$ sudo systemctl set-default graphical.target

set-defaultの実体は/etc/systemd/system/default.targetのシンボリックリンクを張り替える操作です。そのため、直接ln -sfで貼り替えても同じ結果になります。

# systemctlを使わず直接リンクを張り替える
$ sudo ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target

6-4. 稼働中のシステムを即切り替える(isolate)

再起動せずにその場でターゲット相当の切替(例: multi-user → graphical)を行うのはisolateです。

# いまGUIを落としてCUIのみへ
$ sudo systemctl isolate multi-user.target

# CUIからGUIへ戻す
$ sudo systemctl isolate graphical.target

isolateは「指定ターゲットに必要なユニットだけを残し、不要なユニットは停止する」動作です。再起動するとdefault.targetに戻るため一時的な切替になります。永続化したい場合はset-defaultを併用します。

6-5. set-default と isolate の違い

サブコマンド いつ反映されるか 永続性
systemctl set-default <target> 次回起動から 再起動後も維持
systemctl isolate <target> 今すぐ 再起動で元に戻る

「今すぐ切替+次回以降も維持」したい場合は両方を実行します。enableはサービスの自動起動登録用で、ターゲット切替とは別物です。

6-6. poweroff.targetを明示的に start した場合の挙動

poweroff.targetは「電源オフの状態」を表すターゲットです。これを明示的にstartするとシステムはその状態へ遷移する、つまり電源オフになります。

# システムが停止(電源オフ)する
$ sudo systemctl start poweroff.target

実質的にsystemctl poweroffと同等の動作です。

6-7. rescueモードから通常起動状態に戻す

systemctl rescue(またはisolate rescue.target)でシングルユーザモードに入ってメンテナンスしたあと、通常運用状態に戻す方法は複数あります。

  • systemctl isolate multi-user.target ― CUIサーバ状態へ切替
  • systemctl isolate graphical.target ― GUIデスクトップ状態へ切替
  • systemctl defaultdefault.targetで指定された状態に復帰
  • reboot ― 一度再起動して通常ブート

systemctl rescue --exitshutdown haltといった書式は存在しません。


7. 停止・再起動のコマンド

systemdが稼働する環境ではsystemctlのサブコマンドで停止・再起動・サスペンドをすべて扱えます。

# 電源オフ
$ sudo systemctl poweroff

# システム停止(電源は切らず)
$ sudo systemctl halt

# 再起動
$ sudo systemctl reboot

# サスペンド(一時停止)
$ sudo systemctl suspend

# ハイバネート(休止状態)
$ sudo systemctl hibernate

停止(電源オフ)として扱われるのはpoweroffhaltです。rebootは再起動、suspendはサスペンド、defaultはデフォルトターゲットへの遷移で、いずれも電源オフではありません。

7-1. 再起動のやり方

今すぐ再起動したい場合、次のいずれも使えます。

  • systemctl reboot
  • reboot
  • shutdown -r now

haltはシステム停止、poweroffは電源オフで、これらは再起動ではありません。

7-2. 従来コマンドはsystemctlのシンボリックリンク

systemd環境では、従来のshutdownreboothaltpoweroffも内部的にsystemctl相当の動作になります。

$ readlink -f /sbin/shutdown /sbin/reboot /sbin/halt /sbin/poweroff
/usr/bin/systemctl
/usr/bin/systemctl
/usr/bin/systemctl
/usr/bin/systemctl

8. よくある質問(FAQ)

systemdで/etc/inittabを編集する意味はあるか?

systemdは/etc/inittabを参照しません。ランレベルに相当する設定はsystemctl set-defaultdefault.targetのシンボリックリンクを張り替える形になります。Upstartも/etc/inittabを使わず独自のイベント定義ファイルを使います。

startenableは何が違うか?

startは今すぐ起動する操作で、次回起動時の挙動は変えません。enableは次回起動時に自動起動するよう登録する操作で、その場では起動しません。両方まとめてやるならsystemctl enable --now <unit>です。

isolateset-defaultの違いは?

isolate今すぐ切替えですが再起動で元に戻ります。set-default次回起動から適用で再起動後も維持されます。「即変更+永続化」したい場合は両方を実行します。

restartreloadはどう使い分けるか?

既存接続を切らずに設定ファイルの変更だけ反映したい場合はreloadSIGHUPで設定再読込)。プロセス自体を作り直したい場合はrestart(停止→起動)です。サービスによってはreloadが未実装でrestart相当の動作になります。

systemctl get-default以外でデフォルトターゲットを調べる方法は?

default.target/etc/systemd/system/default.targetに置かれたシンボリックリンクです。ls -l /etc/systemd/system/default.targetでリンク先(multi-user.targetgraphical.target)を見れば同じ結果が得られます。


9. まとめ

  • ブートプロセスは UEFI/BIOS → ブートローダ → カーネル → init(systemd) → 各サービス の順
  • ブートローダは OS 選択とカーネル+initramfsロード、POST は UEFI/BIOS 側
  • /etc/inittabを使うのは SysVinit のみ。systemd と Upstart は使わない
  • systemd のユニット: .service / .target / .socket / .mount / .timer / .device / .path
  • サービス操作: start / stop / restart / reload / enable / disable、稼働確認はis-active
  • ユニット一覧はsystemctl list-units、典型的な出力は Unit/Load/Active/Sub/Description のテーブル
  • デフォルトターゲット: 確認はget-defaultまたはls -l /etc/systemd/system/default.target
  • デフォルト変更: set-default(次回起動から)。実体はdefault.targetのシンボリックリンク張替でln -sfでも同等
  • 即切替: isolate(再起動で元に戻る)。永続化したいときはset-defaultと併用
  • サーバ運用= multi-user/graphical、メンテ= rescue/emergency
  • systemctl start poweroff.targetsystemctl poweroffと同等
  • 停止: poweroff/halt、再起動: systemctl reboot/reboot/shutdown -r now

10. 模擬問題にチャレンジ(ランダム出題)

ここまでの内容を本試験に近い形で確認できます。問題数を選んで「出題スタート」を押すと、主題1.01.3の問題プールからランダムに出題されます。選択肢をクリック/タップすると、正誤と解説がその場で表示されます。

合格ライン目安:75%以上。もっと幅広く解きたい場合は LinuC 模擬問題ポータル で他の分野と合わせて挑戦できます。

おすすめの教材


Linux教科書 LPICレベル1

Linux教科書 LPICレベル1 Version 5.0対応(あずき本)

systemdとブートプロセスも詳しく解説。LinuC/LPIC Level1 の定番参考書。


Amazonで見る →

【ウズカレ式】1週間でLinuxの基本操作と管理・運用スキルが学べる講座

累計80,000人以上受講。LinuC Level1を1週間で網羅。


Udemyで講座を見る →


関連記事

LinuC Level1 完全攻略マップへ戻る

Dockerの基礎を動画で体系的に学びませんか?

実務で使う基礎だけを3時間に凝縮。環境構築から丁寧に解説しています。

Udemy Docker入門講座 クーポン割引で講座を見る →

コメント

タイトルとURLをコピーしました