發現(xiàn)Linux系統在啓動過程中會(huì)出現(xiàn↕♥)一(yī)些(xiē)故障,導緻系統無法正常啓動,在這(zhè)裡(lǐ)寫了(le)幾個(&☆☆αgè)應用(yòng)單用(yòng)戶&÷ '模式、GRUB命令操作(zuò)、Linux救援模式的(de)故障修 ∏$複案例幫助大(dà)家(jiā)了(le)解此類問(₩♣₽wèn)題的(de)解決。
(一(yī))單用(yòng)戶模式
Linux系統提供了(le)單用(yòng)戶模式"•∞(類似Windows安全模式),可(kě)以在最小(xiǎo)環™¶Ω♣境中進行(xíng)系統維護。在單用(yπ∑¶↔òng)戶模式(運行(xíng)級别1)中,Linux引導進入根sh✘<ell,網絡被禁用(yòng),隻有(yǒu)少(shǎo)數(shù)進程運行(x₽'íng)。單用(yòng)戶模式可(kě)以用(yòng)來(lái)修改文(wén)件(ji$π&àn)系統損壞、還(hái)原配置文(wén)件(jiàn)、移動用(¶α≠↑yòng)戶數(shù)據等。
以下(xià)列舉了(le)幾個(gè)單用(yòng)戶模式修÷®★複系統故障的(de)典型案例:
案例一(yī):root密碼忘記
在單用(yòng)戶模式中,Linux不(bù)≈↑€β需要(yào)root密碼(Red Hat系統不(bù)需要(yào♠φ)root密碼,但(dàn)SuSe則需要(yào),不(bù)同L↑®→inux系統稍有(yǒu)差别,本文(wén)以Fedora C$Ωφ×ore 6為(wèi)例講解),這(zhè)使更©©≤改root密碼非常容易。了(le)解當系統引導進入多(duō)用(yòng)戶模式失敗時≥±(shí),如(rú)何進入單用(yòng)戶模式,非常重要(yào)。
1、 在系統啓動過程中,會(huì)出現(xiàn)開(kāi)始界面,按任意鍵,進入G☆✘'RUB菜單選項。(若希望以後無此提示,直接進入GRUB菜單選項,删除≠∏≥ 配置文(wén)件(jiàn)grub.conf中“hiddenmenu”項即可(kě)。) ®
2、 按“e”鍵編輯GRUB引導菜單選項,按“e”鍵後的(de)GRUB屏幕。通(tōng)過箭ε¶λλ頭鍵下(xià)移到(dào)kernel"<₩行(xíng),并按“e”鍵,
3、在尾行(xíng)光(guāng)标處添加single,按回車(chē)鍵返回前一₽γ≤★(yī)個(gè)屏幕,按“b”鍵進行(xíng)引導,則系統自(zì)動進入β ∞♠單用(yòng)戶模式,如(rú)果要($ yào)改變root密碼,則執行(xíng)命令:sh♥≤©-3.1# passwd root
更改成功後,執行(xíng)命令exit退出重啓即可(kě)。
大(dà)家(jiā)可(kě)以在單用(y↕✔✔σòng)戶模式中去(qù)糾正阻止系統正常啓↓↕動的(de)很(hěn)多(duō)問(wèn£₽←)題,比如(rú):
1、 禁用(yòng)可(kě)能(néng)中止系 λ統運行(xíng)的(de)服務如(rú)禁用(yòng)Samba服務,則執行(xíng):s÷φδ♦h-3.1# chkconfig smb off下(xià)次系統引導λ§就(jiù)不(bù)會(huì)啓動Samba服務了(le)λφ Ω。
2、 更改系統缺省運行(xíng)級如(rú)果X Window無法啓動或者出✔•∏ 現(xiàn)故障,可(kě)以編輯/etc/inittab文(wén)件(jiàΩε n),采用(yòng)文(wén)本方式登錄,更改initdefault引¶φ導級别為(wèi)3:id:3:initdefa <ult:
案例二:硬盤扇區(qū)錯(cuò)亂
在啓動過程中最容易遇到(dào)的(de)問(wèn)題就(jiù)是¥✘♣(shì)硬盤可(kě)能(néng)有(yǒ→δ♥u)壞道(dào)或扇區(qū)錯(cuò)亂(數(shù)據損≈£壞)的(de)情況,這(zhè)種情況多(duō)由于異常斷電(diàn)、不(bù)正常關機 ©Ω(jī)導緻。
此種問(wèn)題發生(shēng),在系統啓動的(" © de)時(shí)候,屏幕會(huì)顯示φ&σ:
Press root password or ctrl+D:
此時(shí)輸入root密碼系統自(zì)動進入單用σ↕(yòng)戶模式,輸入:
fsck -y /dev/hda6
(fsck為(wèi)文(wén)件(jiàn)系統檢測修≥π複命令,“-y”設定檢測到(dào)錯(cuò)誤自(zì)動修複,/dev/hda6為∞λ☆(wèi)發生(shēng)錯(cuò)誤的(de)硬盤分(f♥☆↔ēn)區(qū),請(qǐng)依據具體(tǐ)情況更改此↔✔★參數(shù))
系統修複完成後,用(yòng)命令“reboot”重新啓動即可(kě)。
案例三、GRUB選項設置錯(cuò)誤
“Error 15”顯示系統無法找到(dào)grub.conf中指定的(de)內(nèi)核♠←'。
GRUB引導錯(cuò)誤信息,我們觀察發現(xiàn)因為(wèi)打字錯(cuò)誤,內(♦≠±nèi)核文(wén)件(jiàn)的(de)“vmlinuz”打成了(le)“vmlinux&π≥”,所以系統無法找到(dào)內(nèi)核的(de)可(kě) &執行(xíng)文(wén)件(jiàn)♣ ♦∏。
我們可(kě)以按任意鍵回到(dào)β& GRUB編輯界面,修改此錯(cuò)誤,回車(chē)保存後按“b”鍵即可( ÷♠βkě)正常引導,當然不(bù)要(yào)忘記進入系統後修改€♥×grub.conf文(wén)件(jiàn)中此處錯(cuò)誤。
這(zhè)是(shì)很(hěn)多(duō)初學Linux的(de)用(yònγ<✔g)戶在修改GRUB設置時(shí)很(hěn)容易犯的(dδ✘e)錯(cuò)誤,出現(xiàn)此黑(hēi)屏提示時(shí)注意觀察報(bào)錯(c♦£'♦uò)信息,即可(kě)針對(duì)性修複。
(二)GRUB引導故障排除
我發現(xiàn)有(yǒu)時(shí)Linux啓動後會(huì)直接₽↕®¶進入GRUB命令行(xíng)界面(隻有(←αεyǒu)“grub>”提示符),此時(shí)很(hěn)多(duō)用(yòng)戶"×®≠就(jiù)選擇了(le)重新安裝GRUB甚至重新安裝系統。 ≈§>
其實一(yī)般而言此故障的(de)原因最常見(jiàn)的(de)★≈÷∏有(yǒu)兩個(gè):
一(yī)是(shì)GRUB配置文(wén)件(φ¥jiàn)中選項設置錯(cuò)誤;
二是(shì)GRUB配置文(wén)件(jiàn)丢÷∑失(還(hái)有(yǒu)少(shǎo)數(shù)原因,如(rú)內(nèi)核文(wén)件γλ≤(jiàn)或鏡像文(wén)件(jiàn)損壞、丢失,/boot目錄誤删除等)
如(rú)果是(shì)第一(yī)種情況,可(k✘✘↕ě)以首先通(tōng)過GRUB命令引導系統後€∏≥β修複;若是(shì)第二種情況,則要(yào)使用( ∞✘yòng)Linux救援模式修複了(le₽ε)(本文(wén)後續有(yǒu)描述)。
首先,我們需要(yào)了(le)解GRUB啓動系統的(de)引導過程,grub↕₽♠.conf文(wén)件(jiàn)中主要(yào)的(de)配置選項× 如(rú)下(xià):
(注意,GRUB配置文(wén)件(jiàn)為(wèi)/boot ∏/grub/grub.conf, /etc/grub.conf隻是(shì)此文 ®≈ε(wén)件(jiàn)的(de)軟鏈接) Ω"$×
title Fedora Core (2.6.18-1.2798.f©•¥§c6)
root (hd0,0) γ✔₩
kernel /boot/vmlinuz-≤↕2.6.18-1.2798.fc6 ro root=LABEL=/ rhgb quiet i$nitrd /boot/initrd-2.6.18-1.2 ↓798.fc6.img
其中:
“title”段指定了(le)GRUB引導的(de)系統:∞✔♣'
“root”段指定了(le)/boot分(fēn)區(q©¥¶★ū)所在的(de)位置:
“kernel”段指定了(le)內(nèi) ¥核文(wén)件(jiàn)所在位置,內(nèi)核加載時(shí)權限屬性為(w≠'••èi)隻讀(dú)(“ro”)以及指定根分(fēn™¥)區(qū)所在位置(root=LABEL=/); ✘≥&
“initrd”指定了(le)鏡像文(wén)件(jiàn)所在位置。 ★Ω
所以GRUB在引導時(shí)順序為(wèi)首先加載/α¥±€boot分(fēn)區(qū),然後依次載入內(nèi)核與鏡像文(wén)件(j←☆iàn)。
案例
“title Fedora Core (2.6.18-1.2798.fc6)”段被誤删除
此時(shí),系統啓動後會(huì)自(zì)動進入“GRUB>”命令行(xíng),為(w÷≥πèi)排除故障我們可(kě)以依次做(zuò)如(rú)下(xΩ♣↑ ià)操作(zuò): σ§
1、查找/boot/grub/grub.conf文(wén)件(jiàn)所在分¶$£×(fēn)區(qū)GRUB> find /boot/grub/λβgrub.conf(hd0,0)
2、查看(kàn)grub.conf文(wén)件(jiàn)錯(cuò)誤GRUB>cσ≤₽at (hd0,0)/boot/grub/grub.co<∏×γnf建議(yì)系統安裝設置好(hǎo)後,要(yào)将g≥¶>rub.conf文(wén)件(jiàn)備份,如(rú)果有≈(yǒu)備份文(wén)件(jiàn)如(rú)g∏←εrub.conf.bak,則此時(shí)可(kě)以查看(kàn)備份文(wén)≈₽≥≤件(jiàn),與當前文(wén)件(jiàn)比較,發現(xiàn)錯(cuò>≥ >)誤:GRUB>cat (hd0,0)/boot/grub/gr☆€ub.conf.bak
3、确認錯(cuò)誤後,先通(tōng)過命令行♥÷δε(xíng)方式完成GRUB引導,進入系統後再行(x>♠íng)修複grub.conf文(wén)件(jiàn)錯(cuò$✔ )誤:
1)指定/boot分(fēn)區(qū)root (hd ←"0,0)
2)指定內(nèi)£&☆核加載kernel /boot/vmli✔∏☆>nuz-2.6.18-1.2798.fc6 ro roo→&<t=LABEL=/ rhgb quiet ≈∑
3)指定鏡像文(wén)件(jiàn) ₹σ所在位置initrd /boot/initrd-2.6.18-1.2798.fc±'∏6.img
提示:GRUB支持tab鍵命令補全功能(néng) ♠₹ε
4、從(cóng)/boot分(fēn)區α∞(qū)啓動boot (hd0,0)
命令行(xíng)模式可(kě)以在G←×↑×RUB菜單模式中通(tōng)過按“c”鍵調用(yòng),也(yě)可(kě)以用(yòng)∑£↓于測試新編譯的(de)內(nèi)核(設置kernλ≥ el、initrd引導新內(nèi)核及鏡像文(wén)件φ×(jiàn))。增加對(duì)GRUB引導以及α£Linux系統引導知(zhī)識的(de)了(le)解将對(duì)此類故障排<↑除大(dà)有(yǒu)幫助。
(三)Linux救援模式應用(yòng)
當系統連單用(yòng)戶模式都(dōu)無法進入時(shí)或出現(xiàn)> ₩ GRUB命令行(xíng)也(yě)不(bù)能(n♥™&←éng)解決的(de)引導問(wèn)題,我們就(jiù)需要δ≥(yào)使用(yòng)Linux救援模式來(lái)進行(xíng)故障排除了(le)。 •σδ∑
步驟如(rú)下(xià):
1、将Linux安裝光(guāng)盤(如(rú)果使用(yòng)✘©♦ CD光(guāng)盤,則放(fàng)入第一(yī)張引導光(guāng)盤)放(fàng)¶✔♠₹入光(guāng)驅,設置固件(jiàn)CMOS/BIOS為(wèi)光(guāng)§♦"盤引導,當Linux安裝畫(huà)面出現(xiàn)後,在“α×boot:”提示符後輸入“linux rescue”回車(chē)進入救₽←©援模式。(想了(le)解救援模式詳細信息,還(hái)可∏δ§(kě)以按F5鍵查看(kàn)) ≤
2、系統會(huì)檢ε '±測硬件(jiàn),引導光(guāng)盤上(shàng)的(de)L₹γ₹inux環境,依次提示你(nǐ)選擇救援模式下(xià)使用(yòng)的(ε£de)語言(建議(yì)選擇默認的(de)英文(wén)即可(∑¥kě),根據筆(bǐ)者測試,部分(fēn)Li≈★♠nux系統選擇中文(wén)會(huì)出現(xiàn)亂碼);鍵盤設置用(y∏®πòng)默認的(de)“us”就(jiù)好(hǎo);↑↓♠網絡設置可(kě)以根據需要(yào),大(dà)部分(fēn)故≠₹®障修複不(bù)需要(yào)網絡連接,可(kě) £不(bù)進行(xíng)此項設置,選擇“No”。
3、接下(xià)來(lái)系統将試圖查找根分(fēnπ₹)區(qū),出現(xiàn)挂載提示,設置默認在救援模式,硬盤的(de)根分(fē±♣n)區(qū)将挂載到(dào)光(guāng)盤Linux環→>φ∞境的(de)/mnt/sysimage目錄下(xià),默認選項“cont₽≥©♠inue”表示挂載權限為(wèi)讀(dú)≥φ☆&寫:“Read-only”為(wèi)隻讀(dú),如(rú)果出現( ♣xiàn)檢測失敗可(kě)以選擇“skip”跳(tiào)過≥"。此處,因為(wèi)要(yào)對(duì)系統進行(xíng)修複,所以需要(yào)有(yǒλγu)讀(dú)寫權限,一(yī)般選擇默認¥€選項“continue”。
進入下(xià)一(yī)步後,系統提示執行(xíng)“chr₽∞oot /mnt/sysimage”命令,可(kě)以将根目錄挂載到(dào)我們硬盤系統的(d ε∞®e)根目錄中去(qù)。
案例一(yī):雙系統啓動修複
當我們安裝雙系統環境,先安裝Linux再安裝Windows;或者已經安裝好(h♣×γ∞ǎo)雙系統環境的(de)Windows損壞,在重新安₽≠€≈裝Windows後,保存 GRUB的(de)MBR(Master Boot Recor₩'↕d,主引導記錄)會(huì)被Windows系統的(de)自(zì)∏δβγ舉程序NTLDR所覆蓋,造成Linux系統無法引導。 ÷∏₽
1、如(rú)果要(yào)恢•®複雙系統引導,首先用(yòng)上(shàng)述方法進入救援模式,€↔®執行(xíng)chroot命令如(rú)下(xià):sh-3.1# ch€♦★εroot /mnt/sysimage
2、将根目錄切換到(dào)硬盤系統的(d©'e)根目錄中,然後執行(xíng)grub-inst>♥♦×all命令重新安裝GRUB:sh-3.1# grub-install /dev/hda“/dev♣φ/hda”為(wèi)硬盤名稱,如(rú)使用(yòng)SCSI硬盤或Linux↓¶安裝在第二塊IDE硬盤,此項設置要(yào)做(zuò)相(x☆ iàng)應調整。
3、然後依次執行(xíng)≠™exit命令,退出chroot模式及救援模式(執行(xíng)兩次exit命令):sh-3.≥←↕1# exit系統重啓後,将恢複GRUB引導的(deπ')雙系統啓動。
案例二:系統配置文(wén)件(jiàn)丢失修複
系統在引導期間(jiān),很(hěn)重要(yào)≠的(de)一(yī)個(gè)過程就(jiù)是(shì)in"βit進程讀(dú)取其配置文(wén)件(jiàn)/etc/inittab,啓動系統基本服↔φ≤務程序及默認運行(xíng)級别的(de)服務程序完成÷☆系統引導,如(rú)果/etc/inittab誤删除或修改錯(cuò)誤,Lin&¥☆©ux将無法正常啓動。此時(shí),隻有(yǒu)通(tōng)過救援模式€∑γπ才可(kě)以解決此類問(wèn)題。
/etc/inittab文(wén)件(jiàn) ®$♥丢失引導錯(cuò)誤示例
1、有(yǒu)備份文(wén)件(jiàn)的(de)恢複辦法進入救援模式,執行(xín'≈g)chroot命令後,如(rú)果有(yǒu)此文γ(wén)件(jiàn)的(de)備份(強烈建議(yì)系統中的(de)重要(y×™ào)數(shù)據目錄,如(rú)/etc、/boot等要(yào)進行₩π☆☆(xíng)備份),直接将備份文(wén)件(jiàn)✘÷拷貝回去(qù),退出重啓即可(kě)。♥÷♣
如(rú)果是(shì)配置文(wén)件(jiàn)修改錯(cuò)誤,如(rú₩☆®)比較典型的(de)/boot/grub→Ω/grub.conf及/etc/passwd的(de)文(wén)件(↔πjiàn)修改錯(cuò)誤,也(yě)可(kě)以直接修正恢複。
假設有(yǒu)備份文(wén)件(jiàn)/e™←tc/inittab.bak,則在救援模式下(xià)ε®執行(xíng):sh-3.1# chroot /mnt<ε/sysimage sh-3.1# cp /etc/inittab.ba'∏≤k /etc/inittab
2、沒有(yǒu)備份文(wén)件(jiàn)的(d♥"↕≥e)恢複辦法如(rú)果一(yī)些(xσλ♠iē)配置文(wén)件(jiàn)丢失或軟件(jiàn)誤删除→₩> ,且無備份,可(kě)以通(tōng)過重新安裝軟件(jiàn)包來(lái)恢複。₹ ★
首先查找到(dào)/etc/inittab屬于哪一(yī)個(gè)RPM ✘€包(即便文(wén)件(jiàn)丢失,因為(wèi)存在RPM數≥♦(shù)據庫,一(yī)樣可(kě)以查找到(dào)結果):♠✔§
sh-3.1# chroot /mnt/sysimage ↕ ♦sh-3.1# rpm -qf /etc/init₩₽₹≤tab initscripts-8.45.3-1 §
退出chroot模式:
sh-3.1# exit
挂載存放(fàng)RPM包的(de)安裝光(guāng÷↑↕®)盤(在救援模式下(xià),光(guāng)盤通↔±(tōng)常挂載在/mnt/source目錄下(xià)):׶
sh-3.1# mount /dev/hdcλ∞↕↓ /mnt/source
Fedora系統的(de)RPM包存放(fàng)在光(guāng≠♣☆≠)盤Fedora/RPMS目錄下(xià),其他(tφ★ā)Linux存放(fàng)位置大(d∞±©♣à)同小(xiǎo)異,我在這(zhè)裡(lǐ)不(bù)一(yī)一(yī)列舉; "γ≈
另外(wài),因為(wèi)要(yào)修複的(de)硬盤系•☆統的(de)根目錄在/mnt/sysimage下(xià),®±需要(yào)使用(yòng)——root選項指定其位置。 ↕∑Ω
覆蓋安裝/etc/inittab文(wén)件 ↕&→(jiàn)所在的(de)RPM包:
sh-3.1# rpm -ivh ——replacepkgs—γ←—root/mnt/sysimage/mnt/source/Fedora/RPφ★MS/initscripts-8.45.3-1.i386.rpm
其中的(de)rpm命令選項“——replacepkgs”表示覆蓋安裝,執♥'π$行(xíng)完成後,即已經恢複了(le)₽™←此文(wén)件(jiàn)。
如(rú)果想隻提取RPM包中的(de)/etc/inittab文(wén)件(jiàn)進行(¶α xíng)恢複,可(kě)以在進入救援模式後,執行(xíng)命令:¶₹£γ
sh-3.1# rpm2cpio /mnt/source/Fedora/RPMS/init∞♥ εscripts-8.45.3-1.i386.rpm | cpi←×o -idv ./etc/inittab sh-3.1# cp etc/inittab /mnt↓✔/sysimage/etc
注意此命令執行(xíng)時(shí)不(bù)能(néng)将文(wén)件(jiàα↑✘n)直接恢複至/etc目錄,隻能(nén≠Ωg)提取到(dào)當前目錄下(xià),且恢複的(de)文(wén)件(×↑<γjiàn)名稱所在路(lù)徑要(yào)寫完整的(de)絕對(duì)路(•'lù)徑。提取文(wén)件(jiàn)成功後,将其複€φ制(zhì)到(dào)根分(fēn)區(qū)所在的(de)/mnt/sysimag®&e目錄下(xià)相(xiàng)應位置≤即可(kě)。
救援模式是(shì)維護Linux的(de♣÷δ)有(yǒu)力武器(qì),本文(wén)✔α'™以上(shàng)述兩個(gè)例子(zǐ)講解了(le)它的(de)應用(♣£∏βyòng)方法,希望能(néng)夠給讀(dú)者一(yī)÷π✘∑點啓示。解決Linux系統啓動的(de)故障,必須充分(fēn)理(lφ ε&ǐ)解Linux的(de)引導過程,才能(n∑""éng)夠對(duì)故障進行(xíng)有(yǒu)效的(d'Ω•e)判斷和(hé)處理(lǐ)。
商務咨詢:周總 13970784651 ∏↑↓©;
業(yè)務咨詢:肖總 18170768922
郵箱:xiaolq@haibo-tech.com
網址:http://www.haibo-tech.com
地(dì)址:江西(xī)省贛州市(shì)章(♠×Ω↕zhāng)貢區(qū)橙香大(dà)道(dà♦↓<o)28号嘉福金(jīn)融中心5樓