linuxOSのコンピュータ起動処理
コンピュータ起動処理の流れ
電源ON
↓
BIOS起動
↓
ハードウェアチェック、初期化(BIOS)
↓
boot loader起動
↓
起動デバイスからカーネルをメモリ上にロード(boot loader)
↓
メモリ初期化、ルートファイルシステムマウント、デバイスドライバ設定(カーネル)
↓
init(旧来OS)/systemd(最近のOSの主流)プロセス起動(カーネル)
↓
ログインプロンプト起動
起動時のログ出力
システム起動時のログ参照方法は以下。
-
dmesg
コマンド -
var/log/messages
,var/log/dmesg
,var/log/boot.log
の内容を参照
BIOSについて
- ハードウェアの制御を行う。
- 実体はマザーボード、拡張カードのフラッシュROMなどに書き込まれているプログラム。
デバイスドライバについて
- 接続されたデバイスを制御するために必要な制御プログラム。カーネルモジュールに標準で含まれているものがシステム起動時には設定される。
- ロードされているカーネルモジュールを確認するには
lsmod
コマンドを使う。もしくは/proc/modules
ファイルの内容を参照する。 - アプリケーションからデバイスにアクセスするにはデバイスファイルも必要。
/dev
ディレクトリに、アプリケーションから扱うデバイスを抽象化したデバイスファイルを作成する必要がある。- 手動でデバイスファイルを作成する必要はなく、
udev
という仕組みによりカーネルがデバイス追加を検知すると/sys
ディレクトリにデバイス情報を作成し、それを参照して/dev
ディレクトリにデバイスファイルを作成する。
- 手動でデバイスファイルを作成する必要はなく、
boot loaderについて
- 主要なboot loaderは
GRUB
- 設定ファイルは
/boot/grub/grub.conf
,/boot/grub/menu.lst
- 設定ファイルは
- ハードディスクなどのストレージからOSを読み込んで起動するプログラム
- 多数のファイルシステムを認識可能
- シェル機能が搭載されているため、コマンドによる管理が可能
systemdプロセス起動処理について
systemdプロセスを起動するのが最近のOSの主流のため、その起動プロセスのみ記載。
systemdでは以下のプロセスが連携して動作する。
プロセス | 説明 |
---|---|
systemd | メインプロセス |
systemd-journald | ログ管理プロセス |
systemd-logind | ログイン処理プロセス |
systemd-udevd | デバイス動的検知プロセス |
systemdではUnit
という処理単位で起動処理が行われる。
以下がUnit
の拡張子の種類。
拡張子 | 説明 |
---|---|
service | 各種サービスを表す |
device | 各種デバイスを表す |
mount | ファイルシステムのマウントを行う |
swap | swap領域を有効にする |
target | 複数のUnitをグループ化したもの |
- systemdはシステム起動時に
default.target
というUnitを実行する。 -
default.target
の設定ファイルは/etc/systemd/system
ディレクトリにある。
実際にcentos
のdockerコンテナを起動して、default.target
の実体を見てみた。
[root@7ed61ce4c547 system]# cd /etc/systemd/system
[root@7ed61ce4c547 system]# ls -la
total 24
drwxr-xr-x 6 root root 4096 Dec 5 01:37 .
drwxr-xr-x 4 root root 4096 Dec 5 01:36 ..
lrwxrwxrwx 1 root root 37 Dec 5 01:37 default.target -> /lib/systemd/system/multi-user.target
drwxr-xr-x 2 root root 4096 Dec 5 01:36 default.target.wants
drwxr-xr-x 2 root root 4096 Dec 5 01:36 getty.target.wants
drwxr-xr-x 2 root root 4096 Dec 5 01:37 multi-user.target.wants
drwxr-xr-x 2 root root 4096 Dec 5 01:36 system-update.target.wants
[root@7ed61ce4c547 system]# cat /lib/systemd/system/multi-user.target
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
[Unit]
Description=Multi-User System
Documentation=man:systemd.special(7)
Requires=basic.target
Conflicts=rescue.service rescue.target
After=basic.target rescue.service rescue.target
AllowIsolate=yes
default.target
は/lib/systemd/system/multi-user.target
へのシンボリックリンクになっている。
multi-user.target
を覗いてみると、また別のtargetを呼び出している。
このmulti-user.target
はcentos6(systemdではなくinitで起動処理を行う)
で言うところのランレベル3に該当するtarget
。
initプロセスでは起動時処理のランレベルを設定することで起動処理を切り替えていたが、systemdプロセスではtarget
を設定することで起動処理を切り替える。
ランレベル | target |
---|---|
0 | poweroff.target |
1 | rescue.target |
2,3,4 | multi-user.target |
5 | graphical.target |
6 | reboot.target |
現在のsystemdプロセスのtarget
は何なのか確認
[root@7ed61ce4c547 system]# systemctl get-default
multi-user.target
これをgraphical.target
に切り替えてOS再起動すると、GUIでのログイン画面が起動されるはず。
root@7ed61ce4c547 system]# systemctl set-default graphical.target
Removed /etc/systemd/system/default.target.
Created symlink /etc/systemd/system/default.target, pointing to /usr/lib/systemd/system/graphical.target.
[root@7ed61ce4c547 system]# systemctl get-default
graphical.target
ただDockerコンテナだとOSのreboot
が実行できなかったので実際にGUIログイン画面は起動できなかった。
Author And Source
この問題について(linuxOSのコンピュータ起動処理), 我々は、より多くの情報をここで見つけました https://qiita.com/soichiro0311/items/91a3e554b103316e93bc著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .