Linuxの起動の仕組みを理解する!(UEFI)

LinuxのUEFIでの起動の流れを整理します。

電源ONによりファームウェア(UEFI)を起動する!

電源をONにするとファームウェア(UEFI)が起動します。ファームウェアは、ブートローダ(GRUB)を起動します。ブートローダは、/boot/efi/EFI/BOOTに格納されています。通常は、「BOOTX64.EFI」が起動されます。

# ls -l /boot/efi/EFI/BOOT
total 1860
-rwx------ 1 root root 955656 12月 27 21:07 BOOTX64.EFI
-rwx------ 1 root root  85672 12月 27 21:07 fbx64.efi
-rwx------ 1 root root 856232 12月 27 21:07 mmx64.efi

GRUBの設定は「/etc/default/grub」で行います。その後、「update-grub」コマンドを実行し、実際の設定ファイル「/boot/grub/grub.cfg」を生成する仕組みになっています。

ファームウェア(UEFI)がブートローダ(GRUB)を起動する!

ファームウェアは、GPTパーティション上のブートローダ(GRUB)を起動します。ブートローダ(GRUB)は、カーネルの場所をファイルシステムのパスで指定することができ、起動するカーネルを選択することができます。カーネルは、/bootに格納されています。vmlinuzで始まるファイルがカーネルです。

# ls -l /boot
total 428736
-rw-r--r--. 1 root root    212835 Nov 29 03:56 config-5.14.0-162.6.1.el9_1.0.1.x86_64
-rw-r--r--. 1 root root    207684 Jul 14 03:35 config-5.14.0-70.17.1.el9_0.x86_64
-rw-r--r--. 1 root root    207885 Sep 21 03:05 config-5.14.0-70.26.1.el9_0.x86_64
drwxr-xr-x. 3 root root        17 Nov  3 07:20 efi
drwx------. 5 root root        97 Jan 10 22:02 grub2
-rw-------. 1 root root 110141054 Nov  3 07:26 initramfs-0-rescue-d7818b80129a422a853325243ce5eef3.img
-rw-------. 1 root root  56135677 Jan  5 19:12 initramfs-5.14.0-162.6.1.el9_1.0.1.x86_64.img
-rw-------. 1 root root  34781184 Dec 14 06:12 initramfs-5.14.0-162.6.1.el9_1.0.1.x86_64kdump.img
-rw-------. 1 root root  55020479 Dec 10 12:03 initramfs-5.14.0-70.17.1.el9_0.x86_64.img
-rw-------. 1 root root  31867392 Nov  3 07:40 initramfs-5.14.0-70.17.1.el9_0.x86_64kdump.img
-rw-------. 1 root root  55021879 Dec 10 12:06 initramfs-5.14.0-70.26.1.el9_0.x86_64.img
-rw-------. 1 root root  34404352 Dec 10 12:07 initramfs-5.14.0-70.26.1.el9_0.x86_64kdump.img
drwxr-xr-x. 3 root root        21 Nov  3 07:23 loader
lrwxrwxrwx. 1 root root        55 Dec 10 12:03 symvers-5.14.0-162.6.1.el9_1.0.1.x86_64.gz -> /lib/modules/5.14.0-162.6.1.el9_1.0.1.x86_64/symvers.gz
lrwxrwxrwx. 1 root root        51 Nov  3 07:25 symvers-5.14.0-70.17.1.el9_0.x86_64.gz -> /lib/modules/5.14.0-70.17.1.el9_0.x86_64/symvers.gz
lrwxrwxrwx. 1 root root        51 Nov  3 07:49 symvers-5.14.0-70.26.1.el9_0.x86_64.gz -> /lib/modules/5.14.0-70.26.1.el9_0.x86_64/symvers.gz
-rw-------. 1 root root   5316561 Nov 29 03:56 System.map-5.14.0-162.6.1.el9_1.0.1.x86_64
-rw-------. 1 root root   5258206 Jul 14 03:35 System.map-5.14.0-70.17.1.el9_0.x86_64
-rw-------. 1 root root   5258266 Sep 21 03:05 System.map-5.14.0-70.26.1.el9_0.x86_64
-rwxr-xr-x. 1 root root  11172256 Nov  3 07:25 vmlinuz-0-rescue-d7818b80129a422a853325243ce5eef3
-rwxr-xr-x. 1 root root  11651584 Nov 29 03:56 vmlinuz-5.14.0-162.6.1.el9_1.0.1.x86_64
-rwxr-xr-x. 1 root root  11172256 Jul 14 03:35 vmlinuz-5.14.0-70.17.1.el9_0.x86_64
-rwxr-xr-x. 1 root root  11170656 Sep 21 03:05 vmlinuz-5.14.0-70.26.1.el9_0.x86_64

ブートローダがカーネルを起動する!

ブートローダは、選択されたカーネルを起動します。この時点では、実際のファイルシステムはまだマウントされず、カーネルはRAMディスクをルートファイルシステムとして動作します。ここで使用されるのが、initramfsで始まるファイルです。

カーネルが実際のルートファイルシステムをマウントする!

カーネルが実際のディスク上のルートファイルシステムをマウントします。

カーネルがSystemdを起動する!

カーネルがプロセス番号「1」のSystemdを起動します。

SystemdがOSの稼働環境を整えbashを起動する!

Systemdは、デフォルトターゲットを目指して、追加のファイルシステムのマウントや必要なプロセスの起動、ネットワーク環境などを整え、ターミナルでbashを起動してログイン待ちの状態になります。

Linux起動時のログを確認する!

Linux起動時のログは、以下のコマンドで確認します。確認できるのは、カーネル起動後のログになります。

$ journalctl --dmesg

おわりに

Linuxの稼働環境を理解するためには、Linuxの起動の仕組みを理解することが必要です。Linuxの起動の仕組みを整えることで、目的の稼働環境を整えることができます。

関連記事