Linuxの起動シーケンス入門|BIOS・GRUB・initramfs・systemdの流れを体系的に理解する

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxtips > Linuxの起動シーケンス入門|BIOS・GRUB・initramfs・systemdの流れを体系的に理解する
「サーバーが起動しない。でも何が起きているか分からない」
Linuxを使い始めてしばらく経った人が一度は直面する壁がこれです。コマンドは使えても、システムが起動する仕組みを知らないと、ブート時のエラーに手も足も出なくなります。

この記事では、LinuxがPCの電源を入れてからログインプロンプトが出るまでの起動シーケンスを、BIOS/UEFI → GRUB → initramfs → systemd の順で体系的に解説します。
途中で起動が止まった時の原因特定方法も含めて説明しますので、ブート障害の対処力が一段上がるはずです。

この記事のポイント

・LinuxはBIOS/UEFI → ブートローダー(GRUB) → initramfs → systemd の順で起動する
・各フェーズの役割を知ると、どこで止まっているかを画面表示から判断できる
・systemd-analyze blame で起動が遅い原因を特定できる
・起動失敗時は rescue.target またはGRUBの編集モードで対処する


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

Linuxの起動シーケンス全体像

まずは全体の流れを把握しておきましょう。電源ボタンを押してからログインプロンプトが出るまでに、大きく4つのフェーズがあります。

フェーズ 主役 役割
1. ファームウェア起動 BIOS / UEFI ハードウェア初期化・ブートデバイス選択
2. ブートローダー GRUB2 カーネルの読み込み・起動パラメータ渡し
3. 初期RAMディスク initramfs 最小限の環境でルートファイルシステムをマウント
4. init / systemd systemd サービス起動・マルチユーザー環境の準備
この4フェーズを順に見ていきます。

フェーズ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

systemd-analyze で起動時間計測する方法の詳細はこちら

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

mount コマンドの使い方はこちら

本記事のまとめ

Linuxの起動シーケンスを整理します。
フェーズ 担当 主な作業・確認コマンド
ファームウェア BIOS / UEFI POST実行・ブートデバイス選択
ブートローダー GRUB2 cat /proc/cmdline / grub2-mkconfig
初期RAM initramfs lsinitrd / dracut --force
サービス起動 systemd systemd-analyze blame / journalctl -b
起動が失敗した時は、画面に表示されるメッセージの内容でフェーズを特定し、そのフェーズに合った対処を行うのが基本です。GRUBの編集モードとrescue.targetへの切り替えは、いざという時のために必ず手元で試しておくことをおすすめします。

Linux ポート確認の全コマンドはこちら

起動シーケンスを理解したら、次はサーバー全体の構築スキルを体系的に固めませんか?

BIOS・GRUB・initramfs・systemdの流れを押さえることで、ブート障害の原因を自分で切り分けられるようになります。これにサーバー構築やネットワーク・ファイアウォールの知識を加えることで、現場で頼られるエンジニアになれます。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。

「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として20年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。