成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

Linux開機(jī)引導(dǎo)和啟動(dòng)

導(dǎo)讀 理解操作系統(tǒng)開機(jī)引導(dǎo)和啟動(dòng)過程對(duì)于配置操作系統(tǒng)和解決相關(guān)啟動(dòng)問題是至關(guān)重要的。該文章陳述了 GRUB2 引導(dǎo)裝載程序開機(jī)引導(dǎo)裝載內(nèi)核的過程和 systemd 初始化系統(tǒng)執(zhí)行開機(jī)啟動(dòng)操作系統(tǒng)的過程。

事實(shí)上,操作系統(tǒng)的啟動(dòng)分為兩個(gè)階段:引導(dǎo)boot和啟動(dòng)startup。引導(dǎo)階段開始于打開電源開關(guān),結(jié)束于內(nèi)核初始化完成和 systemd 進(jìn)程成功運(yùn)行。啟動(dòng)階段接管了剩余工作,直到操作系統(tǒng)進(jìn)入可操作狀態(tài)。

成都創(chuàng)新互聯(lián)公司專注于裕民企業(yè)網(wǎng)站建設(shè),自適應(yīng)網(wǎng)站建設(shè),商城網(wǎng)站建設(shè)。裕民網(wǎng)站建設(shè)公司,為裕民等地區(qū)提供建站服務(wù)。全流程按需定制開發(fā),專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)

總體來說, Linux 的開機(jī)引導(dǎo)和啟動(dòng)過程是相當(dāng)容易理解,下文將分節(jié)對(duì)于不同步驟進(jìn)行詳細(xì)說明。

BIOS 上電自檢(POST)

引導(dǎo)裝載程序 (GRUB2)

內(nèi)核初始化

啟動(dòng) systemd,其是所有進(jìn)程之父。

注意,本文以 GRUB2 和 systemd 為載體講述操作系統(tǒng)的開機(jī)引導(dǎo)和啟動(dòng)過程,是因?yàn)檫@二者是目前主流的 linux 發(fā)行版本所使用的引導(dǎo)裝載程序和初始化軟件。當(dāng)然另外一些過去使用的相關(guān)軟件仍然在一些 Linux 發(fā)行版本中使用。

引導(dǎo)過程

引導(dǎo)過程能以兩種方式之一初始化。其一,如果系統(tǒng)處于關(guān)機(jī)狀態(tài),那么打開電源按鈕將開啟系統(tǒng)引導(dǎo)過程。其二,如果操作系統(tǒng)已經(jīng)運(yùn)行在一個(gè)本地用戶(該用戶可以是 root 或其他非特權(quán)用戶),那么用戶可以借助圖形界面或 命令行界面通過編程方式發(fā)起一個(gè)重啟操作,從而觸發(fā)系統(tǒng)引導(dǎo)過程。重啟包括了一個(gè)關(guān)機(jī)和重新開始的操作。

BIOS 上電自檢(POST)

上電自檢過程中其實(shí) Linux 沒有什么也沒做,上電自檢主要由硬件的部分來完成,這對(duì)于所有操作系統(tǒng)都一樣。當(dāng)電腦接通電源,電腦開始執(zhí)行 BIOS(基本輸入輸出系統(tǒng)Basic I/O System)的 POST(上電自檢Power On Self Test)過程。

在 1981 年,IBM 設(shè)計(jì)的第一臺(tái)個(gè)人電腦中,BIOS 被設(shè)計(jì)為用來初始化硬件組件。POST 作為 BIOS 的組成部分,用于檢驗(yàn)電腦硬件基本功能是否正常。如果 POST 失敗,那么這個(gè)電腦就不能使用,引導(dǎo)過程也將就此中斷。

BIOS 上電自檢確認(rèn)硬件的基本功能正常,然后產(chǎn)生一個(gè) BIOS 中斷 INT 13H,該中斷指向某個(gè)接入的可引導(dǎo)設(shè)備的引導(dǎo)扇區(qū)。它所找到的包含有效的引導(dǎo)記錄的第一個(gè)引導(dǎo)扇區(qū)將被裝載到內(nèi)存中,并且控制權(quán)也將從引導(dǎo)扇區(qū)轉(zhuǎn)移到此段代碼。

