目次
このトピックについて
このトピックでも、えるすたのLinux Essentialsオンラインテキストで学習する内容が含まれます。
Linux Essentialsテキストの、
5.3 Linuxの起動とシャットダウン 11.2 ログの管理 ※クリックすると新しいタブで開きます。
については、抑えておきましょう!
LPIC-1では、これに付け加えて覚える知識と、新たに覚えなければならない知識があります。
ここでは、そのポイントをご紹介します。
ブートシーケンス
ちょっと聞き慣れない言葉かもしれませんが、簡単に言うと「PCの電源投入後からLinux OSが起動するまでの流れのことです。」詳細に把握する必要はありませんが、大体の流れを把握しておく必要があります。流れを把握しておくと、障害が発生してOSが起動しなくなったときにどこに問題があるか、問題の切り分けができるようになります。
とはいえ・・・最近のLinux OSは品質が良いので、よほどのことがない限りあんまり気にしなくなりましたけど。。
LinuxがインストールされたPCを起動させると左図のような流れで起動します。
① BIOS(またはUEFI)が起動し、ハードウェアのチェックと初期化を実施。
② BIOS/UEFIがブートローダを見つけて処理を渡す。
③ ブートローダはカーネルをメモリにロード。
④ カーネルがHDD内のinitを見つけてプロセスを起動。
init とは、Linuxが最初に実行するプログラムです。init は他のプロセスを起動するためのプログラムで、すべてのプロセスの親になります。
ただし、④の initを起動方法が図の通り3種類あります。
initプロセスは、従来SysVinit(System five init)という仕組みで動作していましたが、Upstartを経て、現在のディストリビューションではSystemdが主流になっています。それぞれの特徴を覚えておきましょう。
ちなみに、ブートローダは厳密に言うとプライマリブートローダ、セカンダリブートローダがあり2段階のブートローダを経て起動します。BIOSはWindowsやLinuxOSなどの複雑なシステムを起動することを想定していなかったため、苦肉の策としてセカンダリブートローダを使って無理やり起動しています。UEFIでは、ESPという領域を使うことでこの問題を解消しており、処理が減った分起動も速くなってます。
SysVinit
従来から使用されてきた仕組みです。/etc/inittabを読み込み、設定されたランレベルのディレクトリ(/etc/rc[0-6].d)内に置かれているスクリプトを順番に読み込むことで起動します。
読み込む順番はファイル名で決まっていて、以下のような命名規則があります。
「S(Start)」で始まるものは起動するサービス、「K(Kill)」で始まるものは停止するサービスです。これを次に書かれている数字の順序に起動します。
なお、これらのファイルはシンボリックリンクファイルで、各サービスの起動スクリプトの本体は、/etc/rc.d/init.dに格納されています。
Upstart
イベント駆動型と呼ばれる起動方法です。スクリプトを順番に処理していくSysVinitに対して、サービスを並列起動させることで、起動速度が向上しています。
具体的には、ジョブを起動させていく方法です。
/etc/init配下にジョブ定義ファイルを作成し、最初に発動させたイベントをトリガーに連鎖的に並列起動します。
ただし、サービスの中には条件が揃うと依存関係によって不要なプロセスが起動してしまう欠点があり、そのあたりの考慮してジョブを定義しなければなりません。
Systemd
現在主流となっている起動方法です。Upstartと同様にプロセスを並列起動させることができます。ただし、Upstartと異なり、必要なプロセスのみを起動します。
Upstartではシステムに不要なプロセスまで起動してしまう欠点がありましたが、Systemdでは各種サービスの依存関係や順序関係を処理することができるため、必要に応じて起動することが可能です。
これにより、無駄なプロセスを起動することなく、必要なプロセスだけを起動させることができ、高速に起動することができます。
起動時のログの参照
起動に関連するログについても覚えておく必要があります。
/var/log/messages /var/log/syslog | Linuxで動作するサービスやデーモンなどアプリケーションからのメッセージが記録されるログファイルです。何かあったら最初に確認するログです。 |
/var/log/dmesg | カーネルのメッセージを記録するファイルです。 リングバッファと呼ばれるメモリ上に出力され、「dmesg」コマンドでファイルに書き出します。 |
/var/log/boot.log | OS(サービス)起動時のログが記録されます。 |
/var/log/messages と /var/log/syslog は同じものです。Redhat系ディストリビューションでは、/var/log/messages が使われており、Debian系ディストリビューションでは /var/log/syslog が使われています。
journalctlコマンド
systemd環境では、journalctlコマンドを使ってログを確認することもできます。
# journalctl -k
# journalctl --dmesg
journalctlコマンドを、-k または –dmesg オプションで実行すると、dmesgコマンドを実行したときと同じログを確認することができます。
ということで、このトピックのポイントは以上です。
このトピックは、Linux Essentialsには出てこなかった内容がそこそこ多いかもしれませんね。ブートシーケンスや dmesg などは、普段ほとんど意識することはありませんが、起動系のトラブルが発生すると結構必要な知識になってきます。覚えておいて損はないですよ!