システムのブート

システムの起動

Linuxは以下の様な流れで起動します。

  1. BIOS起動
    コンピュータの電源を入れるとまず初めにBIOSが起動し、ハードウェアの初期化やディスクのブートセクタ(MBR)を読み出しなど、関連機器などの管理をします。
  2. ブートローダ起動
    MBRで指定されたパーティションから、ブートローダ(GRUBやGRUB2)が起動され、カーネルをメモリにロードします。
  3. カーネル起動
    カーネルがメモリの初期化やシステムクロックの設定などを行い、initプロセスを起動します。
  4. initプロセスの起動
    initプロセスがLinuxの初期化のためのスクリプトを実行します。設定されているランレベルに対応したプロセス(デーモン)を起動します。

MBRとは

MBR(Master Boot Record)とは、コンピュータを起動するための必要な情報が書かれている領域です。複数のパーティションに分けられたハードディスクの、先頭セクタ(パーティション外)にあるブートセクタがMBRです。

ブートローダとは

ブートローダとは、MBR内にあるOSを起動させるプログラムです。パーテーション情報を読み込み、OSを起動させます。

カーネルとは

カーネルとは、ディスクやメモリなどの管理、アプリケーションの監視など、OSの中核部分として必要な機能を実装したソフトウェアです。

カーネルにはバージョンがあり、それによってコマンドやディレクトリの配置などが異なります。カーネルのバージョンを確認するには/usr/local/srcに移動して、unameコマンドを実行します。

[centos@localhost ~]$ cd /usr/local/src
[centos@localhost ~]$ uname -r
3.10.0-327.36.3.el7.x86_64

initプロセスとは

initプロセスとは、Linuxシステムで最初に実行され、その他のプロセスたちを起動する役目を果たすプロセスのことです。

initプロセスは、/etc/inittabファイルの設定に従って、SysVinitという仕組みでシステムに必要なサービスを以下の様な順番で起動させます。

  1. initプロセスが、/etc/inittabを読み込む。
  2. initプロセスが、/etc/rc.sysinitスクリプトを実行する。
  3. initプロセスが、/etc/rcスクリプトを実行する。
  4. /etc/rcスクリプトが、/etc/rcディレクトリ配下のスクリプトを実行する

これまでSysVinitという仕組みが使用されてきましたが、このようなサービスがあらかじめ設定された順番に起動させる仕組みでは、1つのサービスの起動に時間がかかると、それ以降に起動するサービスが全て待機状態になるため、最終的なシステムの起動までに時間がかかってしまいます。
そこで、最近のLinuxでは、このような問題を解決したUpstartや、systemdという新しい起動の仕組みを採用しています。

カーネルに渡たすパラメータ設定

先に説明したように、ブートローダを起動後カーネルをメモリにロードするのですが、その際に渡すパラメータをあらかじめ/proc/cmdlineファイルに設定しておくことができます。
catコマンドで/proc/cmdlineファイルを確認してみて下さい。

[root@tk2-248-33681 src]# cat /proc/cmdline

ブート時のイベントログ

Linuxシステムの起動時に、カーネルが出力するメッセージの内容をdmesgコマンドで確認する事ができます。

[root@tk2-248-33681 src]# dmesg

Linuxシステムの起動時のイベントログは/var/log/messages/var/log/boot.log/var/log/dmesgにも出力されています。

[root@tk2-248-33681 src]# cat /var/log/messages

プログラミングの必要性

フェイスブックのザッカーバーグ氏やマイクロソフトのビル・ゲイツ氏などが、プログラミングの必要性について語っています。

おすすめアイテム

「M570」以来、実に7年ぶりのロジクール製トラックボールマウス。プログラミングをするにあたって、一度使うともう元には戻れません!