引導(dǎo)扇區(qū)是引導(dǎo)加載器真正的第一階段。大多數(shù) Linux 發(fā)行版本使用的引導(dǎo)加載器有三種:GRUB、GRUB2 和 LILO。GRUB2 是最新的,也是相對(duì)于其他老的同類程序使用最廣泛的。

GRUB2

GRUB2 全稱是 GRand Unified BootLoader,Version 2(第二版大一統(tǒng)引導(dǎo)裝載程序)。它是目前流行的大部分 Linux 發(fā)行版本的主要引導(dǎo)加載程序。GRUB2 是一個(gè)用于計(jì)算機(jī)尋找操作系統(tǒng)內(nèi)核并加載其到內(nèi)存的智能程序。由于 GRUB 這個(gè)單詞比 GRUB2 更易于書寫和閱讀,在下文中,除特殊指明以外,GRUB 將代指 GRUB2。

GRUB 被設(shè)計(jì)為兼容操作系統(tǒng)多重引導(dǎo)規(guī)范,它能夠用來引導(dǎo)不同版本的 Linux 和其他的開源操作系統(tǒng);它還能鏈?zhǔn)郊虞d專有操作系統(tǒng)的引導(dǎo)記錄。

GRUB 允許用戶從任何給定的 Linux 發(fā)行版本的幾個(gè)不同內(nèi)核中選擇一個(gè)進(jìn)行引導(dǎo)。這個(gè)特性使得操作系統(tǒng),在因?yàn)殛P(guān)鍵軟件不兼容或其它某些原因升級(jí)失敗時(shí),具備引導(dǎo)到先前版本的內(nèi)核的能力。GRUB 能夠通過文件 /boot/grub/grub.conf 進(jìn)行配置。(LCTT 譯注:此處指 GRUB1)

GRUB1 現(xiàn)在已經(jīng)逐步被棄用,在大多數(shù)現(xiàn)代發(fā)行版上它已經(jīng)被 GRUB2 所替換,GRUB2 是在 GRUB1 的基礎(chǔ)上重寫完成?;?Red Hat 的發(fā)行版大約是在 Fedora 15 和  CentOS/RHEL 7 時(shí)升級(jí)到 GRUB2 的。GRUB2 提供了與 GRUB1 同樣的引導(dǎo)功能,但是 GRUB2 也是一個(gè)類似主框架(mainframe)系統(tǒng)上的基于 命令行的前置操作系統(tǒng)(Pre-OS)環(huán)境,使得在預(yù)引導(dǎo)階段配置更為方便和易操作。GRUB2 通過 /boot/grub2/grub.cfg 進(jìn)行配置。

兩個(gè) GRUB 的最主要作用都是將內(nèi)核加載到內(nèi)存并運(yùn)行。兩個(gè)版本的 GRUB 的基本工作方式一致,其主要階段也保持相同,都可分為 3 個(gè)階段。在本文將以 GRUB2 為例進(jìn)行討論其工作過程。GRUB 或 GRUB2 的配置,以及 GRUB2 的命令使用均超過本文范圍,不會(huì)在文中進(jìn)行介紹。

雖然 GRUB2 并未在其三個(gè)引導(dǎo)階段中正式使用這些階段stage名詞,但是為了討論方便,我們?cè)诒疚闹惺褂盟鼈儭?/p>

階段 1

