CentOSのブート時の処理の流れをまとめました。
※目次をクリックすると目次の下部にコンテンツが表示されます。
- 1.LinuxのX86の場合の一般的なブート時の流れ
- 2.ブート処理時に起動されるinitプロセス
- 3.initデーモンの設定ファイルinittab
- 4.CentOSが起動時に実行されるシステムスクリプト
- 5.デフォルトのランレベルを設定
LinuxのX86の場合の一般的なブート時の流れ
①マシンのBIOSがプライマリハードディスクのMBR(マスターブートレコード)にある第1段階のブートローダーを起動。
②第1段階のブートローダーは、自分自身をメモリにロード。
/bootパーティションから第2段階のブートローダーが起動される。
③第2段階のブートローダーは、カーネルをメモリにロード。
カーネルがモジュールをロードし、読込み専用パーティションをマウントする。
④カーネルは、ブートプロセスの制御を/sbin/initプログラムに渡す。
⑤/sbin/initは、全サービスをロード。
/etc/fstabを参照して、パーティションをマウント。
⑥ユーザーにログインプロンプト表示。
※MBR、ブートローダーについては以下の記事も参照。
・CentOS6インストール手順のメモの”ブートローダーとチェーンロード”
・マスターブートレコード(MBR)とGRUBの概要
②第1段階のブートローダーは、自分自身をメモリにロード。
/bootパーティションから第2段階のブートローダーが起動される。
③第2段階のブートローダーは、カーネルをメモリにロード。
カーネルがモジュールをロードし、読込み専用パーティションをマウントする。
④カーネルは、ブートプロセスの制御を/sbin/initプログラムに渡す。
⑤/sbin/initは、全サービスをロード。
/etc/fstabを参照して、パーティションをマウント。
⑥ユーザーにログインプロンプト表示。
※MBR、ブートローダーについては以下の記事も参照。
・CentOS6インストール手順のメモの”ブートローダーとチェーンロード”
・マスターブートレコード(MBR)とGRUBの概要
ブート処理時に起動されるinitプロセス
・システム上の全てのプロセスの親プロセス。
・カーネルによって実行され、他のすべてのプロセスを起動させる。
・親プロセスが死んだ場合、残された子プロセスの親となる。
・/etc/initディレクトリ内のファイルによって定義される。(/etc/init/*.confなど)
・/etc/inittabに記述された設定内容に従ってプロセスを起動する。
・ランレベルを指定する。
・/etc/rc.d/rc.sysinitスクリプトを実行する。
※initプロセスについては以下の記事も参照。
Linuxのinitプロセスの概要
・カーネルによって実行され、他のすべてのプロセスを起動させる。
・親プロセスが死んだ場合、残された子プロセスの親となる。
・/etc/initディレクトリ内のファイルによって定義される。(/etc/init/*.confなど)
・/etc/inittabに記述された設定内容に従ってプロセスを起動する。
・ランレベルを指定する。
・/etc/rc.d/rc.sysinitスクリプトを実行する。
※initプロセスについては以下の記事も参照。
Linuxのinitプロセスの概要
initデーモンの設定ファイルinittab
起動時や通常稼動時にイベントが発生した際に、どのようなプロセスをどのように起動させているかを指定する。
構文)
id:runlevels:actions:process
○id:識別子
○actions:どのような動作を行うべきかを表す
・respawn
プロセスが終了した場合は常に再起動
・wait
指定したランレベルになった際に一度だけ起動。initは待機。
・once
指定したランレベルになった際に一度だけ起動
・boot
システムブート中に実行される。
・initdefault
システムブート完了時に実行されるランレベルを指定
・sysinit
システムブート中に実行。bootより優先。
・powerwait
電源異常時に実行される。initは終了するまで待機。
・powerfail
電源異常時に実行される。initは終了するまで待機しない。
・powerokwait
電源が回復したことをinitが認識した際に実行される。
・ctrlaltdel
ctrl alt delが押された際に実行される。
※CentOS6.2では、CentOS5とは大きく異なっていて下記1行しか設定されていませんでした。
例)
id:3:initdefault:
構文)
id:runlevels:actions:process
○id:識別子
○actions:どのような動作を行うべきかを表す
・respawn
プロセスが終了した場合は常に再起動
・wait
指定したランレベルになった際に一度だけ起動。initは待機。
・once
指定したランレベルになった際に一度だけ起動
・boot
システムブート中に実行される。
・initdefault
システムブート完了時に実行されるランレベルを指定
・sysinit
システムブート中に実行。bootより優先。
・powerwait
電源異常時に実行される。initは終了するまで待機。
・powerfail
電源異常時に実行される。initは終了するまで待機しない。
・powerokwait
電源が回復したことをinitが認識した際に実行される。
・ctrlaltdel
ctrl alt delが押された際に実行される。
※CentOS6.2では、CentOS5とは大きく異なっていて下記1行しか設定されていませんでした。
例)
id:3:initdefault:
CentOSが起動時に実行されるシステムスクリプト
1)/etc/rc.d/rc.sysinit
・環境パスの設定
・スワッピングの開始
・ファイルシステムのチェック
・システムの初期化に必要とされるすべてのステップを実行。
・詳細は以下の記事参照。
CentOS6のrc.sysinitスクリプトの処理内容の概要
2)/etc/rc.d/rc.local
・ブート時に追加プログラムを実行。
・他のinitディレクトリ内のスクリプト実行後に実行される。
3)/etc/rc.d/init.d/function
・/etc/init.dディレクトリ内の大半のスクリプトによって使用される関数を含む。
・環境パスの設定
・スワッピングの開始
・ファイルシステムのチェック
・システムの初期化に必要とされるすべてのステップを実行。
・詳細は以下の記事参照。
CentOS6のrc.sysinitスクリプトの処理内容の概要
2)/etc/rc.d/rc.local
・ブート時に追加プログラムを実行。
・他のinitディレクトリ内のスクリプト実行後に実行される。
3)/etc/rc.d/init.d/function
・/etc/init.dディレクトリ内の大半のスクリプトによって使用される関数を含む。
デフォルトのランレベルを設定
1)ランレベルとは?
ランレベルとは、状態またはモードのことで、そのランレベルが選択された場合に実行されるサービスによって定義される。
以下7つのランレベルがある。
0:システムの停止に使用。このランレベルは保持され、変更できない。
1:シングルユーザーモードでの実行。このランレベルは保持され、変更できない。
2:デフォルトでは使用されない。自由に定義できる。
3:コマンドラインユーザーインターフェースを使用するフルマルチユーザーモードでの実行に使用。
4:デフォルトでは使用されない。自由に定義できる。
5:グラフィカルユーザーインターフェースを使用するフルマルチユーザーモードでの実行に使用。
6:システムの再起動に使用。このランレベルは保持され、変更できない。
2)どのランレベルで稼働しているかを確認
・runlevelコマンドを使用。
例)
ランレベルとは、状態またはモードのことで、そのランレベルが選択された場合に実行されるサービスによって定義される。
以下7つのランレベルがある。
0:システムの停止に使用。このランレベルは保持され、変更できない。
1:シングルユーザーモードでの実行。このランレベルは保持され、変更できない。
2:デフォルトでは使用されない。自由に定義できる。
3:コマンドラインユーザーインターフェースを使用するフルマルチユーザーモードでの実行に使用。
4:デフォルトでは使用されない。自由に定義できる。
5:グラフィカルユーザーインターフェースを使用するフルマルチユーザーモードでの実行に使用。
6:システムの再起動に使用。このランレベルは保持され、変更できない。
2)どのランレベルで稼働しているかを確認
・runlevelコマンドを使用。
例)
$ runlevel N 3
3)デフォルトのランレベルを設定
/etc/inittabファイルで下記行の数値部分にランレベルを指定する。
例)
id:5:initdefault: