Man page - bootup(7)

Packages contains this manual

Available languages:

en zh_TW zh_CN de

Manual

BOOTUP

NAME
描 述
常 規 啟 動 流 程
INITRD(INITIAL RAM DISK) 啟 動 流 程
關 機 流 程
參 見


NAME

bootup - 系 統 啟 動 流 程

描 述

在 系 統 啟 動 過 程 中 要 涉 及 多 個 不 同 的 元 件 。 按 下 電 源 按 鈕 後 , 首 先 BIOS/UEFI做 最 基 本 的 硬 體 自 檢 與 初 始 化 , 然 後 載 入 預 設 /手 動 選 擇 的 磁 碟 /網 路 上 的 引 導 載 入 器 (例 如 GRUB2), 引 導 載 入 器 進 一 步 從 磁 碟 /網 路 上 載 入 作 業 系 統 核 心 (例 如 Linux)。 對 於 Linux來 說 , 核 心 將 會 (可 選 的 )解 壓 一 個 initrd(initial RAM disk)映 象 (可 以 用 dracut (8) 之 類 的 工 具 生 成 ), 並 執 行 由 "rdinit="核 心 引 導 選 項 指 定 的 init程 式 (例 如 systemd (1)) 以 尋 找 並 掛 載 根 檔 案 系 統 。 完 成 根 檔 案 系 統 的 掛 載 之 後 , 核 心 啟 動 由 "init="核 心 引 導 選 項 指 定 的 init程 式 (例 如 systemd (1)) 以 接 管 系 統 的 控 制 權 。 該 init程 式 將 會 負 責 檢 測 所 有 其 他 的 硬 體 裝 置 、 掛 載 必 要 的 檔 案 系 統 、 啟 動 所 有 必 要 的 服 務 , 等 等 。

關 機 時 , init程 式 將 會 停 止 所 有 服 務 、 解 除 安 裝 所 有 檔 案 系 統 、 (可 選 的 )返 回 initrd環 境 解 除 安 裝 根 檔 案 系 統 , 最 後 關 閉 電 源 。

其 他 有 關 係 統 啟 動 流 程 的 資 訊 可 以 參 考 boot (7) 手 冊 。

常 規 啟 動 流 程

當 成 功 掛 載 了 "root="核 心 引 導 選 項 指 定 的 根 檔 案 系 統 之 後 , 核 心 將 啟 動 由 "init="核 心 引 導 選 項 指 定 的 init程 式 , 從 這 個 時 間 點 開 始 , 即 進 入 了 "常 規 啟 動 流 程 ": 檢 測 硬 體 裝 置 並 載 入 驅 動 、 掛 載 必 要 的 檔 案 系 統 、 啟 動 所 有 必 要 的 服 務 , 等 等 。 對 於 systemd (1) 系 統 來 說 , 上 述 "init程 式 "就 是 systemd 程 序 , 而 整 個 "常 規 啟 動 流 程 "也 以 幾 個 特 殊 的 target 單 元 (詳 見 systemd.target (5)) 作 為 節 點 , 被 劃 分 為 幾 個 階 段 性 步 驟 。 在 每 個 階 段 性 步 驟 內 部 , 任 務 是 高 度 並 行 的 , 所 以 無 法 準 確 預 測 同 一 階 段 內 單 元 的 先 後 順 序 , 但 是 不 同 階 段 之 間 的 先 後 順 序 總 是 固 定 的 。

當 啟 動 系 統 時 , systemd 將 會 以 default.target 為 啟 動 目 標 , 藉 助 單 元 之 間 環 環 相 扣 的 依 賴 關 係 , 即 可 完 成 "常 規 啟 動 流 程 "。 default.target 通 常 只 是 一 個 指 向 graphical.target(圖 形 介 面 ) 或 multi-user.target(文 字 控 制 檯 ) 的 軟 連 線 。 為 了 強 制 啟 動 流 程 的 規 範 性 以 及 提 高 單 元 的 並 行 性 , 預 先 定 義 了 一 些 具 有 特 定 含 義 的 target 單 元 。 詳 見 systemd.special (7) 手 冊 。

下 面 的 圖 表 解 釋 了 這 些 具 有 特 定 含 義 的 target 單 元 之 間 的 依 賴 關 係 以 及 各 自 在 啟 動 流 程 中 的 位 置 。 圖 中 的 箭 頭 表 示 了 單 元 之 間 的 依 賴 關 係 與 先 後 順 序 , 整 個 圖 表 按 照 自 上 而 下 的 時 間 順 序 執 行 。

local-fs-pre.target
|
v
(各 個 mounts 與 (各 個 swap (各 個 加 密 塊 裝 置
fsck services...) devices...) devices...) (各 個 底 層 服 務 : (各 個 底 層 虛 擬
| | | udevd, tmpfiles, 檔 案 系 統 mounts:
v v v random seed, mqueue, configfs,
local-fs.target swap.target cryptsetup.target sysctl, ...) debugfs, ...)
| | | | |
\__________________|_________________ | ___________________|____________________/
\|/
v
sysinit.target
|
____________________________________/|\________________________________________
/ | | | \
| | | | |
v v | v v
(各 個 (各 個 | (各 個 rescue.service
timers...) paths...) | sockets...) |
| | | | v
v v | v rescue.target
timers.target paths.target | sockets.target
. | | |
. \_________________ | ___________________/
.................................... \|/
v
basic.target
|
____________________________________/| emergency.service
/ | | |
| | | v
v v v emergency.target
display- (圖 形 介 面 所 必 需 (各 個 系 統 服 務 )
manager.service 的 各 個 系 統 服 務 ) |
| | |
| | v
| | multi-user.target
| | |
\_________________ | _________________/
\|/
v
graphical.target

