起動シーケンスの全体像
電源投入からログインプロンプトまでには、いくつもの段階が順に実行されます。まずファームウェア(BIOSまたはUEFI)がハードウェアを初期化し、ブートローダ(GRUB)を読み込みます。GRUBはLinuxカーネルとinitramfsをメモリへ展開してカーネルへ制御を渡します。カーネルはデバイスを認識して最初のユーザ空間プロセスである init(現在はsystemd)を起動し、systemdが各サービスを並列に立ち上げてシステムが利用可能な状態になります。各段階が「次へ橋渡しする」連鎖だと捉えると、障害切り分けの起点が見えてきます。
電源ボタンを押してからログイン画面が出るまでの数秒〜数十秒。その短い間に、何段階ものプログラムが順番にバトンを渡し合っている。
この一連の流れを起動シーケンス、またはブートプロセスと呼ぶ。ふだんは意識しなくていい世界だ。
だが「電源を入れても画面が真っ黒のまま」「特定のサービスだけ起動してこない」といったトラブルでは話が変わる。どの段階で詰まったのかが分かれば、調べる場所がぐっと絞れるからだ。
🗺 起動は4つの段階に分かれる
起動はおおまかに4つの段階に分けられる。順に、ファームウェア(BIOSまたはUEFI)、ブートローダ(GRUB)、カーネルとinitramfs、そして最初のユーザ空間プロセスである init(現在はsystemd)だ。
電源ON → BIOS/UEFI → GRUB → カーネル+initramfs → init/systemd → ログイン、という一本道をイメージしておくとよい。以降の各トピックがこの道のどこを指しているのかが見通せる。
もっと大きく捉えると、二つの局面に分かれる。ファームウェアからカーネルが立ち上がるまでがハードウェアとカーネル空間の世界、initが動き始めてからログインまでがユーザ空間の世界だ。
⚡ まず最初に動くもの
電源が入ってまず動くのは、マザーボード上のROMに焼かれたファームウェアだ。古くからあるものをBIOS(Basic Input/Output System)、後継として主流になったものをUEFI(Unified Extensible Firmware Interface)という。
この段階の仕事は二つある。一つは、CPUやメモリ、ディスクといった最低限のハードウェアが正常かを点検すること(POST: Power-On Self-Test)。もう一つは、次に制御を渡すブートローダを探して読み込むことだ。
ブートローダの探し方で、BIOSとUEFIの道が分かれる。BIOSはディスク先頭のMBR(マスターブートレコード)にある小さなプログラムを読み込む。UEFIはディスク上のEFIシステムパーティション(ESP)に置かれた .efi 形式のブートローダファイルを直接読み込む。
UEFIにはSecure Bootという仕組みもある。署名されていないブートローダの起動を拒否して、マルウェアの混入を防ぐものだ。
🥾 次に動くブートローダ
ファームウェアから呼び出されるのがブートローダで、Linuxでは GRUB(GRand Unified Bootloader)が広く使われている。
GRUBの役割は、起動するカーネルを選ばせ、そのカーネル本体と、起動初期に使う一時的なファイルシステムであるinitramfsをメモリ上に展開し、カーネルに制御を渡すことだ。
起動時に黒い画面でカーネルの一覧メニューが出るのがGRUBだ。複数のカーネルや旧バージョンを選んで起動できるのもこの段階の働きである。詳しい中身は次のトピックで掘り下げる。
🐔 カーネルがディスクを読むまで
制御を受け取ったカーネルは、まず自分自身をメモリ上に展開し、CPUやメモリ管理を初期化したうえで、接続されたデバイスを次々に認識していく。
ここで厄介な問題が立ちはだかる。本物のルートファイルシステムはディスク上にあるのに、そのディスクを読むためのドライバ自体がモジュールとして必要なのだ。読むためにドライバがいり、ドライバはディスクの中にある。鶏と卵の堂々巡りである。
これを解くのがinitramfs(initial RAM filesystem)だ。GRUBがあらかじめメモリに載せておいた小さな仮のファイルシステムに必要なドライバを同梱しておき、これを使ってまず本物のルートファイルシステムをマウントできる状態にする。
準備が整うと、カーネルはルートファイルシステムを正式にマウントし、その中にある最初のユーザ空間プログラムを起動する。ここまでがカーネル空間の仕事だ。
🚪 ログイン画面まで運ぶもの
カーネルが起動する最初のユーザ空間プロセスが init で、現在の多くのディストリビューションでは systemd がその役を担う。このプロセスには必ず PID 1 が割り当てられ、以降に動くすべてのプロセスの大もとの親になる。
systemd は、ネットワーク・ログ・各種デーモンといったサービスを、依存関係を解きほぐしながら可能なものから並列に起動していく。
すべての必要なサービスが立ち上がり、目標とする状態(後述する target)に到達すると、コンソールにログインプロンプトが、あるいはディスプレイマネージャがログイン画面を表示する。ここまで来て、最初に押した電源ボタンがログイン画面につながる。
🧭 起動はsystemdから始まるわけではない
よくある誤解は、「Linuxの起動 = systemdの起動」と捉えてしまうことだ。実際にはsystemdが動き始める前に、ファームウェア・GRUB・カーネルという3つの段階がすでに終わっている。
この4段階の地図を持っていると、症状から疑う段階を切り分けられる。画面が真っ黒のまま何も出ないならファームウェアやGRUBより手前を、GRUBメニューは出るのにカーネルが起動しないならカーネルやinitramfsを、ログインはできるが特定のサービスが立ち上がらないならsystemdを疑う。
実務では、カーネルが起動以降に何を認識したかは dmesg で、systemdがどのサービスにどれだけ時間をかけたかは systemd-analyze と journalctl で追跡する。
原因を闇雲に探すのではなく、まず4段階のどこで連鎖が途切れたのかを切り分ける。起動まわりのあらゆる調査は、まずこれが出発点になる。