如上文 POST(上電自檢)階段提到的,在 POST 階段結(jié)束時(shí),BIOS 將查找在接入的磁盤中查找引導(dǎo)記錄,其通常位于 MBR(主引導(dǎo)記錄Master Boot Record),它加載它找到的第一個(gè)引導(dǎo)記錄中到內(nèi)存中,并開始執(zhí)行此代碼。引導(dǎo)代碼(及階段 1 代碼)必須非常小,因?yàn)樗仨氝B同分區(qū)表放到硬盤的第一個(gè) 512 字節(jié)的扇區(qū)中。 在傳統(tǒng)的常規(guī) MBR 中,引導(dǎo)代碼實(shí)際所占用的空間大小為 446 字節(jié)。這個(gè)階段 1 的 446 字節(jié)的文件通常被叫做引導(dǎo)鏡像(boot.img),其中不包含設(shè)備的分區(qū)信息,分區(qū)是一般單獨(dú)添加到引導(dǎo)記錄中。

由于引導(dǎo)記錄必須非常的小,它不可能非常智能,且不能理解文件系統(tǒng)結(jié)構(gòu)。因此階段 1 的唯一功能就是定位并加載階段 1.5 的代碼。為了完成此任務(wù),階段 1.5 的代碼必須位于引導(dǎo)記錄與設(shè)備第一個(gè)分區(qū)之間的位置。在加載階段 1.5 代碼進(jìn)入內(nèi)存后,控制權(quán)將由階段 1 轉(zhuǎn)移到階段 1.5。

階段 1.5

如上所述,階段 1.5 的代碼必須位于引導(dǎo)記錄與設(shè)備第一個(gè)分區(qū)之間的位置。該空間由于歷史上的技術(shù)原因而空閑。第一個(gè)分區(qū)的開始位置在扇區(qū) 63 和 MBR(扇區(qū) 0)之間遺留下 62 個(gè) 512 字節(jié)的扇區(qū)(共 31744 字節(jié)),該區(qū)域用于存儲(chǔ)階段 1.5 的代碼鏡像 core.img 文件。該文件大小為 25389 字節(jié),故此區(qū)域有足夠大小的空間用來存儲(chǔ) core.img。

因?yàn)橛懈蟮拇鎯?chǔ)空間用于階段 1.5,且該空間足夠容納一些通用的文件系統(tǒng)驅(qū)動(dòng)程序,如標(biāo)準(zhǔn)的 EXT 和其它的 Linux 文件系統(tǒng),如 FAT 和 NTFS 等。GRUB2 的 core.img 遠(yuǎn)比更老的 GRUB1 階段 1.5 更復(fù)雜且更強(qiáng)大。這意味著 GRUB2 的階段 2 能夠放在標(biāo)準(zhǔn)的 EXT 文件系統(tǒng)內(nèi),但是不能放在邏輯卷內(nèi)。故階段 2 的文件可以存放于 /boot 文件系統(tǒng)中,一般在 /boot/grub2 目錄下。

注意 /boot 目錄必須放在一個(gè) GRUB 所支持的文件系統(tǒng)(并不是所有的文件系統(tǒng)均可)。階段 1.5 的功能是開始執(zhí)行存放階段 2 文件的 /boot 文件系統(tǒng)的驅(qū)動(dòng)程序,并加載相關(guān)的驅(qū)動(dòng)程序。

階段 2

GRUB 階段 2 所有的文件都已存放于 /boot/grub2 目錄及其幾個(gè)子目錄之下。該階段沒有一個(gè)類似于階段 1 與階段 1.5 的鏡像文件。相應(yīng)地,該階段主要需要從 /boot/grub2/i386-pc 目錄下加載一些內(nèi)核運(yùn)行時(shí)模塊。

GRUB 階段 2 的主要功能是定位和加載 Linux 內(nèi)核到內(nèi)存中,并轉(zhuǎn)移控制權(quán)到內(nèi)核。內(nèi)核的相關(guān)文件位于 /boot 目錄下,這些內(nèi)核文件可以通過其文件名進(jìn)行識(shí)別,其文件名均帶有前綴 vmlinuz。你可以列出 /boot 目錄中的內(nèi)容來查看操作系統(tǒng)中當(dāng)前已經(jīng)安裝的內(nèi)核。

