作為一名Linux管理員,您可能會(huì)在增加外部存儲(chǔ)卷之后或者甚至在安裝新 Linux 操作系統(tǒng)之后,嘗試重新啟動(dòng)服務(wù)器時(shí)遇到諸如 cannot mount rootfs 和 kernel panic 之類的 rootfs 錯(cuò)誤。本文將概要介紹 x86 平臺(tái)上的 Linux 引導(dǎo)進(jìn)程,顯示出現(xiàn)此問題的原因,并提供避免或修正此問題的四個(gè)技巧。
問題概述
根文件系統(tǒng)(在樣例錯(cuò)誤消息中名為 rootfs)是 Linux 的最基本的組件。根文件系統(tǒng)包含支持完整的 Linux 系統(tǒng)所需的所有內(nèi)容。它包含所有應(yīng)用程序、配置、設(shè)備、數(shù)據(jù)等。沒有根文件系統(tǒng),您的 Linux 系統(tǒng)將無法運(yùn)行。
在重新啟動(dòng)系統(tǒng)后,您可能會(huì)遇到 cannot mount rootfs 錯(cuò)誤(在 Linux 主機(jī)得到 kernel panic 之后)。這種問題經(jīng)常會(huì)在從外部存儲(chǔ)中增加一些存儲(chǔ)卷之后出現(xiàn),也可能會(huì)在完成文件復(fù)制并需要重新啟動(dòng)來完成安裝時(shí)出現(xiàn)。
如果出現(xiàn)此問題,您的系統(tǒng)將不會(huì)重新啟動(dòng)。診斷和修正此問題都需要花時(shí)間。本文介紹的 4 個(gè)技巧應(yīng)當(dāng)可以幫助您解決問題并節(jié)省時(shí)間。
另一個(gè)問題是 Linux 內(nèi)核需要裝入根文件系統(tǒng),但是它找不到目標(biāo)設(shè)備。換言之,根文件系統(tǒng)沒有出現(xiàn)在它應(yīng)該在的位置。例如,您把 Linux 根文件系統(tǒng)安裝在 /dev/sda 磁盤中,但是您的系統(tǒng)在重新啟動(dòng)時(shí)無法裝入它。出現(xiàn)這個(gè)問題有兩個(gè)可能的原因:
1.磁盤 /dev/sda 在系統(tǒng)重新啟動(dòng)時(shí)沒有顯示。
出現(xiàn)這種情況的可能的原因是您的 Linux 主機(jī)沒有裝入根文件系統(tǒng)的關(guān)鍵驅(qū)動(dòng)器。情況未必如此。Linux 安裝程序?qū)研枰乃序?qū)動(dòng)器構(gòu)建到 initrd 映像中,以便 Linux 系統(tǒng)可以在啟動(dòng)時(shí)輕松地載入設(shè)備驅(qū)動(dòng)器。但是,如果您是手動(dòng)安裝了磁盤,則可能會(huì)出現(xiàn)此錯(cuò)誤。
2.顯示了磁盤 /dev/sda,但是它不是根文件系統(tǒng)。在重新啟動(dòng)后,您的根文件系統(tǒng)已經(jīng)改為 /dev/sdb。
這是最可能出現(xiàn)的情況。
那么,系統(tǒng)重新啟動(dòng)后 /dev/sda 是如何被重命名為 /dev/sdb 的?在 Linux 中,/dev/sd* 表示 SCSI 設(shè)備。Linux 將把這些設(shè)備的名稱從 sda 改為 sdz(以及從 sdaa 改為 sdzz,以此類推)。它將把第一個(gè) SCSI 設(shè)備命名為 /dev/sda,把第二個(gè) SCSI 設(shè)備命名為 /dev/sdb,以此類推。
如果使用在根文件系統(tǒng)設(shè)備適配器驅(qū)動(dòng)器之前裝入的驅(qū)動(dòng)器(最初位于 /dev/sda)在適配器中安裝設(shè)備,則根文件系統(tǒng)將移到命令鏈的下一個(gè)字母(/dev/sdb),并且根文件系統(tǒng)不是遇到的第一個(gè)設(shè)備。因此,如果它在行首找不到 rootfs,它就無法裝入。
這是所發(fā)生情況的簡單說明,但是為了給這個(gè)場景補(bǔ)充更多上下文,讓我們概要說明一下 Linux 引導(dǎo)進(jìn)程。
Linux 引導(dǎo)的工作原理
以下步驟將概要介紹 Linux 引導(dǎo)進(jìn)程的工作原理:
1.計(jì)算機(jī)在啟動(dòng)時(shí)首先執(zhí)行的是初始測試 POST(開機(jī)自檢,Power On Self Test),它將測試多個(gè)設(shè)備,包括處理器、內(nèi)存、顯卡和鍵盤。此外,還將測試引導(dǎo)介質(zhì)(硬盤、軟盤和 CD-ROM)。在 POST 之后,ROM 中的加載程序?qū)⑤d入引導(dǎo)扇區(qū),該扇區(qū)隨后將從活動(dòng)分區(qū)中載入操作系統(tǒng)。您可以通過編輯服務(wù)器 BIOS 來更改引導(dǎo)介質(zhì)順序。
2.引導(dǎo)扇區(qū)總是在同一個(gè)位置 — 引導(dǎo)設(shè)備的磁道 0、柱面 0、磁頭 0。此扇區(qū)包含名為 loader 的程序(對(duì)于 Linux,它通常是 LILO 或 GRUB);實(shí)際上是此程序引導(dǎo)操作系統(tǒng)。加載程序不是安裝在 MBR 中,就是安裝在活動(dòng)主分區(qū)的第一個(gè)扇區(qū)中。
3.如果服務(wù)器中安裝了多個(gè)操作系統(tǒng),您需要從引導(dǎo)加載程序菜單中選擇需要引導(dǎo)的操作系統(tǒng)。如果安裝了多個(gè)內(nèi)核,您還可以在此菜單中選擇要載入的內(nèi)核。
4.然后,引導(dǎo)加載程序?qū)⒔鈮嚎s并載入內(nèi)核。內(nèi)核將首先載入內(nèi)核模塊,然后檢測硬件(軟驅(qū)、硬盤、網(wǎng)絡(luò)適配器等),檢驗(yàn)硬件配置,然后掃描和載入設(shè)備驅(qū)動(dòng)程序。
5.在此階段,內(nèi)核將裝入根文件系統(tǒng)和系統(tǒng)文件。在重新編譯期間,可以(或通過其他程序)配置系統(tǒng)文件的位置。如果載入失敗,kernel panic 將出現(xiàn),并且系統(tǒng)將凍結(jié)(freeze)。這是先前提到的載入失敗類型。
本新聞共
5頁,當(dāng)前在第
1頁
1 2 3 4 5