Linuxを使い始めてしばらく経った人が一度は直面する壁がこれです。コマンドは使えても、システムが起動する仕組みを知らないと、ブート時のエラーに手も足も出なくなります。
この記事では、LinuxがPCの電源を入れてからログインプロンプトが出るまでの起動シーケンスを、BIOS/UEFI → GRUB → initramfs → systemd の順で体系的に解説します。
途中で起動が止まった時の原因特定方法も含めて説明しますので、ブート障害の対処力が一段上がるはずです。
この記事のポイント
・LinuxはBIOS/UEFI → ブートローダー(GRUB) → initramfs → systemd の順で起動する
・各フェーズの役割を知ると、どこで止まっているかを画面表示から判断できる
・systemd-analyze blame で起動が遅い原因を特定できる
・起動失敗時は rescue.target またはGRUBの編集モードで対処する
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
Linuxの起動シーケンス全体像
まずは全体の流れを把握しておきましょう。電源ボタンを押してからログインプロンプトが出るまでに、大きく4つのフェーズがあります。| フェーズ | 主役 | 役割 |
|---|---|---|
| 1. ファームウェア起動 | BIOS / UEFI | ハードウェア初期化・ブートデバイス選択 |
| 2. ブートローダー | GRUB2 | カーネルの読み込み・起動パラメータ渡し |
| 3. 初期RAMディスク | initramfs | 最小限の環境でルートファイルシステムをマウント |
| 4. init / systemd | systemd | サービス起動・マルチユーザー環境の準備 |
フェーズ1:BIOS / UEFI によるハードウェア初期化
電源を入れると、最初にマザーボードに書き込まれたファームウェア(BIOS または UEFI)が動き出します。1. BIOSとUEFIの違い
BIOSは1975年から使われている古い仕組みで、現在の新しいマシンはほぼUEFIに移行しています。・BIOS(Basic Input/Output System):16ビットモードで動作、MBR(Master Boot Record)を先頭512バイトに持つ。HDDが2TB以下の環境向け
・UEFI(Unified Extensible Firmware Interface):32/64ビットモード、GPTパーティションに対応。Secure Boot機能を持つ
2. POSTとは
BIOS/UEFIが最初に実行するのがPOST(Power-On Self Test)です。CPU・メモリ・ストレージが正常に動作しているか自己診断を行います。ここで異常が見つかるとビープ音が鳴ったり、エラーメッセージが表示されて起動が止まります。「No bootable device found」というメッセージもこのフェーズで出ます。
3. ブートデバイスの選択
POSTを通過すると、設定されたブート順序に従ってブートデバイスを探します。HDDの先頭セクター(MBR方式)またはEFIシステムパーティション(UEFI方式)にあるブートローダーを読み込んで制御を渡します。フェーズ2:GRUBによるカーネル起動
GRUB(GRand Unified Bootloader)はLinuxでほぼ標準的に使われているブートローダーです。現在のバージョンはGRUB2で、設定ファイルは/etc/default/grub と /boot/grub2/grub.cfg にあります。1. GRUBメニューが表示される
起動時に「GRUB」の文字が見えるメニュー画面が一瞬(または数秒)表示されます。複数のカーネルがインストールされている場合は選択肢が出ます。デフォルトではタイムアウト後に最新カーネルで自動起動します。GRUBの設定ファイルの場所:
# GRUBのデフォルト設定(編集するのはこちら) /etc/default/grub # GRUBの実行設定(自動生成されるため直接編集しない) /boot/grub2/grub.cfg # EFIシステムの場合 /boot/efi/EFI/centos/grub.cfg # CentOS/RHELの例 /boot/efi/EFI/ubuntu/grub.cfg # Ubuntuの例
2. GRUBがカーネルとinitramfsを読み込む
GRUBは/boot ディレクトリにあるカーネルイメージ(vmlinuz)と初期RAMディスク(initramfs)をメモリに展開します。# /bootの内容例(RHEL9系) $ ls -la /boot/ -rw-------. 1 root root 8.1M vmlinuz-5.14.0-362.8.1.el9_3.x86_64 -rw-------. 1 root root 34.5M initramfs-5.14.0-362.8.1.el9_3.x86_64.img -rw-r--r--. 1 root root 183K config-5.14.0-362.8.1.el9_3.x86_64 drwx------. 5 root root 4.0K efi/ drwxr-xr-x. 2 root root 4.0K grub2/
3. GRUBの起動パラメータを確認する
現在起動時に渡されているパラメータは/proc/cmdline で確認できます。# 現在の起動パラメータを確認する $ cat /proc/cmdline BOOT_IMAGE=(hd0,msdos1)/vmlinuz-5.14.0-362.8.1.el9_3.x86_64 root=/dev/mapper/rhel-root ro crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet
root= の部分です。どのデバイスをルートファイルシステムとしてマウントするかを指定しています。フェーズ3:initramfsによるルートFS準備
initramfs(initial RAM filesystem)は、実際のルートファイルシステムをマウントするための「仮の環境」です。1. なぜinitramfsが必要なのか
カーネルはストレージドライバがないとHDDやSSDを認識できません。しかし、ドライバはファイルシステム上にあります。これは鶏と卵の問題です。initramfsはこの問題を解決するために、最小限のドライバとツール群をRAM上に展開し、その中で本物のルートファイルシステムのマウントに必要な準備をします。
LVMやRAID、暗号化ボリュームを使っている場合は、initramfsの中でそれらを有効にしてからマウントします。
2. initramfsの中身を確認する
# initramfsの内容を確認する(lsinitrdコマンド) $ lsinitrd /boot/initramfs-$(uname -r).img | head -30 Image: /boot/initramfs-5.14.0-362.8.1.el9_3.x86_64.img: 34.5M ======================================================================== dracut modules: bash systemd systemd-initrd ... # または直接展開して確認 $ mkdir /tmp/initrd-check $ cd /tmp/initrd-check $ zcat /boot/initramfs-$(uname -r).img | cpio -idmv 2>/dev/null | head -20
3. dracut でinitramfsを再生成する
カーネルアップデート後やドライバ追加後はdracut コマンドでinitramfsを再生成します。# 現在のカーネル用に再生成(上書き確認なし) $ dracut --force # 特定バージョン向けに生成 $ dracut --force /boot/initramfs-$(uname -r).img $(uname -r) # Ubuntuの場合はupdate-initramfs $ update-initramfs -u -k $(uname -r)
フェーズ4:systemdによるサービス起動
ルートファイルシステムのマウントが完了すると、制御はsystemd(PID 1)に渡されます。現代のLinuxディストリビューションはほぼすべてsystemdを採用しています。1. systemdのターゲットとは
systemdは「ターゲット(target)」という単位でシステムの状態を管理します。SysVの「ランレベル」に相当するものです。| ターゲット名 | 旧ランレベル | 説明 |
|---|---|---|
| poweroff.target | 0 | システムシャットダウン |
| rescue.target | 1 | シングルユーザーモード(ネットワークなし) |
| multi-user.target | 3 | コンソールのみ・マルチユーザー |
| graphical.target | 5 | GUI環境あり・マルチユーザー |
| reboot.target | 6 | システム再起動 |
2. デフォルトターゲットを確認・変更する
# デフォルトターゲットを確認する $ systemctl get-default graphical.target # サーバー用にコンソールモードに変更する $ systemctl set-default multi-user.target # 今すぐ特定ターゲットに切り替える(再起動なし) $ systemctl isolate multi-user.target
3. systemdの並列起動の仕組み
systemdの大きな特徴は、依存関係を考慮した上でサービスを並列起動できる点です。SysV initが直列で起動していたのに対して、systemdは依存関係がないサービスを同時に起動するため、起動時間が大幅に短縮されます。各サービスは
.service ファイルで定義されており、After= や Requires= で依存関係を指定します。# サービスの依存関係を確認する $ systemctl list-dependencies multi-user.target | head -20 # 特定サービスの依存関係を確認 $ systemctl show --property=After,Requires,Wants sshd.service
起動時間を分析する(systemd-analyze)
systemdには起動時間を計測・分析するツールが付属しています。サーバーの起動が遅い時に原因を突き止めるのに使います。1. 起動時間の合計を確認する
# 起動時間の合計を表示する $ systemd-analyze Startup finished in 2.318s (kernel) + 1.431s (initrd) + 8.207s (userspace) = 11.956s graphical.target reached after 8.189s in userspace. # 各サービスの起動時間を長い順に表示する $ systemd-analyze blame 3.456s NetworkManager-wait-online.service 2.123s dnf-makecache.service 1.876s plymouth-quit-wait.service 846ms firewalld.service 712ms sssd.service ...
2. 起動シーケンスを可視化する
# SVG形式で起動シーケンスを出力する $ systemd-analyze plot > /tmp/boot-analysis.svg # ブラウザで確認する場合 $ firefox /tmp/boot-analysis.svg # クリティカルパス(最も時間がかかる依存チェーン)を確認する $ systemd-analyze critical-chain
3. 起動を遅くしているサービスを無効化する
# NetworkManager-wait-onlineは、ネットワーク接続確認待ちで遅くなる場合が多い # サーバー環境では無効化してもよい(確認してから判断) $ systemctl disable NetworkManager-wait-online.service # dnf-makecacheも起動時に不要な場合 $ systemctl disable dnf-makecache.timer
起動失敗時の対処法
ここが最も実務で役立つ知識です。Linuxが起動しない時に何をすべきかを押さえておきましょう。1. 起動が止まった場所でフェーズを特定する
画面に表示されるメッセージで、どのフェーズで止まっているか判断します。・「No bootable device found」:BIOSフェーズ。ブートデバイスが見つからない
・GRUBメニューが出ない/GRUBエラー:GRUBフェーズ。grub.cfgの破損かMBRの問題
・「Kernel panic - not syncing: VFS」:initramfsフェーズ。rootデバイスが見つからない
・「Failed to start xxx.service」:systemdフェーズ。特定サービスの起動失敗
2. GRUBの編集モードで起動する
GRUBメニューが表示されている時に e キーを押すと、起動パラメータを一時的に編集できます。よく使う操作:
・
linux で始まる行の末尾に single または 1 を追加 → シングルユーザーモード起動・
rhgb quiet を削除 → 詳細な起動メッセージを表示・
rd.break を追加 → initramfsの途中で止めてシェルに入る(rootパスワード変更に使う)編集後は Ctrl+X または F10 で起動します。
3. rescue.targetでシステムを修復する
# GRUBの linux 行末尾に以下を追加してrescueモードで起動 systemd.unit=rescue.target # または emergency.target(最小限のサービスのみ) systemd.unit=emergency.target
4. 起動後のログで失敗原因を調べる
# 起動時のエラーを確認する $ journalctl -b --priority=err # 前回の起動(-1)のログを見る(前回起動に失敗した場合) $ journalctl -b -1 # 特定サービスの起動ログを見る $ journalctl -b -u sshd.service # リアルタイムで起動ログを追う(再起動直後に実行) $ journalctl -f
5. SELinuxが原因の場合
起動時に「SELinux」関連のエラーが出ている場合は、ラベルの再付与が必要なことがあります。# ルートファイルシステム全体のSELinuxラベルを再付与する(次回起動時に実行) $ touch /.autorelabel $ reboot # 再起動後、自動でラベルが再付与される(数分かかる場合あり)
BIOSとUEFIでのGRUBインストール手順の違い
OSインストール後やディスク交換後に手動でGRUBを再インストールする場面があります。BIOSとUEFIで手順が異なります。1. BIOSシステムへのGRUBインストール
# BIOSの場合(MBRにインストール) $ grub2-install /dev/sda # grub.cfgを再生成する $ grub2-mkconfig -o /boot/grub2/grub.cfg
2. UEFIシステムへのGRUBインストール
# UEFIの場合(EFIシステムパーティションにインストール) # まずEFIパーティションをマウントする $ mount /dev/sda1 /boot/efi # GRUBをインストールする $ grub2-install --target=x86_64-efi --efi-directory=/boot/efi # grub.cfgを再生成する $ grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg # CentOS/RHEL $ grub2-mkconfig -o /boot/efi/EFI/ubuntu/grub.cfg # Ubuntu # EFIエントリを確認する $ efibootmgr -v
本記事のまとめ
Linuxの起動シーケンスを整理します。| フェーズ | 担当 | 主な作業・確認コマンド |
|---|---|---|
| ファームウェア | BIOS / UEFI | POST実行・ブートデバイス選択 |
| ブートローダー | GRUB2 | cat /proc/cmdline / grub2-mkconfig |
| 初期RAM | initramfs | lsinitrd / dracut --force |
| サービス起動 | systemd | systemd-analyze blame / journalctl -b |
Linux ポート確認の全コマンドはこちら
起動シーケンスを理解したら、次はサーバー全体の構築スキルを体系的に固めませんか?
BIOS・GRUB・initramfs・systemdの流れを押さえることで、ブート障害の原因を自分で切り分けられるようになります。これにサーバー構築やネットワーク・ファイアウォールの知識を加えることで、現場で頼られるエンジニアになれます。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 次のページへ:Linuxの文字コード判定と変換コマンドまとめ|nkf・iconv・file -iと文字化け対処
- 前のページへ:CentOS Stream 9とAlmaLinux 9・Rocky Linux 9の違い|選定基準と移行ガイド
- この記事の属するカテゴリ:Linuxtipsへ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます