2026年9月17日
そもそもシステムがちゃんと起動しているの?
何かトラブルが起こった時に、起動ログを確認したい。
そんな時に備えて知っておきたい、Linuxの起動プロセスを簡単に調べてみました。
1. Linuxの起動順序
結論を言ってしまうと、Linuxは
UEFI→ブートローダー→カーネル→initシステム の順に起動します。
次に、これらについて調べてみたことをそれぞれ説明します。
2. UEFI
UEFIは、Linuxのファームウェアを起動する役割を担います。
かつてBIOSと呼ばれたものと似ていますが、BIOSから進化しています。
WSL2上にあるLinuxでは相当するものが無いようです。
3. ブートローダー
ブートローダーの役割は主に3つ。
■OSのカーネルをメモリに読み込む
カーネルとはLinux OSの主要な機能を指します。
では、主要な機能とは?具体的には、プロセス管理、メモリ管理、デバイス管理、ファイルシステム、ネットワーク、セキュリティ・権限管理などが含まれます。
■カーネルコマンドラインを渡す
Linuxカーネルのソースコード内で定義されている、各カーネルパラメータの既定値を上書きしたり、Red Hat Enterprise Linux システムに特定のハードウェア設定を設定したりできます。
例えばどんなものがあるのか?
それは「cat /proc/cmdline」で確認することができます。
このコマンドは、ブートローダー(GRUB)がカーネルに渡したカーネルコマンドラインの内容を表示します。
[minyaneko@AlmaLinux9 ~]$ cat /proc/cmdline
initrd=\initrd.img 初期RAMディスク(initramfs/initrd)の場所を指定
WSL_ROOT_INIT=1 WSLの初期化処理を有効にする、WSL固有のパラメータ
panic=-1 カーネルpanic発生時、即座に再起動する設定
nr_cpus=12 カーネルが使用可能なCPU数を12個として起動
hv_utils.timesync_implicit=1 Hyper-Vの時刻同期機能に関する設定。WSL2はHyper-Vの仮想化基盤を利用するため、このような設定が入る
console=hvc0 カーネルのコンソールを hvc0(Hyper-Vの仮想コンソール)にする
debug カーネルのデバッグ用メッセージを増やす設定
pty.legacy_count=0 従来型PTY(pseudo-terminal)の数を0にする
WSL_ENABLE_CRASH_DUMP=1 WSLのクラッシュダンプ機能を有効にするWSL固有パラメータ
この辺りは物理Linuxとは若干違うようです。
■initramfsの読み込み
initramfsとは、起動直後に使う小さな一時的なファイルシステムのことをいいます。
4. カーネル
カーネルの主な機能は上に書いたとおりLinux OSの主要な機能を指し、具体的には、プロセス管理、メモリ管理、デバイス管理、ファイルシステム、ネットワーク、セキュリティ・権限管理などを行います。
ではカーネル起動時のログを見てみましょう。
直近で起動したカーネルログは「journalctl -k -b」で確認できます。
Sep 17 20:06:25 AlmaLinux9 kernel: Linux version 6.18.33.2-microsoft-standard-WSL2 (root@f1bbfb02316b) (gcc (GCC) 13.2.>
⇒WSL2用のMicrosoftカーネルであることが分かる
Sep 17 20:06:25 AlmaLinux9 kernel: Hypervisor detected: Microsoft Hyper-V
Sep 17 20:06:25 AlmaLinux9 kernel: Booting paravirtualized kernel on Hyper-V
⇒AlmaLinuxがHyper-V上で動作している(WSL2はHyper-Vのサブセットを利用している)
Sep 17 20:06:25 AlmaLinux9 kernel: Command line: initrd=\initrd.img WSL_ROOT_INIT=1 panic=-1 nr_cpus=12 hv_utils.timesy>
⇒cat /proc/cmdlineの内容と同じ
Sep 17 20:06:25 AlmaLinux9 kernel: smpboot: Total of 12 processors activated (59903.95 BogoMIPS)
⇒CPUが12個認識された
Sep 17 20:06:25 AlmaLinux9 kernel: Memory: 7914396K/8188540K available (20176K kernel code, 3632K rwdata, 14820K rodata>
⇒約7.7GB/8.0GBのメモリが割り当てられた
Sep 17 20:06:25 AlmaLinux9 kernel: hv_vmbus: registering driver hv_storvsc
Sep 17 20:06:25 AlmaLinux9 kernel: hv_vmbus: registering driver hv_netvsc
⇒Hyper-Vの仮想デバイスが認識されている
Sep 17 20:06:25 AlmaLinux9 kernel: sd 0:0:0:3: [sdd] 2147483648 512-byte logical blocks: (1.10 TB/1.00 TiB)
Sep 17 20:06:25 AlmaLinux9 kernel: EXT4-fs (sdd): mounted filesystem 0ffe031e-c5cd-447d-9b1a-d2ba72abc7a1 r/w with orde>
⇒AlmaLinuxのファイルシステムが ext4として読み書き可能な状態でマウントされた
Sep 17 20:06:25 AlmaLinux9 kernel: Trying to unpack rootfs image as initramfs...
⇒initramfsの読み込み
Sep 17 20:06:25 AlmaLinux9 kernel: Run /init as init process
⇒/initを最初のプロセスとして実行
ちゃんとカーネルの機能が正常に起動していることが分かります。
また、以前WSLの設定とかリソースのチューニングとか で設定した内容も反映されています。
5. initシステム
initシステムは、アプリケーション、サービス、ファイルシステム、シェルを起動・管理します。
カーネルの次に主要な部分、と考えて良いでしょうか。
現在、initシステムを担っているのがsystemdと言われるものになります。
古いOSだとSysVinitがinitシステムを担っていましたが、最近のOSではsystemdが用いられているようです。
サービスを起動するときに、SysVinitだと/etc/rc.d/init.d/<service名> startが使われていましたが、systemdではsystemctl start <service名>が使われていますね。
initシステムとして何が使われているか?それはPID 1(プロセスID 1)を調べることで分かります。
PID 1として起動するとinit systemとして動作するからです。
[minyaneko@AlmaLinux9 ~]$ ps -p 1 -o pid,comm,args
PID COMMAND COMMAND
1 systemd /sbin/init
systemdが採用されているようです。
ここで表示された/sbin/initを調べてみると
[minyaneko@AlmaLinux9 ~]$ ls -l /sbin/init
lrwxrwxrwx 1 root root 22 Jun 25 09:27 /sbin/init -> ../lib/systemd/systemd
systemdにリンクされているようです。
systemdの起動ログも見てみましょう。
「journalctl -b _PID=1」でプロセスIDを指定します。
Sep 17 20:06:25 AlmaLinux9 systemd[1]: Startup finished in 206ms.
⇒systemdがシステムの起動完了したこととその時間
Sep 17 20:06:25 AlmaLinux9 systemd[1]: Started User Manager for UID 1000.
⇒ユーザごとのManagerも起動
Sep 17 20:41:33 AlmaLinux9 systemd[1]: Starting Hostname Service...
Sep 17 20:41:33 AlmaLinux9 systemd[1]: Started Hostname Service.
⇒各種サービスの起動
systemdも正常に起動されているようです。