GRUB2 跟 GRUB1 類似,支持從 Linux 內(nèi)核選擇之一引導(dǎo)啟動(dòng)。Red Hat 包管理器(DNF)支持保留多個(gè)內(nèi)核版本,以防最新版本內(nèi)核發(fā)生問題而無法啟動(dòng)時(shí),可以恢復(fù)老版本的內(nèi)核。默認(rèn)情況下,GRUB 提供了一個(gè)已安裝內(nèi)核的預(yù)引導(dǎo)菜單,其中包括問題診斷菜單(recuse)以及恢復(fù)菜單(如果配置已經(jīng)設(shè)置恢復(fù)鏡像)。

階段 2 加載選定的內(nèi)核到內(nèi)存中,并轉(zhuǎn)移控制權(quán)到內(nèi)核代碼。

內(nèi)核

內(nèi)核文件都是以一種自解壓的壓縮格式存儲(chǔ)以節(jié)省空間,它與一個(gè)初始化的內(nèi)存映像和存儲(chǔ)設(shè)備映射表都存儲(chǔ)于 /boot 目錄之下。

在選定的內(nèi)核加載到內(nèi)存中并開始執(zhí)行后,在其進(jìn)行任何工作之前,內(nèi)核文件首先必須從壓縮格式解壓自身。一旦內(nèi)核自解壓完成,則加載 systemd 進(jìn)程(其是老式 System V 系統(tǒng)的 init 程序的替代品),并轉(zhuǎn)移控制權(quán)到 systemd。

這就是引導(dǎo)過程的結(jié)束。此刻,Linux 內(nèi)核和 systemd 處于運(yùn)行狀態(tài),但是由于沒有其他任何程序在執(zhí)行,故其不能執(zhí)行任何有關(guān)用戶的功能性任務(wù)。

啟動(dòng)過程

啟動(dòng)過程緊隨引導(dǎo)過程之后,啟動(dòng)過程使 Linux 系統(tǒng)進(jìn)入可操作狀態(tài),并能夠執(zhí)行用戶功能性任務(wù)。

systemd

systemd 是所有進(jìn)程的父進(jìn)程。它負(fù)責(zé)將 Linux 主機(jī)帶到一個(gè)用戶可操作狀態(tài)(可以執(zhí)行功能任務(wù))。systemd 的一些功能遠(yuǎn)較舊式 init 程序更豐富,可以管理運(yùn)行中的 Linux 主機(jī)的許多方面,包括掛載文件系統(tǒng),以及開啟和管理 Linux 主機(jī)的系統(tǒng)服務(wù)等。但是 systemd 的任何與系統(tǒng)啟動(dòng)過程無關(guān)的功能均不在此文的討論范圍。

首先,systemd 掛載在 /etc/fstab 中配置的文件系統(tǒng),包括內(nèi)存交換文件或分區(qū)。據(jù)此,systemd 必須能夠訪問位于 /etc 目錄下的配置文件,包括它自己的。systemd 借助其配置文件 /etc/systemd/system/default.target 決定 Linux 系統(tǒng)應(yīng)該啟動(dòng)達(dá)到哪個(gè)狀態(tài)(或目標(biāo)態(tài)target)。default.target 是一個(gè)真實(shí)的 target 文件的符號(hào)鏈接。對(duì)于桌面系統(tǒng),其鏈接到 graphical.target,該文件相當(dāng)于舊式 systemV init 方式的 runlevel 5。對(duì)于一個(gè)服務(wù)器操作系統(tǒng)來說,default.target 更多是默認(rèn)鏈接到 multi-user.target, 相當(dāng)于 systemV 系統(tǒng)的 runlevel 3。emergency.target 相當(dāng)于單用戶模式。

(LCTT 譯注:“target” 是 systemd 新引入的概念,目前尚未發(fā)現(xiàn)有官方的準(zhǔn)確譯名,考慮到其作用和使用的上下文環(huán)境,我們認(rèn)為翻譯為“目標(biāo)態(tài)”比較貼切。以及,“unit” 是指 systemd 中服務(wù)和目標(biāo)態(tài)等各個(gè)對(duì)象/文件,在此依照語境譯作“單元”。)

