28
20

More than 1 year has passed since last update.

initまとめ(ざっくり)

Last updated at Posted at 2019-09-07

initとは

  • initは他のプロセスを起動させる役割を持っており、全てのプロセスの親である
  • Linuxカーネルの起動後、一番最初に起動される
  • PIDは1が付与される

initの確認

  • PIDが1かどうかの確認
$ ps 1
  PID TTY      STAT   TIME COMMAND
    1 ?        Ss     0:01 /sbin/init maybe-ubiquity
  • 全てのプロセスの親になっているかどうかの確認
$ pstree
systemd─┬─accounts-daemon───2*[{accounts-daemon}]
        ├─atd
        ├─cron
        ├─dbus-daemon
        ├─irqbalance───{irqbalance}
        ├─login───bash
        ├─lvmetad
        ├─lxcfs───2*[{lxcfs}]
        ├─networkd-dispat───{networkd-dispat}
        ├─polkitd───2*[{polkitd}]
        ├─rsyslogd───3*[{rsyslogd}]
        ├─snapd───11*[{snapd}]
        ├─sshd───sshd───sshd───bash───pstree
        ├─systemd───(sd-pam)
        ├─systemd-journal
        ├─systemd-logind
        ├─systemd-network
        ├─systemd-resolve
        ├─systemd-timesyn───{systemd-timesyn}
        ├─systemd-udevd
        └─unattended-upgr───{unattended-upgr}

initの種類

名前 説明
SysVinit ・最初期のinit
・プロセスの起動を並列処理できないといった欠点を持つ
launchd ・2005年に登場
・macOSで採用されている
Upstart ・2006年に登場
・SysVinitと完全な互換性を持ちながらも並列処理に対応していた
・しかし、プロセスが起動する条件を設定ファイルに記述する必要があり、条件が揃うと無条件で起動/停止されるため、不必要な操作が行われる可能性があった
Systemd ・RedHat社のLennart Poettering、Kay Sieversらによって2010年にリリースされた
・起動を高速にし、設定をシンプルにすることを設計思想としている
・批判的な意見もあったが、2011年頃からFedoraを皮切りに主要なLinuxディストリビューションで採用され始めた
・RHEL、CentOS、Debian、Ubuntu、Arch Linux等で採用されている
・Upstartと違い、必要なプロセスのみを起動できる作りになっている
・並列処理が可能
OpenRC ・Gentoo Linuxで採用されているinit

SysVinit/Upstartの起動の流れ

  • SysVinit/Upstartではサービスと呼ばれる単位で処理を管理している
  • 起動の流れとしては、まず/sbin/initがPID=1として実行され、その後、/etc/inittabによって2つのファイルが実行される
  • まず1つ目は、/etc/rc.d/rc.sysvinitによってシステムの初期化(ファイルシステムの整合性チェック、マウント処理、スワップの有効化等)が行われる
  • そして2つ目は、/etc/rc.d/rcによって/etc/init.d/以下に存在するファイルが順番に実行され、サービスが起動される
  • また、SysVinit/Upstartはserviceコマンドによって操作することができる

Systemdの起動の流れ

  • SystemdはUnit(後述)と呼ばれる単位で処理を管理している
  • Systemd環境でも/sbin/initは存在するが、大抵は/lib/systemd/systemdへのシンボリックリンクとなっている
  • 起動の流れとしては、まず/usr/lib/systemd/systemdが起動する
  • その後、Unitの依存関係を検索し、有効化すべきUnitの一覧が作成される
  • 一覧を基に、順序関係に基づいてUnitを順番に有効化する
  • 順序関係を持たないUnitは並列に起動処理が行われる
  • ちなみに設定ファイルは/usr/lib/systemd/system/etc/systemd/systemに配置されている
  • 前者はシステムが用意したデフォルトの設定ファイルで、後者は管理者がカスタマイズするための設定ファイルである
  • 同名の設定ファイルがある場合、/etc/systemd/systemが優先される
  • また、Systemdはsystemctlコマンドで操作することができる

Unitとは

  • /usr/lib/systemd/system/etc/systemd/system以下に配置されているファイルは、拡張子が主に以下の5つのどれかになっており、拡張子によってUnitの種類が判別される
Unit 説明
service サービス(デーモン)
target ターゲット(複数のUnitをグループ化したもの)
mount マウントポイント
swap スワップ領域
device デバイス

journald

  • journaldはSystemd環境で標準で提供されているログの管理サービスで、システムやサービスのログを収集している
  • また、Linuxではrsyslogというログの管理サービスが存在するが、これはjournaldが必要に応じてrsyslogに転送している
  • また、journaldは、journalctlコマンドで操作することができる
28
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
28
20