💽

ブートプロセスとsystemd

2022/04/29に公開

Linux起動の流れ

電源ON
 ↓
BIOS/UEFIが起動
 ↓
ブートローダが起動
 ↓
カーネル起動
 ↓
initramfsのマウント
 ↓
ルートファイルシステムのマウント
 ↓
init/systemdの起動
 ↓
各サービスが起動し、最後にログイン画面が表示される


BIOS:ハードウェアに一番近いファームウェアの一種。
UEFI:BIOSを改良したファームウェア。(最近のシステムで使われている)
BIOS/UEFIはハードウェアの初期化やチェックを行い、ブートデバイス(HDDやSSD等)を選択して、そこに格納されているブートローダを起動する。

ファームウェア

ハードウェアを動作・制御するソフトウェア(プログラム)のこと
デバイス自体に組み込まれており、デバイスが起動する際に実行される

ブートデバイス

一般的にはHDDやSSDなどのストレージデバイスを使用する
コンピュータが起動する際にブートデバイスにインストールされているOSの起動プログラムが読み込まれる
CD、DVD、USBなどもブートデバイスに指定できる

ブートローダ:カーネルを選択して起動するプログラム
多くのディストリビーションではブートローダとしてGRUBを使用する
GRUB:古い
GRUB2:新しいGRUB (最近のシステムで使われている)

カーネル:CPU、メモリ、ストレージなどのリソースを制御する
カーネルが起動されるとinitramfsを起動する

initramfs:ルートファイルシステムをルートディレクトリにマウントする
initramfsがルートシステムをマウントすると、カーネルはルートファイルシステムに入っているsystemdを読み込み起動する。

systemd:システム起動時に最初に生成されるプロセスで、デーモンとしてメモリに常駐し、システム全体を統括する。PID(プロセスID)が必ず1となる。
(centos6以前では、initだった)
systemdはシステム稼働に必要な子プロセスを順に生成していき、システムを初期化する。
設定ファイルにしたがってシステムの初期化とサービスの起動を行う。
systemdの設定ファイルはユニットと呼ばれ、12タイプある。
主なユニットタイプ
serviceユニットはサービスの起動と停止に関する設定が記述されている。
targetはユニットをグループ化したもので、システムの起動状態を制御する設定。
systemdはdefault.targetの設定に従ってシステムを起動する。
default.targetgraphical.target or multi-user.targetへのシンボリックリンクになっている。
graphical.target:システムがGUIモードで起動
multi-user.target:システムがCUIモードで起動
rescue.target:rootユーザのみが利用可能、システムメンテナンス時に利用。


systemdを管理するにはsystemctlコマンドを使う

# アクティブなサービスを表示
systemctl
# インアクティブも含め全てのサービスを表示
systemctl -a
# デフォルトターゲットを確認する
systemctl get-default
# デフォルトターゲットを変更する
systemctl set-dafault multi-user.target
# 稼働中のターゲットをすぐに反映させる
systemctl isolate grahical.target
# シングルユーザーモードにする
systemctl isolate rescue

※シングルユーザーモード:システムメンス時などに一般ユーザーのログインを排除するモード


サービス制御
サービス名.service」の設定に従って各種サービスを起動する
.serviceは省略可能

# 現在のステータスを確認
systemctl status http.service
# サービスを自動起動する設定
systemctl enable http
# サービスを自動起動すしない設定
systemctl disable http
# サービスの自動起動状態を確認
systemctl is-enabled http
# サービスを起動する
systemctl start http
# サービスを停止する
systemctl stop http
# サービスを再起動する
systemctl restart http

システムの停止・再起動
shutdownコマンド:時刻を指定してシステムの停止・再起動を行う。

# システムをすぐに停止する
shutdown -h now
# システムを5分後に再起動する
shutdown -r 5
# システムを10:30に再起動する
shutdown -r 10:30
# 取り消しする
shutdown -c

その他の停止・再起動コマンド

# 停止
poweroff
systemctl poweroff
# 再起動
reboot
systemctl reboot

Discussion