注意,所有的目標(biāo)態(tài)target和服務(wù)service均是 systemd 的單元unit。

如下表 1 是 systemd 啟動(dòng)的目標(biāo)態(tài)target和老版 systemV init 啟動(dòng)運(yùn)行級(jí)別runlevel的對(duì)比。這個(gè) systemd 目標(biāo)態(tài)別名 是為了 systemd 向前兼容 systemV 而提供。這個(gè)目標(biāo)態(tài)別名允許系統(tǒng)管理員(包括我自己)用 systemV 命令(例如 init 3)改變運(yùn)行級(jí)別。當(dāng)然,該 systemV 命令是被轉(zhuǎn)發(fā)到 systemd 進(jìn)行解釋和執(zhí)行的。

Linux 開機(jī)引導(dǎo)和啟動(dòng)

Linux 開機(jī)引導(dǎo)和啟動(dòng)

表 1 老版本 systemV 的 運(yùn)行級(jí)別與 systemd 與目標(biāo)態(tài)target或目標(biāo)態(tài)別名的比較

每個(gè)目標(biāo)態(tài)target有一個(gè)在其配置文件中描述的依賴集,systemd 需要首先啟動(dòng)其所需依賴,這些依賴服務(wù)是 Linux 主機(jī)運(yùn)行在特定的功能級(jí)別所要求的服務(wù)。當(dāng)配置文件中所有的依賴服務(wù)都加載并運(yùn)行后,即說明系統(tǒng)運(yùn)行于該目標(biāo)級(jí)別。

systemd 也會(huì)查看老式的 systemV init 目錄中是否存在相關(guān)啟動(dòng)文件,若存在,則 systemd 根據(jù)這些配置文件的內(nèi)容啟動(dòng)對(duì)應(yīng)的服務(wù)。在 Fedora 系統(tǒng)中,過時(shí)的網(wǎng)絡(luò)服務(wù)就是通過該方式啟動(dòng)的一個(gè)實(shí)例。

如下圖 1 是直接從 bootup 的 man 頁面拷貝而來。它展示了在 systemd 啟動(dòng)過程中一般的事件序列和確保成功的啟動(dòng)的基本的順序要求。

sysinit.target 和 basic.target 目標(biāo)態(tài)可以被視作啟動(dòng)過程中的狀態(tài)檢查點(diǎn)。盡管 systemd 的設(shè)計(jì)初衷是并行啟動(dòng)系統(tǒng)服務(wù),但是部分服務(wù)或功能目標(biāo)態(tài)是其它服務(wù)或目標(biāo)態(tài)的啟動(dòng)的前提。系統(tǒng)將暫停于檢查點(diǎn)直到其所要求的服務(wù)和目標(biāo)態(tài)都滿足為止。

sysinit.target 狀態(tài)的到達(dá)是以其所依賴的所有資源模塊都正常啟動(dòng)為前提的,所有其它的單元,如文件系統(tǒng)掛載、交換文件設(shè)置、設(shè)備管理器的啟動(dòng)、隨機(jī)數(shù)生成器種子設(shè)置、低級(jí)別系統(tǒng)服務(wù)初始化、加解密服務(wù)啟動(dòng)(如果一個(gè)或者多個(gè)文件系統(tǒng)加密的話)等都必須完成,但是在 sysinit.target 中這些服務(wù)與模塊是可以并行啟動(dòng)的。

sysinit.target 啟動(dòng)所有的低級(jí)別服務(wù)和系統(tǒng)初具功能所需的單元,這些都是進(jìn)入下一階段 basic.target 的必要前提。

Linux 開機(jī)引導(dǎo)和啟動(dòng)

圖 1:systemd 的啟動(dòng)流程

在 sysinit.target 的條件滿足以后,systemd 接下來啟動(dòng) basic.target,啟動(dòng)其所要求的所有單元。basic.target 通過啟動(dòng)下一目標(biāo)態(tài)所需的單元而提供了更多的功能,這包括各種可執(zhí)行文件的目錄路徑、通信 sockets,以及定時(shí)器等。

