CentOS 7系統詳細開機啟動流程和關機流程

來源:互聯網
上載者:User

標籤:

名稱    bootup - 系統啟動流程描述    在系統啟動過程中要涉及多個不同的組件。按下開機按鈕後,首先BIOS/UEFI做最基本的硬體自檢與初始化,    然後載入預設/手動選擇的磁碟/網路上的引導載入器(例如GRUB2),引導載入器進一步從磁碟/網路上載入作業系統核心(例如Linux)。    對於Linux來說,核心將會(可選的)解壓一個initrd(initial RAM disk)鏡像(可以用dracut類的工具產生),    並執行由"rdinit="核心引導參數指定的init程式(例如systemd)以尋找並掛載根檔案系統。    完成根檔案系統的掛載之後,核心啟動由"init="核心引導參數指定的init程式(例如systemd)以接管系統的控制權。    該init程式將會負責檢測所有其他的硬體裝置、掛載必要的檔案系統、啟動所有必要的服務,等等。    關機時,init程式將會停止所有服務、卸載所有檔案系統、(可選的)返回initrd環境卸載根檔案系統,最後關閉電源。常規啟動流程    當成功掛載了"root="核心引導參數指定的根檔案系統之後,核心將啟動由"init="核心引導參數指定的init程式,    從這個時間點開始,即進入了"常規啟動流程":檢測硬體裝置並載入驅動、掛載必要的檔案系統、啟動所有必要的服務,等等。    對於systemd系統來說,上述"init程式"就是systemd進程,    而整個"常規啟動流程"也以幾個特殊的 target 單元(詳見 )作為節點,被劃分為幾個階段性步驟。    在每個階段性步驟內部,任務是高度並行的,所以無法準確預測其中的單元的順序,但是不同階段之間的先後順序總是固定的。    當啟動系統時,systemd 將會以 default.target 為啟動目標,藉助單元之間環環相扣的依賴關係,即可完成"常規啟動流程"。    通常,default.target 只是一個指向 graphical.target(圖形介面) 或 multi-user.target(文本控制台) 的軟串連。    為了強制啟動流程的規範性以及提高單元的並行性,預先定義了一些具有特定含義的 target 單元。    下面的圖表解釋了這些具有特定含義的 target 單元之間的依賴關係以及各自在啟動流程中的位置。    圖中的箭頭表示了單元之間的依賴關係與先後順序,整個圖表按照自上而下的時間順序執行。    local-fs-pre.target             |             v     (各個 mounts 與       (各個 swap       (各個加密塊裝置      fsck services)        devices)            devices)        (各個底層服務        (各個底層API虛擬             |                  |                  |             services: udevd,     檔案系統 mounts:             v                  v                  v             tmpfiles, random     mqueue, configfs,      local-fs.target      swap.target     cryptsetup.target     seed, sysctl ...)      debugfs ...)             |                  |                  |                    |                    |             \__________________|_________________ | ___________________|____________________/                                                  \|/                                                   v                                            sysinit.target                                                   |              ____________________________________/|\________________________________________             /                  |                  |                    |                                 |                  |                  |                    |                    |             v                  v                  |                    v                    v       (各個 timers)      (各個 paths)             |             (各個 sockets)        rescue.service             |                  |                  |                    |                    |             v                  v                  |                    v                    v       timers.target      paths.target             |             sockets.target        rescue.target             |                  |                  |                    |             v                  \_________________ | ___________________/             .                                    \|/             . . . . . . . . . . . . . . . . . . . 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手冊);(2)使用 default.target 軟串連。    因為 timers.target 以非同步方式包含在 basic.target 中,所以 timer 單元可以依賴於在 basic.target 之後才啟動的服務。initrd 啟動流程    在initrd內部,也可以將 systemd 用作init程式(由"rdinit="核心引導參數指定),此時 initrd.target 將是預設目標。    initrd內部啟動流程的上半部分與前一小節 basic.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 將會使用        /usr/bin/systemctl --no-block isolate initrd-switch-root.target    命令啟動 initrd-switch-root.target 目標。因為 isolate 表示立即停止所有在新的目標單元中不需要的進程,    所以此動作實際上是為接下來切換根目錄做預先的準備(也就是清理環境)。    最後,啟用 initrd-switch-root.service 服務,將系統的根目錄切換至 /sysroot 目錄。                                    (之前的流程與上一小節完全相同)                                                   :                                                   v                                             basic.target                                                   |                                 emergency.service                            ______________________/|                                         |                           /                       |                                         v                           |                  sysroot.mount                          emergency.target                           |                       |                           |                       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    用粗體底線標識的目標單元經常被用作關機目標。

CentOS 7系統詳細開機啟動流程和關機流程

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.