
第10回 Linux起動の仕組みを理解しよう[init/inittab編]
カーネルが呼び出されてからログインプロンプトが表示されるまでの間に、一体どのような処理が行われているのか。これを理解するには、この部分の全般をつかさどるinitとその設定ファイルであるinittabがカギとなる。
2002/4/27
Linuxが起動するまでの流れや、起動に際して使用されるファイルについて知っておくことは有益でしょう。そこで、今回と次回の2回に分けて、Linuxの起動の仕組みを紹介します。説明の都合上、用語の説明が多少前後するところもありますがご了承ください。
Linux起動の流れ
まず、Linuxが起動するまでの大まかな流れを概観しておきましょう。
マシンの電源をオンにすると、BIOSが起動して制御をハードディスクのMBRなどに移管します。Linuxの場合、MBRに書き込まれているブートローダ(LILOやGRUB)を起動し、このブートローダからカーネルを呼び出すのが一般的です。今回、BIOSからカーネルの起動までには深入りしません。とにかく、何らかの方法でカーネルが動き出した後からを追うことにします。
カーネルが起動された後の流れを挙げると、
- 各種デバイスなどの初期化
- initプログラムなどの起動
- ブート時の処理
- rcスクリプトの実行
といった処理が行われています。
■デバイスなどの初期化
これは、カーネルに組み込まれた、あるいはモジュールとしてロードしたデバイスドライバを使って行います。各種デバイスの中には、電源投入直後の動作が不定と決まっているものがあります。いずれにしても、実際に利用する方法に合うように設定を変えなければなりません。例えば、シリアルポートなら通信速度、画面ならば表示モードといった部分です。
■initプログラムなどの起動
Linux上のプログラムとして最初に実行されるのは、initプログラムです(編注)。initプロセスは、psコマンドで必ずPIDが「1」と表示されます。
$ ps ax |
| psコマンド実行例。initがPID 1として表示されているのが分かる |
Linux上で動くすべてのプログラムは、このinitプログラムから実行されます。ユーザーが実行するプログラムはシェルから実行されますが、そのシェルも元をたどればinitから実行されたプログラムです。そのため、親子関係になぞらえて「initはすべてのプロセスの親である」と表現したりします。
| 編注:厳密には、initの前にPID 0の「アイドルプロセス」が起動される。 |
| コラム 「悪魔」ではない「デーモン」 |
| デーモンといっても、悪魔(demon)ではなく守護神(daemon)なので、本当は「ダイモン」と発音すべきなのでしょうが、慣例的にデーモンと発音するようです。 |
initに続いて、キャッシュマネージャやスワップを制御するプログラム、ハードディスクへのデータ書き込みを制御するプログラムなどが実行されます。こうした、縁の下の力持ち的に各種のサービスを提供するプログラムを「デーモン」と呼びます。
initは何をしているのか?
では、initがプログラムを実行する方法を見ていきましょう。
■initの動作を定義するinittab
initがどのような処理をしているのかは、/etc/inittabを見れば分かります。このファイルは、initが行うべき処理を定義しているもので、各種confファイルのようなものだと考えればよいでしょう。
/etc/inittabの各行は、
id:runlevel:action:process |
という書式になっています。各部の意味は次のとおりです。
id
エントリの識別子。ユニークな文字列(1〜4文字)でなければならない。
runlevel
ランレベルの指定で、1から6までの数字が使える。「2345」など、複数を同時に指定できる。省略するとデフォルトランレベルとなる。
action
プロセスの起動あるいは終了時の動作。actionの内容は表を参照。
|
action
|
意味
|
|
| respawn | processで指定したプロセスを起動し、終了したら再起動する | |
| wait | processで指定したプロセスを起動し、終了を待つ | |
| once | 指定したランレベルへの移行後に1度だけ実行 | |
| initdefault | デフォルトランレベルの指定 | |
| sysinit | ブート時に実行するプロセス | |
| powerfail | UPSが電源切断を検出したときに実行するプロセス | |
| powerokwait | UPSが電源オンを検出したときに実行するプロセス | |
| ctrlaltdel | [Ctrl]+[Alt]+[Delete]キーが押された場合 | |
| 表 指定可能なactionの一部 | ||
process
起動するプログラム。
構文が分かると、/etc/inittabの各行の意味も理解できるでしょう。
# デフォルトランレベル(ランレベル3を指定) |
| /etc/inittabの例(環境やディストリビューションによって詳細は異なる) |
/etc/inittabには、initの実行から各種デーモンの起動を経て、ログインプロンプトが表示されるまでの処理が記述されているのが分かります。詳細は後述するとして、大まかな流れを挙げると、
- ブート時の処理を行うスクリプトの実行
- ランレベルに応じたスクリプトの実行
actionにwaitが指定されているので、スクリプトの実行が終了するまで待つ
- 端末制御
ログインプロンプトを出す。actionにrespawnが指定されているので、終了(ログオフ)された場合は再実行(ログインプロンプトを出力)する
といったことを行っています。
■ブート時の処理
Red Hat Linux 7.2では、ブート時に/etc/rc.d/rc.sysinitというスクリプトを実行するようになっています。/etc/inittabの、
# System initialization. |
という行で定義されています。ざっとその内容を見ると、
- ネットワークの初期化
- ホスト名の設定
- Welcomeバナーの表示
- /procファイルシステムのマウント
- カーネルパラメータの設定
- クロックの設定
- keymapの読み込み
- システムフォントの読み込み
- スワップの有効化
- USBの初期化
- 必要に応じてfsckの実行
- quotaの有効化
- ハードディスクパラメータの設定
- カーネルモジュールの読み込み
- RAIDデバイスの組み込み
- ファイルシステムのマウント
といった処理が行われています(編注)。これらの処理を行った後、指定されたランレベルに対応したrcスクリプト群を実行して、ログインプロンプトを出すことになります。
| 編注:ほかにも多くの処理が行われている。詳しくは/etc/rc.d/rc.sysinitを参照。 |
■起動後の仕事
ブート完了後にinitが行うことは、親プロセスを持たなくなったプロセスと端末の制御があります。
プロセスは自分自身が_exitシステムコールを実行し、親プロセスがwait系システムコールを実行することで初めて終了します。ところが、何かの拍子に親プロセスが止まってしまったりすると、_exitしたまま永遠にwaitを待つことになります。こうしたプロセスを探して、本来の親プロセスに代わってwait系システムコールを実行するわけです。
端末制御は、/etc/inittabの記述に従って、各端末(仮想端末を含む)に標準入出力やエラー出力を割り当て、gettyと総称されるプログラムを起動します。このgetty(Red Hat Linux 7.2ではmingetty)がログインプロンプトを出し、ここでようやくユーザーがログインできるようになるわけです。
|
1/2
|
| Index | |
| Windowsユーザーに教えるLinuxの常識 | |
| Linux起動の流れ デバイスなどの初期化 initプログラムなどの起動 initは何をしているのか? initの動作を定義するinittab ブート時の処理 起動後の仕事 |
|
| ランレベルによる動作状態の変更 シングルユーザーモード マルチユーザーモード |
|
| 連載 Windowsユーザーに教える Linuxの常識 |
| Linux Squareフォーラム Linux/システム学習関連記事 |
| 連載:Windowsユーザーに教えるLinuxの常識(全12回) Windowsのセオリーが通用しないLinux。Linux初心者向けに、LinuxというOSの考え方/常識をゼロから伝授! |
|
| 連載:LFSで作って学ぶLinuxの仕組み(全4回) 管理者(root)は、何をしなければならないのか? 管理に際して検討すべきことは? 管理のための技術とは? など、駆け出し管理者のための考え方や方法論を検討する |
|
| 連載:Linux管理者への道(全8回) 「Linux From Scratch」というシンプルなLinuxをインストール&環境構築する作業を通して、LinuxがOSとして機能するための仕組みや設定を見直そう |
|
| Linux Squareフォーラム全記事インデックス |
|
ホワイトペーパー(TechTargetジャパン)
- natテーブルを利用したLinuxルータの作成 (2010/2/9)
natテーブルを用い、市販のブロードバンドルータと同等かそれ以上の機能を備える「Linuxルータ」を作成してみましょう - Web監視機能を賢く利用する (2010/2/2)
プロセスの稼働確認だけでは、サービスが正常に提供できているか分からないことも。そこで使いたいのがWeb監視です - ものいわぬOpenLDAPサーバのログ管理 (2010/1/20)
不満をいわないコンピュータが相手だからこそ、常にログが確認できる状態を整備することが重要になります - ネットワークアクセス権も放棄せよ (2010/1/12)
新しいセキュリティ機構「disablenetwork」を提案する1通のメールから始まった議論が、LSMも巻き込む話へと拡大しました
|
|
スキルアップ/キャリアアップ(JOB@IT)
スポンサーからのお知らせ
- - PR -
- - PR -
お勧め求人情報