最后,用戶級(jí)目標(biāo)態(tài)(multi-user.target 或 graphical.target) 可以初始化了,應(yīng)該注意的是 multi-user.target 必須在滿足圖形化目標(biāo)態(tài) graphical.target 的依賴項(xiàng)之前先達(dá)成。

圖 1 中,以 * 開頭的目標(biāo)態(tài)是通用的啟動(dòng)狀態(tài)。當(dāng)?shù)竭_(dá)其中的某一目標(biāo)態(tài),則說明系統(tǒng)已經(jīng)啟動(dòng)完成了。如果 multi-user.target 是默認(rèn)的目標(biāo)態(tài),則成功啟動(dòng)的系統(tǒng)將以命令行登錄界面呈現(xiàn)于用戶。如果 graphical.target 是默認(rèn)的目標(biāo)態(tài),則成功啟動(dòng)的系統(tǒng)將以圖形登錄界面呈現(xiàn)于用戶,界面的具體樣式將根據(jù)系統(tǒng)所配置的顯示管理器而定。

故障討論

最近我需要改變一臺(tái)使用 GRUB2 的 Linux 電腦的默認(rèn)引導(dǎo)內(nèi)核。我發(fā)現(xiàn)一些 GRUB2 的命令在我的系統(tǒng)上不能用,也可能是我使用方法不正確。至今,我仍然不知道是何原因?qū)е?,此問題需要進(jìn)一步探究。

grub2-set-default 命令沒能在配置文件 /etc/default/grub 中成功地設(shè)置默認(rèn)內(nèi)核索引,以至于期望的替代內(nèi)核并沒有被引導(dǎo)啟動(dòng)。故在該配置文件中我手動(dòng)更改 GRUB_DEFAULT=saved 為 GRUB_DEFAULT=2,2 是我需要引導(dǎo)的安裝好的內(nèi)核文件的索引。然后我執(zhí)行命令 grub2-mkconfig > /boot/grub2/grub.cfg 創(chuàng)建了新的 GRUB 配置文件,該方法如預(yù)期的規(guī)避了問題,并成功引導(dǎo)了替代的內(nèi)核。

結(jié)論

GRUB2、systemd 初始化系統(tǒng)是大多數(shù)現(xiàn)代 Linux 發(fā)行版引導(dǎo)和啟動(dòng)的關(guān)鍵組件。盡管在實(shí)際中,systemd 的使用還存在一些爭議,但是 GRUB2 與 systemd 可以密切地配合先加載內(nèi)核,然后啟動(dòng)一個(gè)業(yè)務(wù)系統(tǒng)所需要的系統(tǒng)服務(wù)。

盡管 GRUB2 和 systemd 都比其前任要更加復(fù)雜,但是它們更加容易學(xué)習(xí)和管理。在 man 頁面有大量關(guān)于 systemd 的幫助說明。

原文來自:  https://www.linuxprobe.com/boot-process-details.html

標(biāo)題名稱:Linux開機(jī)引導(dǎo)和啟動(dòng)
轉(zhuǎn)載來于:http://jinyejixie.com/article18/jopgdp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)、搜索引擎優(yōu)化、域名注冊(cè)、品牌網(wǎng)站建設(shè)、面包屑導(dǎo)航、用戶體驗(yàn)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)
樟树市| 偏关县| 洛宁县| 南昌县| 和平区| 海安县| 静安区| 建平县| 高碑店市| 林口县| 龙泉市| 浙江省| 苏尼特左旗| 舞钢市| 杭锦后旗| 高碑店市| 正蓝旗| 清镇市| 综艺| 岑巩县| 襄汾县| 井研县| 讷河市| 武隆县| 宜川县| 永春县| 枣阳市| 新和县| 越西县| 静海县| 阿巴嘎旗| 桑植县| 古蔺县| 桃园县| 大同县| 新蔡县| 乐山市| 来凤县| 上林县| 芜湖县| 建德市|