- RHCSARHCE 紅帽Linux認(rèn)證學(xué)習(xí)指南(第7版)EX200 & EX300
- (美)Michael Jang等
- 6578字
- 2020-11-29 00:30:08
認(rèn)證目標(biāo)5.02 引導(dǎo)程序與GRUB 2程序
Red Hat企業(yè)版Linux(RHEL)的標(biāo)準(zhǔn)引導(dǎo)程序是GRUB 2,它是統(tǒng)一引導(dǎo)加載程序版本2(GRand Unified Bootloader version 2)的縮寫符。根據(jù)Red Hat考試的要求,RHCSA考試要求考生知道如何通過GRUB 2菜單引導(dǎo)到不同的目標(biāo),以及診斷并且糾正由引導(dǎo)程序錯(cuò)誤引起的引導(dǎo)失敗。RHEL 6默認(rèn)使用GRUB版本1。在該版本中,相應(yīng)的配置文件比較容易理解和個(gè)性化。但是,雖然GRUB 2.0的菜單與在RHEL 6中類似,但配置引導(dǎo)程序需要的步驟卻相差很大,本章后面將看到這一點(diǎn)。
5.2.1 GRand統(tǒng)一引導(dǎo)加載程序——GRUB
Red Hat已將GRUB 2實(shí)現(xiàn)為其Linux發(fā)行版的唯一引導(dǎo)程序。通常情況下將其配置為引導(dǎo)到一個(gè)默認(rèn)的內(nèi)核。GRUB 2會在/boot目錄中找到配置并且顯示一個(gè)菜單,此菜單看起來與圖5-2相似。我們可以利用GRUB 2菜單引導(dǎo)在Linux安裝過程中檢測到的任何操作系統(tǒng),或者其他任何已經(jīng)添加到合適配置文件中的操作系統(tǒng)。
GRUB 2相當(dāng)靈活。不僅可以從CLI輕松地生成配置,而且可以直接通過GRUB 2菜單進(jìn)行編輯。在圖5-2顯示菜單中,可以按E鍵臨時(shí)編輯配置文件,或按C鍵打開GRUB 2命令提示符。本節(jié)關(guān)注如何引導(dǎo)到不同的systemd目標(biāo)。
引導(dǎo)到不同目標(biāo)
為把一個(gè)參數(shù)通過GRUB 2傳遞給內(nèi)核,在第一個(gè)GRUB菜單中按E鍵。這允許編輯要發(fā)送給內(nèi)核的引導(dǎo)參數(shù)。找到以指令linux16開頭的一行。必要時(shí)使用下方向鍵向下滾動。然后會看到如下的一個(gè)命令行:
linux16 /vmlinuz-3.10.0-123.el7.x86_64 root=/dev/mapper/rhel-root ro rd.lvm.lv=rhel/root vconsole.font=latarcyrheb-sun16 rd.lvm.lv=rhel/swap crashkernel=auto vconsole.keymap=uk rhgb quiet LANG=en_GB.UTF-8
這里出現(xiàn)的許多信息,稍后將要解釋。對于RHCSA考試,真正重要的是在該行的末尾添加更多的命令。例如,如果在這一行的末尾添加字符串systemd.unit=emergency.target,然后按Ctrl+X,則Linux就會以緊急目標(biāo)模式啟動,在此模式下將運(yùn)行一個(gè)急救shell。
在緊急目標(biāo)模式中,輸入exit。系統(tǒng)將進(jìn)入默認(rèn)目標(biāo),通常是多用戶或圖形目標(biāo)。如果已做某些修改或者已對分區(qū)做過修理,則下一步就是用systemctl reboot命令重新引導(dǎo)計(jì)算機(jī)。在某些情況下,在Red Hat考試中所做的修改必須重新引導(dǎo)后才可以得到驗(yàn)證。
實(shí)際經(jīng)驗(yàn)
在RHEL 7中,shutdown、reboot和halt命令是systemctl的符號鏈接。它們的效果分別與systemctl poweroff、systemctl reboot和systemctl halt命令相同。
考試提示
在RHCSA考試中,所做的修改必須在重新引導(dǎo)后依然有效。因此,應(yīng)該重啟系統(tǒng)至少一次,以確定即使在重新引導(dǎo)后,各個(gè)需求也能滿足。
在一定程度上,systemd目標(biāo)的概念與RHEL 6中的運(yùn)行級類似,本章稍后將詳細(xì)介紹。現(xiàn)在,只需要知道當(dāng)RHEL 7已設(shè)置為引導(dǎo)到一個(gè)GUI環(huán)境時(shí),則默認(rèn)它會配置為引導(dǎo)到圖形目標(biāo)。通過在內(nèi)核命令行的末尾添加字符串systemd.unit=name.target,可以改變這個(gè)目標(biāo)。
如果在系統(tǒng)引導(dǎo)到GUI環(huán)境的過程中出現(xiàn)問題,則首先在內(nèi)核命令行的末尾添加systemd.unit=multi-user.target。如果引導(dǎo)成功,則RHEL 7會引導(dǎo)到文本模式,即一個(gè)命令行的基于控制臺的登錄。
如果需要直接訪問恢復(fù)shell,則要在內(nèi)核命令行末尾添加字符串systemd.unit=rescue.target。在很少情況下系統(tǒng)會出現(xiàn)嚴(yán)重的故障,它們甚至無法引導(dǎo)到急救目標(biāo)。這時(shí)可以使用其他兩個(gè)選項(xiàng):
● systemd.unit=emergency.target 除了以只讀模式掛載root文件系統(tǒng)外,不掛載其他任何文件系統(tǒng)。
● init=/sysroot/bin/sh 啟動shell并以只讀模式掛載root文件系統(tǒng),不需要口令。
緊急和急救目標(biāo)需要使用root管理員口令進(jìn)行登錄并獲得完整的root管理員權(quán)限。如果忘記了root管理員口令,需要在內(nèi)核命令行的末尾添加字符串init=/sysroot/bin/sh或rd.break,然后按照練習(xí)5-2進(jìn)行操作。因?yàn)檫@支持完整的管理員權(quán)限,包括修改root管理員口令,所以使用口令保護(hù)GRUB 2菜單很重要。一些人能夠修改引導(dǎo)順序并使用可引導(dǎo)的U盤實(shí)現(xiàn)相同目的,所以保護(hù)BIOS或UEFI并確保系統(tǒng)僅在引導(dǎo)本地磁盤時(shí)不需要口令也非常重要。
現(xiàn)在已經(jīng)知道了如何在引導(dǎo)過程中引導(dǎo)到不同的目標(biāo)。正如Red Hat考試培訓(xùn)課程指出的,把以下明確作為RHCSA考試的一個(gè)要求:
手動把系統(tǒng)引導(dǎo)到不同的目標(biāo)。
考試提示
Red Hat考試是“閉卷考試”。雖然在考試中能夠使用在RHEL安裝中可找到的所有文檔,但是在恢復(fù)過程或緊急過程中,不能訪問man幫助文檔或其他文檔資源。因此,不借助任何文檔完成本章的練習(xí)極其重要。考生應(yīng)該記住引導(dǎo)進(jìn)入緊急shell或者恢復(fù)root管理員口令的步驟;否則,不只在RHCSA考試中會遇到麻煩,在現(xiàn)實(shí)工作中履行自己作為Linux系統(tǒng)管理員的職責(zé)時(shí)也會出現(xiàn)問題。
5.2.2 練習(xí)5-1:將系統(tǒng)引導(dǎo)到不同的目標(biāo)
如何引導(dǎo)到不同的systemd目標(biāo)是一項(xiàng)關(guān)鍵技術(shù)。本練習(xí)假設(shè)你已經(jīng)按照第2章的要求配置了RHEL 7,它把圖形化目標(biāo)設(shè)為默認(rèn)目標(biāo)。執(zhí)行l(wèi)s -l /etc/systemd/system/default.target命令確認(rèn)這一點(diǎn)。如果當(dāng)前系統(tǒng)運(yùn)行在默認(rèn)設(shè)置下,則此文件應(yīng)該是/usr/lib/systemd/system目錄中的graphical.target文件的符號鏈接。也可以運(yùn)行以下命令:
# systemctl get-default
它應(yīng)當(dāng)返回字符串“graphical.target”。現(xiàn)在開始這個(gè)練習(xí)。
(1)使用reboot命令重新引導(dǎo)系統(tǒng)。
(2)當(dāng)看到以下消息時(shí),必須按任意鍵進(jìn)入GRUB菜單:
The selected entry will be started automatically in 5s.
(3)按E鍵編輯當(dāng)前菜單項(xiàng)。
(4)使用下方向鍵向下滾動,定位到以linux16開頭的一行。首先刪除內(nèi)核選項(xiàng)rhgb quiet。然后,在該行末尾處輸入systemd.unit=multi-user.target,然后按Ctrl+X引導(dǎo)此內(nèi)核。
(5)注意觀察引導(dǎo)消息。會看到什么樣的登錄屏幕?
(6)登錄此系統(tǒng)。可用使用任何現(xiàn)有的賬戶。
(7)運(yùn)行reboot重新啟動系統(tǒng)。
(8)重復(fù)步驟(2)到步驟(4),但是向內(nèi)核傳遞systemd.unit=rescue.target選項(xiàng),以便把系統(tǒng)引導(dǎo)救援目標(biāo)。
(9)注意觀察引導(dǎo)消息,會出現(xiàn)哪種類型的登錄屏幕?掛載了哪些文件系統(tǒng)?
(10)重復(fù)步驟(2)到步驟(4),但向內(nèi)核傳遞systemd.unit=emergency.target選項(xiàng),以便把系統(tǒng)引導(dǎo)到緊急目標(biāo)。
(11)注意觀察引導(dǎo)消息,會出現(xiàn)哪種類型的登錄屏幕?需要登錄嗎?掛載了哪些文件系統(tǒng)?
(12)重復(fù)步驟(2)到步驟(4),但是這次在內(nèi)核那一行中添加rd.break。
(13)注意觀察引導(dǎo)消息,會出現(xiàn)哪種類型的登錄屏幕?需要登錄嗎?root文件系統(tǒng)是從硬盤掛載的嗎?
(14)運(yùn)行exit繼續(xù)引導(dǎo)過程。
(15)重復(fù)步驟(2)到步驟(4),但是傳遞字符串init=/sysroot/bin/sh,把這個(gè)系統(tǒng)引導(dǎo)到緊急shell。
(16)注意觀察引導(dǎo)消息,會出現(xiàn)哪種類型的登錄屏幕?
(17)輸入reboot退出并重啟系統(tǒng)。
5.2.3 練習(xí)5-2:恢復(fù)root口令
如果將RHEL 7系統(tǒng)引導(dǎo)到救援或緊急目標(biāo),會提示輸入root口令。如果忘了這個(gè)口令該怎么辦?本練習(xí)將說明如何為root用戶重置丟失的口令。在口令恢復(fù)過程中,很可能無法查看文檔。因此,應(yīng)當(dāng)認(rèn)真練習(xí)下面的過程,直到能夠在發(fā)生危急情況時(shí)完成此過程:
(1)使用下面的命令,將root口令改為一個(gè)隨機(jī)字符串。此命令對你隱藏隨機(jī)口令:
# pwmake 128 | passwd --stdin root
(2)退出會話。試著作為root用戶再次登錄。使用舊口令將無法登錄系統(tǒng)。
(3)重新引導(dǎo)服務(wù)器。
(4)看到下面的消息時(shí),按下按鍵來訪問GRUB菜單:
The selected entry will be started automatically in 5s.
(5)按E鍵編輯當(dāng)前菜單項(xiàng)。
(6)使用下方向鍵向下滾動,找到以linux16開頭的一行。按Ctrl+E或End鍵定位到該行末尾,然后輸入字符串rd.break。
(7)按Ctrl+X鍵引導(dǎo)系統(tǒng)。
(8)rd.break指令在正確掛載root文件系統(tǒng)之前中斷引導(dǎo)過程。運(yùn)行l(wèi)s /sysroot命令確認(rèn)這一點(diǎn)。如果知道root文件系統(tǒng)的內(nèi)容,則該命令的輸出看起來會很熟悉。
(9)以讀寫模式重新掛載root /sysroot文件系統(tǒng),將根目錄改為/sysroot:
# mount -o remount, rw /sysroot # chroot /sysroot
(10)修改root口令:
# passwd
(11)因?yàn)镾ELinux沒有運(yùn)行,所以passwd命令不保留/etc/passwd文件的上下文。為確保用正確的SELinux上下文給/etc/passwd文件添加標(biāo)簽,使用下面的命令,告訴Linux在下次引導(dǎo)時(shí)給所有文件重新賦予標(biāo)簽:
# touch /.autorelabel
(12)輸入exit,關(guān)閉chroot監(jiān)獄,然后再次輸入exit,以重新引導(dǎo)系統(tǒng)。
(13)SELinux可能需要幾分鐘的時(shí)間來給所有文件重新賦予標(biāo)簽。看到登錄提示后,確認(rèn)能夠作為root用戶登錄系統(tǒng)。
5.2.4 修改系統(tǒng)的引導(dǎo)程序
RHCSA考試專門要求考生必須了解如何“修改系統(tǒng)的引導(dǎo)程序”。這意味著考生需要掌握GRUB 2配置文件的細(xì)節(jié)。這些配置信息保存在/etc/grub2.cfg文件中,該文件是一個(gè)符號鏈接,指向在BIOS模式下配置的系統(tǒng)的/boot/grub2/grub.cfg文件,或者使用UEFI引導(dǎo)管理器的服務(wù)器的/boot/efi/EFI/redhat/grub.cfg文件。在本章剩余部分,我們假定所運(yùn)行的是傳統(tǒng)的基于BIOS的系統(tǒng),或者是在BIOS模式下運(yùn)行支持UEFI的系統(tǒng)。這里將/boot/grub2/grub.cfg作為配置文件的標(biāo)準(zhǔn)路徑。
grub.cfg文件分為頭部和不同的menuentry節(jié),每一節(jié)對應(yīng)于系統(tǒng)上安裝的一個(gè)內(nèi)核。圖5-3顯示了該文件的一個(gè)節(jié)選。每個(gè)menuentry節(jié)都包含以linux16和initrd16指令開頭的兩行,指出了內(nèi)核的路徑以及在引導(dǎo)過程中加載的RAM磁盤文件系統(tǒng)的路徑。在前一節(jié)看到,linux16這一行特別重要。在引導(dǎo)過程中可以編輯這個(gè)條目,以傳遞額外的內(nèi)核參數(shù),或者引導(dǎo)進(jìn)入非默認(rèn)的systemd目標(biāo)。