斜 體 標 識 的 目 標 單 元 經 常 被 用 作 啟 動 目 標 。 有 兩 種 方 法 可 以 指 定 啟 動 目 標 : (1)使 用 systemd.unit= 核 心 引 導 選 項 (參 見 systemd (1)); (2)使 用 default.target 軟 連 線 。

因 為 timers.target 以 非 同 步 方 式 包 含 在 basic.target 中 , 所 以 timer 單 元 可 以 依 賴 於 在 basic.target 之 後 才 啟 動 的 服 務 。

INITRD(INITIAL RAM DISK) 啟 動 流 程

在 initrd內 部 , 也 可 以 將 systemd 用 作 init程 式 (由 "rdinit="核 心 引 導 選 項 指 定 )。

此 時 initrd.target 將 是 預 設 目 標 。 initrd內 部 啟 動 流 程 的 上 半 部 分 與 前 一 小 節 basic.target 之 前 的 部 分 完 全 相 同 。 隨 後 的 啟 動 流 程 將 以 initrd.target 為 目 標 (如 下 圖 所 示 )。 當 根 檔 案 系 統 裝 置 可 用 時 , 將 到 達 initd-root-device.target 目 標 。 如 果 成 功 的 將 根 檔 案 系 統 掛 載 到 /sysroot 目 錄 , 那 麼 sysroot.mount 單 元 將 被 啟 動 , 然 後 進 一 步 到 達 initrd-root-fs.target 目 標 。 initrd-parse-etc.service 將 會 分 析 /sysroot/etc/fstab 檔 案 以 掛 載 /usr (若 需 要 ) 與 帶 有 x-initrd.mount 標 記 的 掛 載 點 。 所 有 這 些 掛 載 點 都 將 被 掛 載 到 /sysroot 之 下 , 然 後 流 程 到 達 initrd-fs.target 目 標 。 再 接 下 來 initrd-cleanup.service 將 會 使 用 systemctl --no-block isolate 命 令 啟 動 initrd-switch-root.target 目 標 。 因 為 isolate 表 示 立 即 停 止 所 有 在 新 的 目 標 單 元 中 不 需 要 的 程 序 , 所 以 此 動 作 實 際 上 是 為 接 下 來 切 換 根 目 錄 做 預 先 的 準 備 (也 就 是 清 理 環 境 )。 最 後 , 啟 動 initrd-switch-root.service 服 務 , 將 系 統 的 根 目 錄 切 換 至 /sysroot 目 錄 。

(之 前 的 流 程 與 上 一 小 節 完 全 相 同 )
:
v
basic.target
| emergency.service
______________________/| |
/ | v
| initrd-root-device.target emergency.target
| |
| v
| sysroot.mount
| |
| v
| initrd-root-fs.target
| |
| v
v initrd-parse-etc.service
(各 個 自 定 義 的 |
initrd services...) v
| (sysroot-usr.mount 以 及
| fstab 中 帶 有 x-initrd.mount
| 標 記 的 各 個 掛 載 點 )
| |
| v
| initrd-fs.target
\______________________ |
\|
v
initrd.target
|
v
initrd-cleanup.service
(使 用 isolates 啟 動 initrd-switch-root.target)
|
v
______________________/|
/ v
| initrd-udevadm-cleanup-db.service
v |
(各 個 自 定 義 的 |
initrd services...) |
\______________________ |
\|
v
initrd-switch-root.target
|
v
initrd-switch-root.service
|
v
切 換 到 主 機 上 的 作 業 系 統

關 機 流 程

systemd 系 統 在 關 機 時 同 樣 遵 循 固 定 的 流 程 , 具 體 如 下 圖 所 示 :

(與 所 有 系 統 服 務 互 斥 ) (與 所 有 檔 案 系 統 mounts, swaps, cryptsetup devices 互 斥 )
| |
v v
shutdown.target umount.target
| |
\____________________________________ ______/
\ /
v
(各 個 底 層 services)
|
v
final.target
|
_____________________________________/ \_________________________________
/ | | \
| | | |
v v v v
systemd-reboot.service systemd-poweroff.service systemd-halt.service systemd-kexec.service
| | | |
v v v v
reboot.target poweroff.target halt.target kexec.target

斜 體 標 識 的 目 標 單 元 經 常 被 用 作 關 機 目 標 。

參 見

systemd (1), boot (7), systemd.special (7), systemd.target (5), dracut (8)

本 頁 面 中 文 版 由 中 文 man 手 冊 頁 計 劃 提 供 。

翻 譯 人 員 : 金 步 國
金 步 國 作 品 集 : http://www.jinbuguo.com
中 文 man 手 冊 頁 計 劃 : https://github.com/man-pages-zh/manpages-zh