前回に引き続き、システムアーキテクチャの章を進めていきます。
今回の内容は、「システム起動時の動作」についてです。
Contents
システム起動の手順
システムが起動する際の動作のことをブートといいますが、このブートの手順をしっかりと理解することが、試験においては重要になってきます。
一般的なLinuxシステムでは、以下のような手順でシステムのブートを行っています。
1.コンピュータの電源ON
2.BIOSの起動
3.ブートローダの起動
4.Linuxカーネルの起動
5.initシステムの起動
6.ログイン画面の表示
それでは、個々に解説していきます。
コンピュータの電源ON
これはそのままです。
コンピュータの電源を入れます。
コンピュータの電源を入れるとBIOSが起動されます。
BIOSの起動
BIOSは、コンピュータが起動すると必ず一番初めに起動します。
BIOSが起動すると、コンピュータに接続されているハードウェアを認識して初期化を行います。
この作業のことをPOSTといいます。
POSTが終わると、BIOSはブートローダを起動します。
ブートローダの起動
ブートローダとは、システムにおいてHDDの一番初めのセクタにインストールされている、OSを起動するためのプログラムです。
この、HDDの一番初めのセクタのことをMBR(Master Boot Record)といいます。
ブートローダが起動すると、HDD内に入っているLinuxカーネルを探し出して、起動します。
Linuxカーネルの起動
Linuxカーネルとは、OSの中核のようなものだという説明を以前しました。
Linuxカーネルが起動すると、もろもろの起動準備と同時にinitというプログラムを起動します。
initプログラムの起動
LPICにおいては、この部分が一番重要です。
initプログラムは、起動するとOSが起動するための準備を色々と行ってくれます。
initプログラムの詳細については、後程もっと細かく説明します。
とりあえず今は、起動のための準備を色々とやってくれるプログラムという解釈をしておいてください。
試験対策ポイント!
ブートの順番はとても重要なので覚えておこう!
1.BIOSの起動 2.ブートローダの起動 3.Linuxカーネルの起動 4.initプログラムの起動
initプロセスとは?
先ほど、initプログラムというものを起動するという話をしましたが、正確にはinitプロセスと呼ばれます。
プロセスとは、Linuxにおけるプログラムの実行単位のことを言います。
簡単に言えば、Linuxで実行中のプログラムです。
例:lsコマンドを実行すると、lsプロセスが起動。
cdコマンドを実行すると、cdプロセスが起動。
initプロセスは、Linuxカーネルが起動すると一番初めに実行されるプロセスで、Linuxが起動するための様々な準備を行ってくれます。
設定ファイルとして、「/etc/inittab」を使用します。
initプロセスの処理の流れ
initプロセスが起動すると、/etc/inittabファイルの記述内容に従って、処理を実行します。
以下は一例です。
① initプロセスが、/etc/inittabを読み込む。
② initプロセスが、rcスクリプトを実行する。
③ rcスクリプトが、/etc配下に存在するランレベルごとの起動スクリプトを実行する。
試験において、この細かい流れが聞かれることはないのでそこは安心してください。
ランレベルなどの聞きなれない言葉がいくつかあると思いますが、後程解説します。
この例のように、1-2-3と順番通りに処理を実行していく仕組みのことをSysVinitと呼びます。
この仕組みは、システムを起動するうえではあまり効率が良くないため、現在では新たに2つ仕組みが出来上がっています。
それぞれの仕組みの特徴を見ていきましょう。
SysVinit
SysVinitでは、きめられた順番で処理を常に実行します。
なので、途中で処理が止まってしまっても後回しにしたりすることができないため、処理が完全に停止してしまいます。
現在ではあまり使われていない旧時代の仕組みです。
UpStart
UpStartでは、順番自体は変更しませんが、並列処理が可能なものに関しては同時に処理を行うことで、SysVinitに比べても高速な処理が可能となっています。
少し古めのLinuxディストリビューションではこのUpStartが起動システムとして採用されています。
例:CentOS6など
Systemd
従来の起動システムとは、全く違う仕組みでのシステムの起動を行います。
異なる部分は色々とありますが、代表的なものとしてSystemdでは順序にとらわれずに処理が可能となっています。
さらに、並列処理も可能なためシステムにとって最適な順番での処理が可能となっているため、UpStartに比べて更に高速な処理が可能となっています。
現時点では、最も高速な起動が可能なシステムなため、ほとんどのLinuxディストリビューションではこのSystemdが最も利用されています。
これらの3種類の仕組みについては、必ず覚えておきましょう。
システムのログ
Linuxシステムでは、システムが動作しているときに起きたイベントをログとして保存しています。
ログは、様々な種類が存在しますが、Linuxシステムのログという意味では、以下の3つが挙げられます。
/var/log/messages | システム内のすべてのイベントログ |
/var/log/boot.log | システムブート時の起動可否を[OK]か[Failed]で確認 |
/var/log/dmesg | システムブート時のイベントログ |
ログファイルは基本的に、/varディレクトリに格納されます。
また、/var/log/dmesgにのみ専用コマンドとして「dmesg」コマンドが用意されています。
このコマンドを実行することでもdmesgファイルを確認することができます。
Systemdの場合
Upstartなどの起動システムの場合、上記のファイルを確認することでログを確認しますが、Systemdにおいては、ログを確認するためのコマンドが用意されています。
Systemdでは、ログはジャーナルとも呼ばれており、ジャーナルを確認出来るコマンドは「journalctl」コマンドです。
構文:journalctl [オプション]
-kというオプションを使うと、カーネルのログのみを確認することができます。
今回はここまでで終わります。
システムのブートの流れについては、単純ですが重要な項目なので必ず把握できるようにしておきましょう。
次回は「ランレベルとは」です。