◆ システムの起動の流れ
一般的なLinuxシステムで、ハードウェアで電源ONにしてからOSが起動するまでの流れは以下です。
1. 電源ON
2. BIOSが起動してハードウェアのチェックなどを行い、MBRからブートローダを起動。
3. ブートローダでは、ハードディスク上からカーネルをメモリ上へ読み込む。
4. カーネルは、メモリの初期化、システムクロックの設定などを行う。
5. initは、システムの初期化スクリプトを実行し、ランレベルに応じたデーモンを起動。
6. ブートが完了すると、Linuxへのログインプロンプトが表示され、起動処理が完了する。
◆ Linuxカーネルの起動 : initプロセス (/sbin/init) の起動
システム起動時の initプロセス(/sbin/init)では、/etc/inittabファイルに従いシステムサービスを起動。
1. initが、/etc/inittab を読み込む。
2. initが、/etc/rc.sysinitスクリプトを実行する。
3. initが、/etc/rcスクリプトを実行する。
4. /etc/rcスクリプトが、/etc/rc(ランレベル).d ディレクトリ配下の起動スクリプトを実行する。
上記のようなサービスがあらかじめ決められた順番で起動していく仕組みのことをSysVinitと言います。
この仕組みの場合、あるサービスの起動に手間取ると、次に起動するサービスを待つことになり、最終
的な起動完了まで時間がかかります。最近のLinuxディストリビューションではUpstartという仕組みを
採用しており、この仕組みの場合、サービスを並列で起動することで短時間でシステムを起動できます。
◇ 起動スクリプト
SysVinitでは、各種サービスを起動するために /etc/init.d ディレクトリの配下に用意されている起動
スクリプトが使われます。ランレベルが異なれば起動サービスも異なります。/etc/rc*.d ディレクトリ
では、各ランレベルで起動するサービス、終了するサービスのスクリプトファイルが配置されています。
※ 以下の /etc/rc*.d ディレクトリの起動スクリプトの実体は、すべて /etc/init.d に格納されています。
/etc/rc1.d ⇒ ランレベル1になった時に利用されるスクリプトファイル
/etc/rc2.d ⇒ ランレベル2になった時に利用されるスクリプトファイル
/etc/rc3.d ⇒ ランレベル3になった時に利用されるスクリプトファイル
/etc/rc4.d ⇒ ランレベル4になった時に利用されるスクリプトファイル
/etc/rc5.d ⇒ ランレベル5になった時に利用されるスクリプトファイル
/etc/rc6.d ⇒ ランレベル6になった時に利用されるスクリプトファイル
例として、ランレベル1とランレベル2で実行されるスクリプトファイルを見てみましょう。
ファイル名が「K」ではじまるファイル、「S」ではじまるファイルはシンボリックリンクのファイルで、
実際には/etc/init.d ディレクトリ以下にあるファイルです。シンボリックリンクとはWindowsでいえば
ショートカットのことです。ls -l により、ファイルの詳細を確認すれば -> でリンク先が表示されます。
◆ システム起動時のイベント確認
システム起動時のイベントはログファイルに保存されており、以下のログファイルで確認できます。
ファイル名 |
説明 |
/var/log/messages |
システム全般の情報が確認できる。 |
/var/log/boot.log |
システム起動時の各プロセスが「OK」か「Failed」かを確認できる。 |
/var/log/dmesg |
システム起動時のメッセージが出力される。 |
また、dmesgコマンドを使用することで、システム起動時の処理内容を詳細に確認することができます。
|