一、 處理linux系統(tǒng)故障的思路
作為一名優(yōu)秀的linux運維工程師,一定要有一套清晰、明確的解決故障思路,當(dāng)問題出現(xiàn)時,才能迅速定位、解決問題,在開始本文學(xué)習(xí)之前,我根據(jù)多年工作和處理問題和故障的經(jīng)驗,總結(jié)出了一套處理問題的一般思路,供大家參考:
1、 重視報錯提示信息:每個錯誤的出現(xiàn),都是給出錯誤提示信息,一般情況下這個提示基本定位了問題的所在,因此一定要重視這個報錯信息,如果對這些錯誤信息視而不見,問題永遠(yuǎn)得不到解決。
2、 查閱日志文件:有時候報錯信息只是給出了問題的表面現(xiàn)象,要想更深入的了解問題,必須查看相應(yīng)的日志文件,而日志文件又分為系統(tǒng)日志文件(/var/log)和應(yīng)用的日志文件,結(jié)合這兩個日志文件,一般就能定位問題所在。
3、 分析、定位問題:這個過程是比較復(fù)雜的,根據(jù)報錯信息,結(jié)合日志文件,同時還要考慮其它相關(guān)情況,最終找到引起問題的原因。
4、 解決問題:找到了問題出現(xiàn)的原因,解決問題就是很簡單的事情了。
從這個流程可以看出,解決問題的過程就是分析、查找問題的過程,一旦確定問題產(chǎn)生的原因,故障也就隨之解決了。看似簡單明了的思路,但是真正能重視這個思路的、按照這個思路處理問題的卻很少,衷心的希望大家在處理故障的時候,能靜下心來,先整理思路,然后有目的的去處理問題。
二、 忘記linux root密碼或進(jìn)入單用戶方法
這個問題出現(xiàn)的幾率是很高的,也是linux運維最基礎(chǔ)的技能,要解決這個問題,在linux下非常簡單,只需重啟linux系統(tǒng),然后引導(dǎo)進(jìn)入linux的單用戶模式(init 1)就可以搞定了,由于單用戶模式是不需要輸入登錄密碼的,因此,可以直接登錄系統(tǒng),修改root密碼即可解決問題。
目前企業(yè)線上環(huán)境,最常用的Linux就是centos6.x和7.x版本,那么這里首先以RHEL/Centos6.x版本為例,介紹下如何進(jìn)入單用戶并重置root密碼,操作步驟如下:
1、 重啟系統(tǒng),待linux系統(tǒng)啟動到grub引導(dǎo)菜單時,按esc鍵,找到當(dāng)前系統(tǒng)引導(dǎo)選項,如圖所示:如果有多個可用內(nèi)核,這里就有多個引導(dǎo)選項。
2、 通過方向鍵將光標(biāo)放到需要使用的系統(tǒng)引導(dǎo)內(nèi)核選項上,然后按鍵盤字母“e”,進(jìn)入編輯狀態(tài),如圖所示:
3、然后通過上下鍵,選中帶有kernel指令的一行,繼續(xù)按鍵盤字母“e”,編輯該行,在行末尾加個空格,然后添加single,類似下圖所示:
4、 修改完成,按回車鍵,返回到剛才的界面。
5、 最后按鍵盤“b”,系統(tǒng)開始引導(dǎo)。
這樣系統(tǒng)就啟動到了單用戶模式下,這里的單用戶與windows下的安全模式類似,在單用戶模式下,只是啟動最基本的系統(tǒng),網(wǎng)絡(luò)以及應(yīng)用服務(wù)均不啟動。單用戶模式啟動完畢,系統(tǒng)會自動進(jìn)入到命令行狀態(tài)下,然后直接執(zhí)行命令“passwd”,接著敲回車,系統(tǒng)會提示輸入新的root密碼兩次,最后會看到修改密碼成功的提示,這樣就完成了root密碼的修改。如果需要正常啟動系統(tǒng),現(xiàn)在只需輸入“init 3”,就進(jìn)入了多用戶模式。用root用戶重新登錄系統(tǒng),看看設(shè)置的新密碼是否生效。
在RHEL/Centos7.x版本之后,Linux的機制發(fā)生了較大變化,在系統(tǒng)引導(dǎo)方面,使用了grub2代替了之前的grub引導(dǎo),init初始化程序也更換成了systemd初始化,隨之帶來的root密碼重置的方法也有所改變,,下面就介紹一下在Centos7.5版本中,忘記root密碼的處理方法,操作步驟如下:
1、 重啟系統(tǒng),待linux系統(tǒng)啟動到grub2引導(dǎo)菜單時,找到當(dāng)前系統(tǒng)引導(dǎo)選項,如果有多個可用內(nèi)核,這里就有多個引導(dǎo)選項,按e鍵,如下圖所示:
2、 按e鍵后,出現(xiàn)如下圖所示界面,通過方向鍵將光標(biāo)放到linux16引導(dǎo)行所在行尾,然后添加以下內(nèi)容:
3、 添加完成,按鍵Ctrl+x啟動shell引導(dǎo),最后進(jìn)入單用戶模式。
4、 掛載根分區(qū)為可讀寫模式,執(zhí)行如下命令:
然后,就可以執(zhí)行“passwd”命令重置密碼了,這里有一點需要注意,如果系統(tǒng)中開啟有selinux,還需在根分區(qū)創(chuàng)建autorelabel文件,否則系統(tǒng)無法正常啟動,操作命令如下:
5、密碼修改完成后,直接執(zhí)行reboot命令已經(jīng)無效,此時需要輸入全路徑命令,操作如下:
這樣就完成了密碼重置,正常登錄系統(tǒng),查看密碼是否修改成功。
三、 linux系統(tǒng)無法啟動的解決辦法
導(dǎo)致linux無法啟動的原因有很多,常見的原因有如下幾種:
1、 文件系統(tǒng)配置不當(dāng),比如/etc/inittab文件、/etc/fstab文件等配置錯誤或丟失,導(dǎo)致系統(tǒng)錯誤,無法啟動。
2、 非法關(guān)機,導(dǎo)致root文件系統(tǒng)破壞,也就是linux根分區(qū)破壞,系統(tǒng)無法正常啟動
3、 Linux內(nèi)核崩潰,從而無法啟動
4、 系統(tǒng)引導(dǎo)程序出現(xiàn)問題,比如grub丟失或者損壞,導(dǎo)致系統(tǒng)無法引導(dǎo)啟動。
5、 硬件故障,比如主板、電源、硬盤等出現(xiàn)問題,導(dǎo)致linux無法啟動。
從這些常見的故障可知,導(dǎo)致系統(tǒng)無法啟動的主要有兩個問題,硬件原因和操作系統(tǒng)原因,對于硬件出現(xiàn)的問題,只需通過更換硬件設(shè)備,即可解決,而對于操作系統(tǒng)出現(xiàn)的問題,雖然出現(xiàn)的問題可能千差萬別,不過在多數(shù)情況下都可以用相對簡單統(tǒng)一的一些方法來恢復(fù)系統(tǒng),下面我們就針對上面提出的幾個問題,結(jié)合RHEL/Centos Linux系統(tǒng)環(huán)境,給出一些常用的、普遍的解決問題的方法。
3.1、/etc/fstab文件丟失,導(dǎo)致系統(tǒng)無法啟動
/etc/fstab文件存放了系統(tǒng)中文件系統(tǒng)的相關(guān)信息,如果正確的配置了該文件,那么在linux啟動時,系統(tǒng)會讀取此文件,自動掛載linux的各個分區(qū),如果此文件配置錯誤,或者丟失,就會導(dǎo)致系統(tǒng)無法啟動,具體的故障現(xiàn)象是在檢測mount partition時出現(xiàn):
此后系統(tǒng)啟動就停止了。
針對這個問題,我們的第一思路就是想辦法恢復(fù)/etc/fstab這個文件的信息,只要恢復(fù)了此文件,系統(tǒng)就能自動掛載每個分區(qū),正常啟動??赡芎芏嘧x者首先想到的是將系統(tǒng)切換到單用戶模式下,然后手動掛載分區(qū),最后結(jié)合系統(tǒng)信息,重建/etc/fstab文件。
但是這種方法是行不通的,因為fatab文件丟失導(dǎo)致linux無法掛載任何一個分區(qū),即使linux還能切換到單用戶下,那么此時的系統(tǒng)也只是一個read-only的文件系統(tǒng),無法向磁盤寫入任何信息。
我們介紹另外一個方法,就是利用linux rescue修復(fù)模式登錄系統(tǒng),進(jìn)而獲取分區(qū)和掛載點信息,重構(gòu)/etc/fstab文件。
這里以Centos6.9為例,其它版本方法類似,首先將系統(tǒng)第一章光盤放入光驅(qū),設(shè)置BOIS從光驅(qū)啟動,這樣系統(tǒng)就從光驅(qū)引導(dǎo),如下圖所示,選擇“Rescue installed system”一項,然后回車,系統(tǒng)開始引導(dǎo)進(jìn)入rescue模式。
接著系統(tǒng)自動開始引導(dǎo),進(jìn)入下圖所示畫面:
這里是選擇模式使用的語言,可以按照自己需要設(shè)定,我們這里選擇“English“,然后按tab鍵,選中“ok”,回車進(jìn)入下一步。
下面進(jìn)入的是鍵盤選擇界面,如下圖所示,這里選擇默認(rèn)的“us”即可。
下面進(jìn)入網(wǎng)絡(luò)配置界面,如下圖所示:
這里是選擇是否啟用網(wǎng)絡(luò),由于系統(tǒng)已經(jīng)無法啟動,我們已經(jīng)在linux系統(tǒng)上進(jìn)行操作了,啟用網(wǎng)絡(luò)與否都無所謂。這里選擇不啟用。
下面到了最關(guān)鍵的步驟了,如下圖所示,修復(fù)模式會自動將系統(tǒng)的所有分區(qū)掛載到/mnt/sysimage目錄下,選擇“Continue”,則修復(fù)環(huán)境進(jìn)入到read-write狀態(tài)下,可以對分區(qū)進(jìn)行讀寫操作,選擇“Read-Only”,修復(fù)環(huán)境進(jìn)入到只讀模式,由于我們要重建fstab文件到/etc目錄下,因此選擇“Continue”進(jìn)入可讀寫模式下。
下面是一個友情提示界面,如下圖所示,由于fstab文件丟失,修復(fù)模式找不到任何可掛載的分區(qū),從這里可知,修復(fù)模式在這里也讀取/etc/fstab文件,回車,進(jìn)入下一步。
下面是選擇下一步要執(zhí)行的動作,如下圖所示,這里選擇“shell Start shell”進(jìn)入修復(fù)模式命令行。
最后,就進(jìn)入了修復(fù)環(huán)境下,可以進(jìn)行操作了。如下圖所示
上面詳細(xì)演示了如何進(jìn)入linux的修復(fù)模式,其實很多情況下,linux無法啟動時,都可以通過這個方式登錄系統(tǒng)進(jìn)行修復(fù)和更改操作。
下面是恢復(fù)/etc/fstab文件的詳細(xì)過程,首先查看一下系統(tǒng)分區(qū)情況,如下所示:
因為分區(qū)并沒有損壞,通過fdisk命令可以查看到系統(tǒng)分區(qū)的完整信息,但是每個分區(qū)對應(yīng)的label name信息我們還不知道,下面通過tune2fs命令查看每個分區(qū)對應(yīng)的label name:
這樣,就得到了所有分區(qū)的掛載點信息,接下來就可以構(gòu)造一個fstab文件了。
小技巧:可以參考其它系統(tǒng)中fstab文件的格式,結(jié)合本系統(tǒng)的分區(qū)和掛載點信息,構(gòu)造出自己的fstab文件來。
由于fstab文件是存放在系統(tǒng)根目錄下的,因此需要掛載原來系統(tǒng)的根分區(qū),從上面可知根分區(qū)對應(yīng)的設(shè)備名為/dev/sda3,接著在修復(fù)模式創(chuàng)建的臨時根分區(qū)下創(chuàng)建一個
掛載點,然后掛載原來系統(tǒng)的根分區(qū)。操作過程如下所示:
這樣以來,原有根分區(qū)的文件全部掛載到了/temp目錄下,接著就可以創(chuàng)建我們需要的fstab文件了。
重構(gòu)好的fstab文件內(nèi)容如下:
配置完畢,保存退出,然后重啟系統(tǒng),看系統(tǒng)是否能正常啟動。
3.2、CentOS下誤刪除/boot目錄修復(fù)方法
這個問題經(jīng)常發(fā)生在新手、研發(fā)身上,誤刪除的原因很多,但是并不重要,作為專業(yè)背鍋俠,要的就是誤刪除后怎么回復(fù),一起來看下這個現(xiàn)象吧,看下圖:
出現(xiàn)這個情況,可能的原因有:系統(tǒng)引導(dǎo)出現(xiàn)問題、/boot目錄誤刪除、grub配置錯誤。
不管是什么原因,這里給個終極方法,也就是一定能解決問題的方法,保證大家屢試不爽。
要解決這個問題,還是要用到一個centos的U盤鏡像或者光盤鏡像,通過系統(tǒng)鏡像進(jìn)入rescue修復(fù)模式,然后就可以大展拳腳了。
下面看看如何在centos7.x版本下,進(jìn)入rescue修復(fù)模式,然后修復(fù)系統(tǒng)引導(dǎo)。
首先通過系統(tǒng)鏡像盤進(jìn)入系統(tǒng)引導(dǎo)模式,如下圖所示:
然后選擇Troubleshooting,回車進(jìn)入下圖界面:
這里選擇"Rescue a Centos system", 回車,進(jìn)入如下界面:
這是進(jìn)入rescue修復(fù)模式的幾個選項,跟centos6.x版本類似,這里選擇數(shù)字1,進(jìn)入可讀、寫模式。
等待片刻,即可進(jìn)入下圖所示界面:
敲回車,進(jìn)入命令行模式,然后執(zhí)行chroot命令,如下圖所示:
這樣,就變更多了root目錄下,相當(dāng)于進(jìn)入到了真實系統(tǒng)環(huán)境下了。
接著,將系統(tǒng)鏡像掛載到任意一個目錄下,這里掛載到/mnt下,掛載系統(tǒng)鏡像的目的是將系統(tǒng)鏡像作為yum源,然后安裝系統(tǒng)丟失的內(nèi)核模塊,并安裝grub2引導(dǎo)程序。
下面開始創(chuàng)建一個yum源倉庫,用于從本地系統(tǒng)鏡像中讀取rpm包,進(jìn)行內(nèi)核模塊的安裝。如下圖所示:
重點來了,第一步是重新安裝內(nèi)核,這里使用yum 的reinstall命令,千萬別用install來安裝,執(zhí)行如下命令:
這樣,內(nèi)核模塊安裝完成了,接下來,還需要重新安裝grub2,并重新生成 grub2 配置文件 grub.cfg,執(zhí)行如下圖所示操作:
執(zhí)行完成后,兩次執(zhí)行exit命令退出后,系統(tǒng)會自動重啟,完成boot引導(dǎo)的修復(fù),不出意外的話,系統(tǒng)已經(jīng)可以暢通無阻的啟動了。
四、 Linux系統(tǒng)無響應(yīng)(死機)問題分析
Linux服務(wù)器在長期運行后,難免出現(xiàn)無響應(yīng)現(xiàn)象,俗稱“死機”。在系統(tǒng)死機后,屏幕一般會輸出故障信息,鍵盤失去響應(yīng),這種情況的常見處理辦法就是重啟系統(tǒng),不過在重啟前,要重點關(guān)注下屏幕的輸出信息,因為其提示的可能是引起死機的主要原因,對解決問題是有很大幫助的。
其實還有另一個方法,就是通過串口直連線連接客戶機和服務(wù)器,將服務(wù)器的出錯詳細(xì)信息發(fā)送到客戶機上。
引起服務(wù)器死機的原因有很多,但主要有兩個方面:軟件問題和硬件問題。下面總結(jié)了造成Linux系統(tǒng)死機的常見原因和解決問題的思路:
1)系統(tǒng)硬件問題,主要是有SCSI卡、主板、RAID卡、HBA卡、網(wǎng)卡、硬盤等硬件設(shè)備導(dǎo)致的。在這種情況下需要定位硬件故障細(xì)節(jié),通過更換硬件來解決問題。
2)外圍硬件問題,主要是網(wǎng)絡(luò)問題導(dǎo)致的。此時就需要檢查網(wǎng)絡(luò)設(shè)備、網(wǎng)絡(luò)參數(shù)等方面查找和解決問題。
3)軟件問題,主要是系統(tǒng)內(nèi)核bug、應(yīng)用軟件bug、驅(qū)動程序bug等。在這種情況下就需要從升級內(nèi)核、修復(fù)程序bug、更新驅(qū)動程序等方面來解決問題。
4)系統(tǒng)設(shè)置問題:主要是系統(tǒng)參數(shù)設(shè)置不當(dāng)導(dǎo)致,可以通過恢復(fù)系統(tǒng)到默認(rèn)狀態(tài),關(guān)閉防火墻等方面來解決問題。
五、其它故障的一般解決方案
如果是linux的引導(dǎo)程序出現(xiàn)問題,那么也可以通過光盤引導(dǎo)或U盤引導(dǎo)的方式進(jìn)入linux rescue模式,然后修改對應(yīng)的引導(dǎo)程序或者重新安裝引導(dǎo)程序。
如果linux內(nèi)核崩潰或者丟失,同樣可以先進(jìn)入linux rescue模式下,然后加載root分區(qū),最后重新編譯內(nèi)核。
如果出現(xiàn)了最壞的情況,文件系統(tǒng)破壞嚴(yán)重,同時內(nèi)核也崩潰,那么此時重新安裝系統(tǒng)反而比較容易,在這種情況下可以先將linux上有用的數(shù)據(jù)和文件備份轉(zhuǎn)移到其它設(shè)備,然后對整個文件系統(tǒng)進(jìn)行全新安裝。
在這里我們不可能對每個出現(xiàn)的問題,都給出詳細(xì)的解決方案,問題都是千差萬別的,每個問題的處理都不盡相同,本專欄要傳授給大家的是當(dāng)linux系統(tǒng)出現(xiàn)問題后,解決問題的一般思路和通用策略,熟練掌握了這些技巧,處理任何linux問題都能游刃有余。
【責(zé)任編輯:華軒 TEL:(010)68476606】