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の起動の仕組みを整えることで、目的の稼働環境を整えることができます。
関連記事