システムの起動順序
1. BIOS / UEFI
2. Boot Loader
3. Kernel
4. SysVinit / Upstart / systemd
BIOS / UEFI
BIOS (Basic Input Output System)
・ 電源起動時、記憶装置(HDD)等の機器に関して最低限の認識を行う
・ 基本的なハードウェアの制御。起動デバイスの順序を設定
・ 起動する順にデバイスの先頭セクタにあるMBRを読み込み、ブートローダをロードし制御を移す。
UEFI (Unified Extensible Firmware Interface)
・ 基本的なハードウェアの制御を行う。起動時間と再開時間が短縮される。
・ CPUに依存しないアーキテクチャとドライバを提供する。セキュリティ機能強化。
・ 3TB以上のHDDからの起動をサポートする
・ 最初にアクセスされる領域であるESPは /boot/efi にマウントされる
・ ブートローダをロードし制御を移す。
Boot Loader
● カーネルと初期RAMディスクイメージをメモリにロードし、カーネルに制御を渡す。
● Linuxの代表的なブートローダ: LILO と GRUB
Kernel
● メモリーの初期化、システムクロックの設定
● 仮のルートファイルシステム(initramfs:初期RAMディスク)をマウント
● RAMディスクに組み込まれたデバイスドライバーを使ってデバイスへアクセス
● ルートファイルシステムのマウント。カーネルと初期RAMディスク(initramfs)の内容をメモリ上に展開
● init / systemdを実行
● コマンド
dmesg Linuxカーネルが起動時に出力したメッセージを表示
・ dmesg –clear バッファーをクリアする
・ dmesg -k メッセージを表示する
modprobe 依存関係を解決してモジュールをカーネルに組み込んだり、取り外したりします。
modprobeの設定ファイル /etc/modprobe.d/myconfig.conf
options | 各カーネルモジュールのデフォルトパラメータを指定する |
alias | カーネルモジュールに別名をつける |
install | 特定のカーネルモジュールのロード時に実行されるコマンドを指定する |
remove | 特定のカーネルモジュールのアンロード時に実行されるコマンドを指定する |
blacklist | ロードしたくないカーネルモジュールを指定する |
lsmod Linuxカーネルのモジュールリストを表示するコマンド
init / telinit プロセス制御・ランレベルを変更するコマンド
SysVinit / Upstart / systemd
● SysVinit 順次実行型。起動に時間がかかる
● Upstart イベント駆動型。並列起動可。
● systemd ユニット単位で処理。並列起動可。
SysVinit
● プロセスをPIDによって管理。 順次実行型。起動に時間がかかる
● 最初に起動されるプロセスは init
・ /etc/inittab を読み込み、順に実行
・システム初期化スクリプトを実行 ー> /etc/rc.sysinitスクリプト
・ /etc/rcスクリプトを実行する
・ /etc/rc(ランレベル).d ディレクトリ配下のスクリプトを実行する
・スクリプトのファイル名
例)K01smartd
1文字目:S(Start: サービスを起動)、K(Kill: サービスを停止)
数字:実行優先順位。若番のものが先に実行される
サービス名:任意の名前をつける
・ランレベル
ランレベル | 内容 |
---|---|
0 | システム停止 |
1(s/S) | シングルユーザモード |
2 | マルチユーザモード(ネット接続無し) |
3 | マルチユーザモード(ネット接続有り) |
4 | (マルチユーザモード) |
5 | マルチユーザモード |
6 | システム再起動 |
・ デフォルトランレベルの設定
・ /etc/inittab に記述。
・ 設定を変更したい時はこれを書き換える
・ランレベル関係コマンド
説明 | コマンド |
一つ前と現在のランレベルを表示 | runlevel runlevel -> N 3 |
ランレベルの切り替え | init / telinit init 4 telinit 5 |
システムを再起動させずに即座に反映させる | init / telinit init q telinit q |
Upstart
● SysVinitの改良番。SysVinitと同様初めにinitプロセスが実行
● プロセスを並列で起動できる。起動時間を短縮できる
● /etc/event.d or /etc/init にジョブ定義ファイルがある。
● イベント駆動型。initデーモンがイベントを検知すると、イベントに対応するジョブを実行
・ initプロセス開始
・ 各ジョブが待機状態になる(指定されたイベントの実行を待つ)
・ システム起動イベントが発行される
・ イベントに対応したジョブが、並列で実行される。
systemd
● Upstartと同じく、各プロセス(ユニット)を並列起動する仕組
● systemdはUpstartと比べて
・ より無駄を減らして高速起動を可能
・ SysVinitからの移行に便利な互換モードがある
・ システム管理の共通化(異なるディストリビューションでも同様の操作が可能)
・ その他多数の追加機能
● cgroupsというLinuxカーネルの機能によってプロセスのリソースを管理
● 以下のデーモンプロセスが連携して動作
種類 | 意味 |
systemd | systemdの本体となるプロセス。 |
systemd-journald | 各サービスが出力するログを扱う |
systemd-logind | システムへのログイン、起動停止、電源などを管理 |
systemd-udevd | udevの代わり。デバイスの動的変更検出 |
● システム起動のための処理をUnitと言う単位で管理
種類 | 意味 |
target | 複数のユニットをグループ化する時に使用する |
service | プロセスの開始・停止・自動起動といった管理を行う |
device | systemdで管理するデバイスを定義する |
mount | ファイルシステムのマウントを行う |
automount | 自動的にマウントされるマウントポイントを定義する |
socket | 特定のソケットをListen(監視)する |
swap | スワップ領域を有効にする |
path | 指定のファイルが作成されると、指定されたサービスを起動する |
timer | 対応するserviceユニットの実行を管理する。cron の代替機能。 |
● 実行順序
・ systemdプロセス開始
・default.targetを処理(/etc/systemd/system/default.target:graphical.targetのシンボリックリンク)
・リンク先のtargetを解析(/etc/systemd/system/graphical.targetなど)
・解析結果により、必要なサービスを起動する(依存関係順に従いながら並列に)
● default.targetの対象。/lib/systemd/system 配下に格納
ランレベル | ターゲットユニット | 詳細 |
0 | runlevel0.target , poweroff.target | システムをシャットダウンし、電源を切る |
1 | runlevel1.target , rescue.target | レスキューシェル (シングルユーザーシステム) |
2,3,4 | runlevel2.target , multi-user.target | 非グラフィカルなマルチユーザーシステム |
5 | runlevel5.target , graphical.target | グラフィカルなマルチユーザーシステム |
6 | runlevel6.target , reboot.target | システムをシャットダウンして再起動 |
● サービスの管理
・ systemctlコマンドを使ってサービスを管理
・ コマンド一覧
コマンド | 説明 |
list-units | 全てのユニットとその状態を表示する。 |
start | 指定したユニットを起動する。 |
stop | 指定したユニットを停止する。 |
reload | サービスの設定ファイルを再読み込みする。 |
restart | ユニットを再起動する。 |
is-active | 指定したユニットが起動しているか確認する。 |
status | 指定したユニットの実行状況を表示する。 |
enable | サービス自動起動有効 |
disable | サービス自動起動無効 |
get-default | 「default.target」のリンク先を表示する |
set-default | 「default.target」のリンク先を設定する。 |
poweroff | システムを再起動する。 |
reboot | 「default.target」のリンク先を設定する。 |
その他
● /dev
・ デバイスにアクセスするために使用する仮想ファイルの格納場所
● udev
・ Linuxカーネル用のデバイス管理ツール
・ /dev ディレクトリにあるデバイスノードの管理
・ライブラリ「libudev」とデーモン「udevd」、そして管理コマンド「udevadm」などからなります
・udevdデーモンがカーネルの内部情報を監視、
・カーネルが新しいデバイスを検知し、そのデバイスに応じて適切なデバイスファイルを動的に作成。
・udevの挙動は、/etc/udev/rules.d/ディレクトリ配下の.rulesで終わるファイル内に記述されている
● 汎用のクラスドライバ
デバイスクラス | 対応する機器 |
HID (Human Interface Device) | キーボード、マウス、ジョイスティック |
マスストレージデバイス (Mass Storage Class) | USBメモリ、HDDなど |
オーディオ (Audio Class) | マイク、スピーカーなど |
コミュニケーション (ACM Communication Device Class) | モデム、Ethernetアダプタなど |
ワイヤレスコントローラー | Wi-Fiアダプタ、Bluetoothアダプタなど |
● /proc
システムをコントロールするために使われる。システムのさまざまな情報がここに格納されている
メモリの中に作られるファイルシステム。「仮想ファイル」
ファイル名 | 説明 |
/proc/cpuinfo | CPU情報 |
/proc/interrupts | IRQ情報 |
/proc/meminfo | メモリの情報 |
/proc/ioports | I/Oポートの情報 |
/proc/bus/usb/devices | USBデバイス情報 |
/proc/bus/pci/devices | PCIデバイス情報 |
/proc/scsi/scsi | SCSIデバイス情報 |
● /var/log
syslogをはじめ様々なログファイルが格納
・/var/log/messages … システムで動作する各種アプリケーションのログ。
Ubuntuなど一部のディストリビューションでは「/var/log/syslog」
・/var/log/boot.log … OS起動時のログ
・/var/log/secure … 認証に関するログ
● D-Bus(Desktop Bus) プログラム同士が情報を伝達するプロセス間通信機構のひとつ
● 大容量記憶装置の特徴
・容量あたりのコストパフォーマンスが高いのはHDDである
・SSDとUSBフラッシュドライブは、HDDのような機械的な故障が起きない
・SSDはSATAインターフェース以上の速度でアクセスできる
・OSの起動ディスクとして使用できる
● shutdown [オプション] 時間 [メッセージ] ー> Linuxの終了
● wall [オプション] ー> ログインしている全てのユーザーに一斉にメッセージを送信