一般的な Linux システムのブートプロセスは、BIOS/UEFI、ブートローダー、カーネル、init の順に進行します。
BIOS/UEFI:
BIOS (Basic Input/Output System)/UEFI (Unified Extensible Firmware Interface) は、コンピューターの電源を入れると最初に実行されるプログラムで、ハードウェアに最も近い部分を担当します。BIOS/UEFI は、物理的なハードウェアに関して最低限の認識を行い、起動デバイスの優先順位を決定します。起動後、ブートローダーに制御を移します。UEFI は BIOS より高度な機能を提供し、近年のシステムでは一般的に使用されます。
ブートローダー:
ブートローダーは、BIOS 環境では MBR に格納されていますが、UEFI 環境では EFI システムパーティション (ESP) に格納されます。ブートローダーは起動可能なカーネルイメージを見つけてロードし、起動プロセスを開始します。現在では GRUB (GRand Unified Bootloader) が最も一般的に使用されます。
カーネル:
カーネルは、ハードウェアを高度に認識し、システムの基本的な機能を提供します。また、ルートファイルシステムのマウントなど、起動時の初期化処理も行います。ブートローダーがカーネルをロードし、カーネルがメモリ上に展開された後、必要に応じてイニシャル RAM ディスク (initramfs) が使用されます。その後、カーネルは /sbin/init、または指定された別の init プロセスを起動し、システムの残りの起動プロセスを開始します。initramfs は一時的なファイルシステムとして使用され、ブート処理中に必要なドライバやスクリプトを含みます。
init:
init は、オペレーティングシステム上で最初に起動されるプロセスであり、システムの初期化を担当します。最新のシステムでは systemd が最も一般的に使用されます。Upstart や SysVinit は過去のシステムで使用されており、最新のシステムではあまり使用されません。