圖5-3 grub.cfg文件的節(jié)選
雖然grub.cfg文件中的選項(xiàng)和指令的數(shù)量很多,但是不必驚慌。我們并不需要直接修改此文件。正確的方法是使用grub2-mkconfig工具,基于/etc/default/grub配置文件和/etc/grub.d/目錄中的腳本生成該文件的新版本。相對于grub.cfg文件,/etc/default/grub更容易理解、更安全,也更便于編輯。修改了/etc/default/grub文件后,運(yùn)行下面的命令來生成新的GRUB配置文件:
# grub2-mkconfig -o /boot/grub2/grub.cfg
實(shí)際經(jīng)驗(yàn)
不要手動編輯/etc/grub2/grub.cfg文件。該文件是在安裝或者更新內(nèi)核時(shí)自動生成的,所以直接對該文件做出的修改將會丟失。使用grub2-mkconfig和/etc/default/grub文件來修改grub.cfg。
接下來對典型的/etc/default/grub文件進(jìn)行詳細(xì)分析:
GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR="$(sed 's, release .*$, , g' /etc/system-release)" GRUB_DEFAULT=saved GRUB_DISABLE_SUBMENU=true GRUB_TERMINAL_OUTPUT="console" GRUB_CMDLINE_LINUX="rd.lvm.lv=rhel/root vconsole.font=latarcyrheb-sun16 ? rd.lvm.lv=rhel/swap crashkernel=auto vconsole.keymap=uk rhgb quiet" GRUB_DISABLE_RECOVERY="true"
在第一行,GRUB_TIMEOUT變量指定了等待多少秒后,GRUB 2會自動引導(dǎo)默認(rèn)操作系統(tǒng)。按任意鍵可中斷倒數(shù)過程。如果此變量被設(shè)為0, GRUB 2將不顯示可引導(dǎo)的內(nèi)核列表,除非在BIOS初始屏幕中按下并按住一個(gè)字母數(shù)字按鍵。
在標(biāo)準(zhǔn)的RHEL安裝上,GRUB_DISTRIBUTOR變量的值返回“Red Hat Enterprise Linux Server”,并顯示在每個(gè)內(nèi)核啟動的條目的前面。如果愿意,可將此條目修改為你選擇的任意字符串。
下一個(gè)指令是GRUB_DEFAULT,它與GRUB 2在引導(dǎo)時(shí)加載的默認(rèn)內(nèi)核有關(guān)。值“saved”告訴GRUB 2在/boot/grub2/grubenv文件中尋找saved_entry變量。每次安裝一個(gè)新的內(nèi)核時(shí),將用最新的內(nèi)核的名稱更新該變量。
通過使用grub2-set-default命令,可更新saved_entry變量,并告訴GRUB 2引導(dǎo)一個(gè)不同的默認(rèn)內(nèi)核。例如,
# grub2-set-default 1
將/etc/grub2.cfg中的第二個(gè)菜單項(xiàng)設(shè)為默認(rèn)內(nèi)核。這可能令人感到困惑,其原因在于,GRUB 2是從0開始計(jì)數(shù)的。因此,grub2-set-default 0命令指向/etc/grub2.cfg中的第一個(gè)可用菜單項(xiàng)。類似的,如果配置文件中包含更多項(xiàng),則grub2-set-default 1命令指向第二個(gè)內(nèi)核項(xiàng),依此類推。
/etc/default/grub中的下一行定義了變量GRUB_DISABLE_SUBMENU。該變量默認(rèn)被設(shè)為true,以便在引導(dǎo)時(shí)禁用任何子菜單項(xiàng)。然后是指令GRUB_TERMINAL_OUTPUT,它告訴GRUB 2使用文本控制臺作為默認(rèn)的輸出終端。文件中定義的最后一個(gè)變量是GRUB_DISABLE_RECOVERY,它禁止生成恢復(fù)菜單項(xiàng)。
指令GRUB_CMDLINE_LINUX更值得關(guān)注,它指定了要傳遞給Linux內(nèi)核的選項(xiàng)。例如,rd.lvm.lv給出了包含root文件系統(tǒng)和交換分區(qū)的邏輯卷的名稱。接下來的選項(xiàng)vconsole.font和vconsole.keymap分別列出默認(rèn)字體和鍵盤映射。crashkernel選項(xiàng)為kdump保留一些內(nèi)存,當(dāng)系統(tǒng)崩潰時(shí),調(diào)用kdump來捕捉內(nèi)核轉(zhuǎn)儲。最后,在該行末尾,rhgb quiet指令默認(rèn)啟用Red Hat圖形化引導(dǎo)并隱藏引導(dǎo)消息。如果想啟用冗長的引導(dǎo)消息,可在該行中刪除quiet選項(xiàng)。
5.2.5 如何更新GRUB
如果用戶以前曾經(jīng)在MBR上安裝了另一個(gè)引導(dǎo)加載程序,如微軟的NTLDR或BOOTMGR,只需要運(yùn)行g(shù)rub2-install命令。如果它沒有自動把GRUB 2指針寫入到MBR上或者存在多個(gè)可用的硬盤驅(qū)動器,則需要插入/dev/sdb這樣的硬盤驅(qū)動器。也可以在移動硬盤建立GRUB 2,只需要在命令中指定此設(shè)備。
當(dāng)使用grub2-mkconfig生成GRUB 2配置文件時(shí),不需要額外命令。MBR的指針會自動讀取/boot/grub2/grub.cfg文件的最新版本。
5.2.6 GRUB 2的命令行
grub.cfg配置文件中的一個(gè)錯(cuò)誤可能會導(dǎo)致系統(tǒng)無法啟動。例如,如果GRUB 2確定錯(cuò)誤卷為根分區(qū)(/),則Linux會在引導(dǎo)過程中掛起。/boot/grub2/grub.cfg文件的其他配置錯(cuò)誤也會在引導(dǎo)過程中引起內(nèi)核恐慌。
既然我們已經(jīng)分析了GRUB 2配置文件,就能看到此文件的錯(cuò)誤帶來的影響。如果一些文件名或分區(qū)出現(xiàn)錯(cuò)誤,GRUB 2無法找到類似Linux內(nèi)核等關(guān)鍵文件。如果GRUB 2配置文件完全丟失,將看到下面的提示:
grub>
該菜單顯示時(shí),可按C鍵訪問GRUB 2命令行。想要查看可用的命令列表,只要在grub>提示后按下Tab鍵,或者輸入help命令。
命令補(bǔ)全功能也是可用的。例如,如果忘記了內(nèi)核文件的名字,則輸入linux /,然后按Tab鍵,就可以看到/boot目錄中的可用文件。
使用ls命令,應(yīng)該能夠在標(biāo)準(zhǔn)PC機(jī)上的BIOS/UEFI菜單檢測到全部的硬盤驅(qū)動器。舉個(gè)例子,我們來找到該系統(tǒng)上的/boot分區(qū)和grub.cfg文件。默認(rèn)情況下,/boot目錄是掛載在一個(gè)獨(dú)立的分區(qū)上。首先,在grub>命令行中運(yùn)行l(wèi)s:
grub> ls (proc)(hd0)(hd0, msdos1)(hd0, msdos2)
字符串hd0表示第一個(gè)硬盤,msdos1表示第一個(gè)分區(qū),是用MBR格式(msdos)創(chuàng)建的。如果使用新的GPT分區(qū)格式對服務(wù)器進(jìn)行分區(qū),GRUB 2將識別第一個(gè)分區(qū)為gpt1而不是msdos1。類似地,hd0, msdos2表示第一個(gè)硬盤上的第二個(gè)分區(qū)。
接下來,使用這些信息找到grub.cfg文件:
grub> ls(hd0, msdos1)/grub2/grub.cfg grub.cfg
如果此文件不在指定分區(qū)上,則會看到“error: file '/grub2/grub.cfg' not found”錯(cuò)誤消息。如果指定分區(qū)不包含有效的文件系統(tǒng),還可能看到“error: unknown filesystem”錯(cuò)誤消息。
我們知道/boot目錄在(hd0, msdos1)上。為確認(rèn)grub.cfg的位置,執(zhí)行下面的命令:
grub> cat(hd0, msdos1)/grub2/grub.cfg
在輸出中可看到grub.cfg文件的內(nèi)容。按下按鍵滾動該文件的內(nèi)容,直到回到GRUB 2命令行。
還有一種方法可以確定/boot目錄所在的分區(qū)。執(zhí)行search.file命令可找到grub.cfg:
grub> search.file /grub2/grub.cfg
GRUB 2應(yīng)該返回包含/boot目錄的分區(qū)。在本例中,就是第一個(gè)硬盤上的第一個(gè)分區(qū):
hd0, msdos1
現(xiàn)在可以用GRUB 2配置文件中的那些命令從grub>命令行引導(dǎo)Linux。如果通常情況下頂級根目錄也掛載在一個(gè)分區(qū)上,則甚至可以用下面的命令驗(yàn)證/etc/fstab文件的內(nèi)容:
grub> cat(hd0, msdos2)/etc/fstab
如果根文件系統(tǒng)包含在一個(gè)LVM卷上,則上面的命令將返回“error: unknown filesystem”消息。為解決這個(gè)問題,用下面的命令加載LVM模塊:
grub> insmod lvm
現(xiàn)在,ls命令的輸出中應(yīng)該也會包含邏輯卷:
grub> ls (proc)(hd0)(hd0, msdos2)(hd0, msdos1)(lvm/rhel-root)(lvm/rhel-swap)
最后,為了輸出/etc/fstab的內(nèi)容,執(zhí)行下面的命令:
grub> cat(lvm/rhel-root)/etc/fstab
5.2.7 練習(xí)5-3:使用GRUB 2命令行
本練習(xí)將手動引導(dǎo)RHEL 7。觀察/etc/grub2.cfg文件的內(nèi)容,并找出需要用到的命令。現(xiàn)在按以下步驟操作:
(1)引導(dǎo)系統(tǒng)。當(dāng)看到屏幕頂部出現(xiàn)以下行內(nèi)容時(shí),按任意鍵進(jìn)入GRUB 2菜單:
The selected entry will be started automatically in 5s.
(2)按下C鍵切換到GRUB命令行接口。將會看到grub>提示符。
(3)輸入下面的命令來加載LVM模塊:
grub> insmod lvm
(4)列出所有分區(qū)和邏輯卷:
grub> ls
(5)找出根分區(qū)。其名稱可能類似于(lvm/rhel-root)。可能需要做幾次嘗試才能找出根分區(qū)(例如,試著從GRUB 2之前列出的所有設(shè)備中顯示/etc/fstab文件)。
grub> cat(lvm/rhel-root)/etc/fstab
(6)將root變量設(shè)為包含根文件系統(tǒng)的設(shè)備:
grub> set root=(lvm/rhel-root)
(7)輸入linux命令,指定內(nèi)核和根目錄分區(qū)。這一行很長,但是可以使用命令補(bǔ)全(按Tab鍵)來快速輸入。另外,此行中重要的地方僅是內(nèi)核文件和頂層根目錄的位置。
linux(hd0, msdos1)/vmlinuz-3.10.0-123.el7.x86_64? root=/dev/mapper/rhel-root
(8)輸入initrd命令,指定初始RAM磁盤命令和文件位置。同樣,可以使用Tab鍵來補(bǔ)全文件名。
initrd(hd0, msdos1)/initramfs-3.10.0-123.el7.x86_64.img
(9)現(xiàn)在輸入boot命令。如果成功,Linux現(xiàn)在可以引導(dǎo)選定的內(nèi)核和初始的RAM硬盤,就如我們從GRUB 2配置菜單選擇選項(xiàng)那樣。
5.2.8 重新安裝GRUB 2
在一些情況中,可能需要從頭重新安裝GRUB 2。如果grub2-mkconfig不能工作,或者由于腳本文件損壞或不正確,其生成的配置文件包含錯(cuò)誤,就可能發(fā)生這種情況。此時(shí),需要重新安裝grub2-tools RPM包。在完成此操作前,顯示并刪除所有GRUB 2配置和腳本文件。這可以使用下面的命令完成:
# rpm -qc grub2-tools /etc/default/grub /etc/grub.d/00_header /etc/grub.d/10_linux /etc/grub.d/20_linux_xen /etc/grub.d/20_ppc_terminfo /etc/grub.d/30_os-prober /etc/grub.d/40_custom /etc/grub.d/41_custom # rm -f /etc/default/grub # rm -f /etc/grub.d/*
然后,執(zhí)行下面的命令重新安裝GRUB 2:
# yum reinstall grub2-tools
第7章將詳細(xì)介紹rpm和yum命令。
最后,重新生成grub.cfg配置文件。在運(yùn)行傳統(tǒng)的BIOS固件的機(jī)器上,grub2-mkconfig命令如下所示:
# grub2-mkconfig -o /boot/grub2/grub.cfg
當(dāng)然,如果GRUB 2配置文件丟失,無法引導(dǎo)系統(tǒng)并顯示GRUB 2菜單,就可能需要求助于另一個(gè)選項(xiàng):急救模式。
5.2.9 從GRUB 2引導(dǎo)的一個(gè)選項(xiàng):急救模式
RHCE考試培訓(xùn)課程的以前版本中的故障排除考試目標(biāo)要求考生能從完全引導(dǎo)失敗的過程中恢復(fù)系統(tǒng),例如GRUB 2配置文件損壞或丟失。換言之,當(dāng)我們從前面提到的grub>提示符直接引導(dǎo)系統(tǒng)失敗后,就需要使用一個(gè)所謂的急救模式的選項(xiàng),這需要訪問DVD安裝盤或網(wǎng)絡(luò)引導(dǎo)盤。
考試提示
RHCSA和RHCE認(rèn)證目標(biāo)不再包含與急救模式有關(guān)的內(nèi)容。但是,由于對不能啟動系統(tǒng)的急救是一項(xiàng)重要技能,因此它可能會出現(xiàn)在這些考試之一的未來版本中。
為此,需要從這些選項(xiàng)中選擇一個(gè)引導(dǎo)媒介。當(dāng)我們看到安裝屏幕出現(xiàn)以下選項(xiàng)時(shí):
Install Red Hat Enterprise Linux 7.0 Test this media & install Red Hat Enterprise Linux 7.0 Troubleshooting
選擇Troubleshooting選項(xiàng),并按下回車鍵。將看到包含以下選項(xiàng)的屏幕:
Install Red Hat Enterprise Linux 7.0 in basic graphics mode Rescue a Red Hat Enterprise Linux system Run a memory test Boot from local drive Return to main menu
選擇Rescue a Red Hat Enterprise Linux system選項(xiàng),并按回車鍵。急救模式會在本地機(jī)上運(yùn)行RHEL 7操作系統(tǒng)的一個(gè)最小穩(wěn)定版本。實(shí)際上,它是其他Linux發(fā)行版(如Knoppix、Ubuntu甚至科學(xué)Linux重構(gòu)發(fā)行版)上Live DVD可用媒介的一個(gè)文本版本。
實(shí)際經(jīng)驗(yàn)
對于RHEL 7系統(tǒng)來說,最好使用RHEL 7的急救媒介。這些媒介使用一個(gè)由Red Hat編譯的內(nèi)核,并為支持它的軟件進(jìn)行定制。盡管如此,像Knoppix等發(fā)行版本都是很不錯(cuò)的選擇。
可使用急救環(huán)境來恢復(fù)無法引導(dǎo)的系統(tǒng)。如果之前使用過RHEL 6中的急救模式,在這里就可以如魚得水。圖5-4顯示了大部分情況下的下一個(gè)步驟。