**先週の人気講座ランキング**
〜CCNA編〜
| ◆ | 企業の仮想化に足りない“発想”とは? 仮想化運用管理のキモは意外なところに! New! |
| ◆ | 操作もマニュアルも分かりやすい! ユーザー視点で開発されたPC管理ツール New! |
| ◆ | 仮想化すればコストは削減できるか? 仮想化に必要な「3つの視点」を解説する |

| ◆ | セキュリティを知り尽くす上野氏が登壇! @ITメールソリューションLive! in Tokyo |
| ◆ | 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |
| ◆ | 世界に通用するストレージの作り方とは? 製品に込めた思いを富士通の開発者に聞く |

| ◆ | OSSで手間も時間も、障害も減った―― 「マピオンの事例」オープンソース活用法 |
| ◆ | 「ノートPCの持ち出し禁止」で大丈夫? 情報漏えいを防ぐ管理手法とインフラは? |
| ◆ | 1日の処理を1秒に――MySQLの達人が語る 「コスト削減」できるチューニング |

| ◆ | ドキュメント作成を自動化して、SEの作業 効率を大幅アップ! Visio 2007の魅力 |
| ◆ | 急速に広がるHyper-Vでのサーバ仮想化 そのベストプラクティスをデルが解説 |
| ◆ | @IT主催セミナーで語られた、「担当者に 求められるセキュリティ対策」をレポート |

| ◆ | @IT「Windows 7」 特設サイトオープン! 最新情報・移行ノウハウを公開しています |






