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