圖5-4 急救環(huán)境的選項(xiàng)
Continue選項(xiàng)(如圖5-5所示)將檢測到的所有卷掛載為/mnt/sysimage目錄的子目錄。Read-Only選項(xiàng)以只讀模式掛載檢測到的卷。Skip選項(xiàng)直接移動到命令行接口。選擇Continue。確認(rèn)之后,將看到一個(gè)shell提示符,如圖5-6所示。

圖5-5 在急救環(huán)境中掛載根文件系統(tǒng)

圖5-6 急救環(huán)境的shell
在shell提示接口中輸入chroot /mnt/sysimage命令。由于系統(tǒng)的普通頂層根目錄已掛載到/mnt/sysimage目錄,因此chroot命令修改根目錄,就像/mnt/sysimage文件系統(tǒng)被掛載到/之下。
一定要練習(xí)本節(jié)介紹的有關(guān)GRUB 2的內(nèi)容,這有助于你在真正遇到問題時(shí)進(jìn)行恢復(fù),Red Hat也聲稱其考試都是“真實(shí)環(huán)境的任務(wù)”。但是,不要假定在Red Hat考試期間能夠訪問CD或DVD。如果急救媒介不可用,則說明至少還有一種方法可以解決問題。
- 嵌入式Linux開發(fā)技術(shù)
- Linux從零開始學(xué)(視頻教學(xué)版)
- BPEL and Java Cookbook
- 完美應(yīng)用RHEL 8
- jQuery UI Cookbook
- Red Hat Enterprise Linux 6.4網(wǎng)絡(luò)操作系統(tǒng)詳解
- VMware Horizon View Essentials
- Linux軟件管理平臺設(shè)計(jì)與實(shí)現(xiàn)
- Hadoop Real-World Solutions Cookbook
- Web Penetration Testing with Kali Linux(Third Edition)
- VMware Horizon Mirage Essentials
- Less Web Development Essentials
- Serverless Architectures with Kubernetes
- 計(jì)算機(jī)操作系統(tǒng)(第3版)(微課版)
- 物聯(lián)網(wǎng)操作系統(tǒng)AliOS Things探索與實(shí)踐