はじめに
BIOSからinitまでの流れを実際に確認してみました。
今回はvirtualboxに仮想マシンを立てて、その中身を見ていきます。
前提環境:
- PC:mac(arm)
- 仮想マシン:ubuntuサーバー(virtualbox)
確認手順
手順①:起動方式(BIOS / UEFI)を確認
コマンド
ls /sys/firmware/efi
- ディレクトリがあれば UEFI
- なければ BIOS
自分の場合は、ディレクトリがなかったのでBIOSだとわかった。
手順②:ブートローダ → カーネルの引数を確認
コマンド
cat /proc/cmdline
実行結果

cat /proc/cmdlineによって、GRUB からカーネルに渡された起動オプションが見えた。
例:
-
linux:GRUBがLinux カーネルを起動する命令 -
/boot/vmlinuz-6.8.0-26-generic:読み込むカーネル -
root=UUID=...:ルートファイルシステム -
ro:、起動時はread-only
手順③:カーネル起動ログを確認
コマンド
dmesg | head
実行結果(抜粋)
# カーネル実行開始の瞬間
[ 0.000000] Booting Linux on physical CPU 0x0000000000 [0x610f0000]
# カーネルのバージョンとビルド情報
Linux version 6.8.0-94-generic # カーネル、6.8.0-94
(buildd@bos03-arm64-050) # ARM64 (aarch64) 用カーネル
(aarch64-linux-gnu-gcc-13)
# 実行環境
Machine model: linux,dummy-virt
# UEFIで起動
efi: EFI v2.7 by EDK II
efi: MEMATTR=...
# Secure Boot の状態
secureboot: Secure boot disabled
dmesg | headで、ブートローダから制御を受け取ったカーネルが最初に実行した処理のログを表示する。
CPU・UEFI・仮想環境・セキュリティ機能などの初期化状況が分かった。
手順④:init(PID 1)を確認
ps -p 1 -o pid,comm,args
多くの環境では systemd が表示される。自分ももれなくsystemdが表示された。
手順⑤:systemd が起動したサービスを確認
コマンド
systemctl list-units --type=service --state=running
実行結果

実際に16のサービスがロードされていることが確認できた。
- systemd-journald.service:systemdの全ログ管理。
jouranalctlで見ているログ。 - systemd-networkd.service:ネットワーク関連全般。IPアドレス設定やNICの有効化。
- systemd-udevd.service:デバイス管理の中核。/dev配下の動的生成。
おわりに
今回、BIOS(UEFI)から init(systemd)までの流れを、
「コマンドで実際に確認する」 という形で追ってみました。/proc/cmdlineやdmesg、ps -p 1を通して「マシンが、どの段階をどう通って起動してきたのか」というのがよりはっきりしたと思います。