名稱
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 單元之間的依賴關係 以及各自在啟動流程中的位置。圖中的箭頭表示了單元之間的依賴關係與先後順序, 整個圖表按照自上而下的時間順序執行。
用斜體標識的目標單元經常被用作啟動目標。 有兩種方法可以指定啟動目標: (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 為目標(如下圖所示)。在掛載任何檔案系統之前(也就是在啟動 local-fs-pre.target 之前), [email protected] 將會首先完成啟動, 以檢查系統是要從先前的休眠狀態中恢復, 還是要執行常規的啟動流程。在檢查完成之前,將不會掛載任何檔案系統。當根檔案系統裝置可用時,將到達 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 目錄。
關機流程
systemd 系統在關機時同樣遵循固定的流程, 具體如下圖所示:
用斜體標識的目標單元經常被用作關機目標。
注意, systemd-halt.service(8), systemd-reboot.service, systemd-poweroff.service, systemd-kexec.service 會將系統與 systemd(pid=1) 帶入關機流程的第二個階段(由 systemd-shutdown 執行), 也就是不再考慮任何服務與單元等概念, 只用一種簡單粗暴的方式解除安裝所有檔案系統、殺死所有程序、釋放所有資源。一般來說,在第一階段結束時,常規應用都已終止、常規資源都已釋放,第二階段只是乙個兜底的安全網, 那些在第一階段基於單元的關閉流程中(見前文) 未能結束的程序將被強制終止、未能釋放的資源將被強制釋放。
linux下啟動與關閉oracle監聽與例項
linux中啟動oracle主要分兩步 乙個是啟動 乙個是啟動例項 一般都忘記了這一步 具體命令如下,提供給大家參考一下 1 連線伺服器 telnet ip 2 輸入管理員使用者和密碼 user name oracle password oracle 3 進入oracle根目錄 cd oracle ...
Linux 啟動關閉oracle
啟動資料庫例項,分為兩步 第一步,啟動監聽 第二步,啟動資料庫例項。一 如何啟動資料庫例項 1.進入到sqlplus啟動例項 oracle wuzhq su oracle 切換到oracle使用者 oracle wuzhq lsnrctl start 開啟監聽 oracle wuzhq sqlplu...
linux啟動和關閉
startup nomount選項 讀初始化引數檔案,啟動例項 startup nomount選項啟動例項,但不安裝資料庫。當資料庫以這個模式啟動時,引數檔案被讀取 後台程序和記憶體結構被啟動 但它們不被附加或與資料庫的磁碟結構進行通訊。當例項處於這個狀態時,資料庫是不可使用的。startup mo...