【初心者向け】サーバーの電源ONから起動完了するまでの仕組みを図解説明
目次
こんにちは。
にゃんこ大戦争で超激レアのキャラを手に入れて無双している ビヨンドの キタ です。
前回は、ハードウェアの記事をブログにしました。
今回はサーバーが電源ONをしてから起動完了になるまでの仕組みを、分かりやすく解説していこうと思います。
普段何気なくクラウドでサーバーの起動停止などをしていますが、そこに至るまでのプロセスを理解している方は思ったよりも少ないのではないでしょうか。
(自分もその一人でした)
今回は起動する順番を図解を含めて初心者でもわかるように解説していきますので、ぜひ最後までご覧ください。
Linuxサーバー起動時の全体図
まず、結論としてLinuxのシステムは以下の流れで起動をしています。
ファームウェア(BIOS/UEFI) → ブートローダー → カーネル → init処理
とはいえ、これだけの情報では分かりにくいため、図を用いて更に詳しく説明していきます。
電源ONから起動完了まで計8つの工程があります。
ざっくりと説明すると、以下の流れで起動完了となります。
- BIOS/UEFI起動する
- ハードウェア検知が走る
- ブートデバイスの選択処理が走る
- GRUBが起動
- カーネルが起動
- initramfsが起動
- systemdが起動
- 起動完了
全体図を用いると上のような流れになり、このシステム立ち上げの処理全体をブート(boot)と言い、
BIOS/UEFIの起動から、上記の一連の手順までを「ブートシーケンス」または「ブートアッププロセス」と呼びます。
続いて各項目の詳細について説明をしていきます。
各項目の説明
①BIOS/UEFI起動
まず、コンピューターの電源ボタンを押して起動する際に最初に動くのがBIOS/UEFIというものになります。
BIOS/UEFI はマザーボードのROMに搭載されており、役割としてはOSを起動する前にコンピュータに搭載されている各種機器を初期化し、OSを適切に起動することです。
BIOSとUEFIの違いですが、図に書いてある通りUEFIはBIOSを改良したプログラムです。
ただし、UEFIのみがあればいいのかというと、そういうわけではなく現状は両方が共存しています。
機能面は両方同じようなものなのですが、UEFIは従来から使用されてきたBIOSの操作性が複雑な点などの改良してくれています。
②ハードウェア検知
続いて、ハードウェア検知について説明をしていきます。
BIOSの処理の一つとしてPOST(Power-On Self-Test)と呼ばれる
接続されているハードウェアの認識・チェック・利用できるように初期化する処理が走ります。
③ブートデバイス選択
続いてブートデバイスの選択処理が走ります。
こちらもBIOSの処理のひとつなのですが、POST(ハードウェアの認識)を行った後にブートデバイス(OSが入っているストレージ)を選択していきます。
ブートデバイスとは、サーバーを起動した際に最初に動かしたいプログラムが入っているストレージ(HDD/SSD)のことです。
ブートデバイス = 起動したいOSが入っているストレージ と覚えておくと分かりやすいです。
④ブートローダー起動
次は、BIOSはブートデバイスに格納されているブートローダーの起動をしていきます。
ブートローダーはOS(カーネル)の認識と起動をするためのプログラムのことになります。
多くのLinuxではブートローダーとしてGRUBというものを採用しており
GRUBには古くから使われている「GRUB Legacy」というものと「GRUB 2」の二種類が存在しています。
※GRUB Legacyはすでにサポートが打ち切られています。
昨今のOSでは基本的には新しいバージョンのGRUB 2が採用されています。
⑤カーネル起動
いよいよカーネルの起動に走ります。
カーネルとは、Linuxの中核となるプログラムとなっており、狭義のLinuxとも呼ばれます。
主にサーバーに接続されたハードウェアを制御する役割を担っています。
まとめると、BIOS/UEFIはブートデバイスに入っているブートローダー(GRUB)を起動し、ブートローダーがカーネルを立ち上げるという流れになります。
⑥initramfs起動
続いてカーネルがシステムの起動のために必要なデータにアクセスするためにinitramfsを起動します。
⑦systemd起動
initramfsがルートファイルシステムをマウントした後にカーネルは「systemd」を読みだして起動します。
systemdとは、システム起動時に最初に生成されるプロセス(PID=1)です。
「system daemon」の略となっており、デーモンというのはメモリに常駐してシステム全体を統括する役割を持っています。
また、デーモンはシステム起動時に開始されてからシステムの稼働中もバックグラウンドで継続動作するプログラムです。
⑧起動完了
最後に起動完了となります。
systemdがカーネルから呼び出されたのちにシステム稼働に必要な「子プロセス」といものを順次生成して行き、ログイン画面が表示されることとなります。
まとめ
最後に改めて起動までの流れを整理しておさらいします。
- まず最初に電源ボタンを押すとBIOS/UEFI(ファームウェア)が起動
- BIOSはPOSTによってハードウェアを初期化
- BIOSは認識したハードウェア内からブートデバイスを選択
- BIOSはブートデバイスに格納されているブートローダーを起動する
- ブートローダーは選択されたブートデバイスからカーネルを読み出して起動
- カーネルがinitramfsを起動
- initramfsがカーネルがシステム起動に必要なデータを扱えるようにする
- systemdが処理を引き継いでシステム稼働に必要な子プロセスを生成してシステムを初期化してログイン画面表示
というような流れでした。
最後に
ここまで、電源ONから起動完了するまでという点から、BIOS/UEFIや、ブートデバイス、ブートローダー、initramfsやsystemdなどについて詳しく解説をしていきました。
立ち上がるのが当たり前となっているので、普段起動の流れを理解する機会というのはなかなか無いのかもしれないのですが、うまく起動しなかった場合のトラブルシューティンの際に役に立つ知識となりますので、本記事を通して少しでもサーバーの起動の流れというものを理解していただければ幸いです。
また、本記事は弊社で運営を行っているチャンネルの ねずみさん家のインフラエンジニア道場 の動画を参考に作成をしています。
インフラに関する知識をゼロから学べる素晴らしいチャンネルとなっておりますので、気になる方は是非チャンネル登録と高評価をお願いいたします!