Linux Boot,Kernel 和 Service 介绍
Linux 啟動過程是初始化系統的過程。 它包括從第一次打開計算機電源到用戶界面完全可操作時發生的所有事情。
充分了解引導過程中的步驟可能有助于您解決問題,以及根據您的需要調整計算機的性能。
另一方面,啟動過程可能相當技術性,您可以在不了解所有細節的情況下開始使用 Linux。
第一個步驟:BIOS
啟動基于 x86 的 Linux 系統涉及許多步驟。 當計算機開機時,基本輸入/輸出系統 (BIOS) 會初始化硬件,包括屏幕和鍵盤,并測試主內存。 此過程也稱為 POST(開機自檢)。
BIOS 軟件存儲在主板上的 ROM 芯片上。 此后,引導過程的其余部分由操作系統 (OS) 控制。
Master Boot Record (MBR) and Boot Loader
一旦 POST 完成,系統控制就會從 BIOS 傳遞到引導加載程序。引導加載程序通常存儲在系統中的硬盤之一上,或者在引導扇區(對于傳統 BIOS/MBR 系統)或 EFI 分區(對于更新的(統一)可擴展固件接口或 EFI/UEFI 系統)。到此階段為止,機器不會訪問任何大容量存儲介質。此后,有關日期、時間和最重要外圍設備的信息從 CMOS 值中加載(在使用電池供電的內存存儲技術后,即使系統斷電也能跟蹤日期和時間) .
有許多用于 Linux 的引導加載程序;最常見的是 GRUB(用于 GRand Unified Boot loader)、ISOLINUX(用于從可移動媒體啟動)和 DAS U-Boot(用于在嵌入式設備/設備上啟動)。大多數 Linux 引導加載程序可以提供一個用戶界面,用于選擇引導 Linux 的替代選項,甚至可能安裝的其他操作系統。在引導 Linux 時,引導加載程序負責將內核映像和初始 RAM 磁盤或文件系統(其中包含啟動系統所需的一些關鍵文件和設備驅動程序)加載到內存中。
Boot Loader in Action
引導加載程序有兩個不同的階段:
對于使用 BIOS/MBR 方法的系統,引導加載程序位于硬盤的第一個扇區,也稱為主引導記錄 (MBR)。 MBR 的大小僅為 512 字節。在此階段,引導加載程序檢查分區表并找到可引導分區。一旦找到可引導分區,它就會搜索第二階段引導加載程序,例如 GRUB,并將其加載到 RAM(隨機存取存儲器)中。對于使用 EFI/UEFI 方法的系統,UEFI 固件讀取其引導管理器數據以確定要啟動哪個 UEFI 應用程序以及從何處啟動(即可以從哪個磁盤和分區找到 EFI 分區)。然后,固件啟動 UEFI 應用程序,例如 GRUB,如固件啟動管理器的啟動項中所定義。這個過程更復雜,但比舊的 MBR 方法更通用。
第二階段引導加載程序位于 /boot 下。將顯示啟動畫面,讓我們可以選擇要啟動的操作系統 (OS)。選擇操作系統后,引導加載程序將所選操作系統的內核加載到 RAM 中,并將控制權交給它。內核幾乎總是被壓縮,所以它的首要任務是解壓縮自身。之后,它將檢查和分析系統硬件并初始化內核中內置的任何硬件設備驅動程序。
Initial RAM Disk
initramfs 文件系統映像包含執行掛載正確根文件系統所需的所有操作的程序和二進制文件,例如為所需的文件系統和大容量存儲控制器的設備驅動程序提供內核功能,使用名為 udev(用于用戶設備)的工具,它負責用于確定存在哪些設備,定位它們需要正確運行的設備驅動程序,并加載它們。找到根文件系統后,檢查錯誤并安裝。
掛載程序指示操作系統文件系統已準備好使用,并將其與文件系統整個層次結構中的特定點(掛載點)相關聯。如果成功,initramfs 將從 RAM 中清除并執行根文件系統 (/sbin/init) 上的 init 程序。
init 處理掛載和轉向最終的真實根文件系統。如果在訪問大容量存儲之前需要特殊的硬件驅動程序,它們必須在 initramfs 映像中。
Text mode logins
在啟動過程接近尾聲時,init 會啟動一些文本模式登錄提示。這些使您能夠鍵入您的用戶名,然后是您的密碼,并最終獲得一個命令外殼。但是,如果您正在運行帶有圖形登錄界面的系統,您一開始不會看到這些。
通常,默認的命令 shell 是 bash(GNU Bourne Again Shell),但還有許多其他高級命令 shell 可用。 shell 打印一個文本提示,表明它已準備好接受命令;用戶輸入命令并回車后,命令被執行,命令執行完成后會顯示另一個提示。
正如您將在第 7 章:命令行操作中學到的那樣,可以使用 ALT 鍵和一個功能鍵來訪問運行命令 shell 的終端。大多數發行版以 F1 或 F2 開頭,有六個文本終端和一個圖形終端。在圖形環境中,切換到文本控制臺需要按 CTRL-ALT + 相應的功能鍵(使用 F7 或 F1 通向 GUI)。
Linux Kernel
引導加載程序將內核和基于 RAM 的初始文件系統 (initramfs) 加載到內存中,因此內核可以直接使用它。
當內核加載到 RAM 中時,它會立即初始化和配置計算機的內存,并配置連接到系統的所有硬件。 這包括所有處理器、I/O 子系統、存儲設備等。內核還加載一些必要的用戶空間應用程序。
/sbin/init and Services
一旦內核設置了所有硬件并掛載了根文件系統,內核就會運行 /sbin/init。然后這成為初始進程,然后啟動其他進程以使系統運行。系統上的大多數其他進程最終都會追溯到 init;例外包括所謂的內核進程。它們由內核直接啟動,它們的工作是管理內部操作系統的詳細信息。
除了啟動系統之外,init 還負責保持系統運行和干凈地關閉系統。它的職責之一是在必要時作為所有非內核進程的管理者;完成后進行清理,并在用戶登錄和退出時根據需要重新啟動用戶登錄服務,其他后臺系統服務也是如此。
傳統上,此進程啟動是使用可追溯到 1980 年代的約定和 System V UNIX 版本完成的。這個串行進程讓系統通過一系列運行級別,其中包含啟動和停止服務的腳本集合。每個運行級別都支持不同的系統運行模式。在每個運行級別內,可以將單個服務設置為運行,或者在運行時關閉。
然而,最近的所有主要發行版都不再采用這種系統初始化的順序運行級別方法,盡管它們通常出于兼容性目的支持 System V 約定。接下來,我們將討論較新的方法 systemd 和 Upstart。
Startup Alternatives
SysVinit 將事物視為一個連續的過程,分為一系列連續的階段。每個階段都需要完成才能進行下一個階段。因此,啟動不容易利用可以在多個處理器或內核上完成的并行處理。
此外,關機和重啟被視為一種相對罕見的事件;究竟花了多長時間并不重要。這不再是事實,尤其是對于移動設備和嵌入式 Linux 系統。一些現代方法,例如使用容器,可能需要幾乎瞬時的啟動時間。因此,系統現在需要具有更快和增強功能的方法。最后,舊的方法需要相當復雜的啟動腳本,這些腳本很難在發行版本、內核版本、體系結構和系統類型之間保持通用。開發的兩個主要替代方案是:
Updtart
- 由 Ubuntu 開發并于 2006 年首次收錄
- 在 Fedora 9(2008 年)和 RHEL 6 及其克隆中采用。
systemd
- Fedora 首先采用(2011 年)
- 被 RHEL 7 和 SUSE 采用
- 在 Ubuntu 16.04 中替換了 Upstart
雖然遷移到 systemd 頗有爭議,但它已被主要發行版采用,因此我們不會討論舊的 System V 方法或 Upstart,后者已成為死胡同。不管人們對 systemd 的爭議或技術方法有何看法,幾乎普遍采用使學習如何在 Linux 系統上工作變得更簡單,因為發行版之間的差異較小。我們接下來列舉 systemd 的特性。
systemd Features
使用 systemd 的系統比使用早期 init 方法的系統啟動得更快。這主要是因為它用激進的并行化技術替換了一組串行化的步驟,允許同時啟動多個服務。
復雜的啟動shell腳本被更簡單的配置文件所取代,這些配置文件列舉了服務啟動前必須做的事情,如何執行服務啟動,以及服務在啟動完成時應該表明什么條件已經完成。需要注意的一件事是 /sbin/init 現在只指向 /lib/systemd/systemd;即 systemd 接管 init 進程。
一個 systemd 命令 (systemctl) 用于大多數基本任務。雖然我們還沒有討論在命令行上工作,但這里是其用法的簡要列表:
- 在當前運行的系統上啟動、停止、重啟服務(以 nfs 為例):
$ sudo systemctl start|stop|restart nfs.service
- 啟用或禁用系統服務在系統引導時啟動:
$ sudo systemctl enable|disable nfs.service
在大多數情況下,可以省略 .service。與舊方法存在許多技術差異,超出了我們的討論范圍。
更多Jerry的原創文章,盡在:“汪子熙”:
總結
以上是生活随笔為你收集整理的Linux Boot,Kernel 和 Service 介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 元气骑士兑换码怎么用
- 下一篇: 关于 SAP Spartacus 和 S