與windows系統一樣,linux操作系統也會存在很多問題和故障,很多linux新手都害怕故障,面對出現的問題顯得無可奈何,更有甚者,由此放棄了linux,其實,我們不應該懼怕問題,學習就是一個發現問題與解決問題的過程,只要掌握了解決問題的基本思路,一切故障都會迎刃而解,當然前提是我們已經具備了解決問題的思路和紮實的知識功底.
一、處理linux系統故障的思路
作為一名合格的linux系統管理員,一定要有一套清晰、明確的解決故障思路,當問題出現時,才能迅速定位、解決問題,這裡給出一個處理問題的一般思路:
重視報錯提示信息:每個錯誤的出現,都是給出錯誤提示信息,一般情況下這個提示基本定位了問題的所在,因此一定要重視這個報錯信息,如果對這些錯誤信息視而不見,問題永遠得不到解決.
查閱日誌文件:有時候報錯信息只是給出了問題的表面現象,要想更深入的了解問題,必須查看相應的日誌文件,而日誌文件又分為系統日誌文件(/var/log)和應用的日誌文件,結合這兩個日誌文件,一般就能定位問題所在.
分析、定位問題:這個過程是比較複雜的,根據報錯信息,結合日誌文件,同時還要考慮其它相關情況,最終找到引起問題的原因.
解決問題:找到了問題出現的原因,解決問題就是很簡單的事情了.
從這個流程可以看出,解決問題的過程就是分析、查找問題的過程,一旦確定問題產生的原因,故障也就隨之解決了.
二、 忘記linux root密碼
這個問題出現的幾率是很高的,不過,在linux下解決這個問題也很簡單,只需重啟linux系統,然後引導進入linux的單用戶模式(init 1),由於單用戶模式是不需要輸入登錄密碼的,因此,可以直接登錄系統,修改root密碼即可解決問題.
三 linux系統無法啟動的解決辦法
導致linux無法啟動的原因有很多,常見的原因有如下幾種:
文件系統配置不當,比如/etc/inittab文件、/etc/fstab文件等配置錯誤或丟失,導致系統錯誤,無法啟動.
非法關機,導致root文件系統破壞,也就是linux根分區破壞,系統無法正常啟動
1./etc/fstab文件丟失,導致系統無法啟動
/etc/fstab文件存放了系統中文件系統的相關信息,如果正確的配置了該文件,那麼在linux啟動時,系統會讀取此文件,自動掛載linux的各個分區,如果此文件配置錯誤,或者丟失,就會導致系統無法啟動,具體的故障現象是在檢測mount partition時出現:
starting system logger
此後系統啟動就停止了.
針對這個問題,我們的第一思路就是想辦法恢復/etc/fstab這個文件的信息,只要恢復了此文件,系統就能自動掛載每個分區,正常啟動.可能很多讀者想到的是將系統切換到單用戶模式下,然後手動掛載分區,
結合系統信息,重建/etc/fstab文件.
但是這種方法是行不通的,fatab文件丟失導致linux無法掛載任何一個分區,即使linux還能切換到單用戶下,那麼此時的系統也只是一個read-only的文件系統,無法向磁碟寫入任何信息.
我們介紹另外一個方法,就是利用linux rescue修復模式登錄系統,進而獲取分區和掛載點信息,重構/etc/fstab文件.
圖1設置linux進入修復模式
接著系統自動開始引導,進入圖2所示畫面:
圖2 選擇語言
這裡是選擇模式使用的語言,可以按照自己需要設定,我們這裡選擇“English“,然後按tab鍵,選中“ok”,回車進入下一步.
下面進入的是鍵盤選擇界面,如圖3所示,這裡選擇默認的“us”即可.
圖3 選擇鍵盤類型
下面進入網路配置界面,如圖4所示:
圖4 是否啟用網路
這裡是選擇是否啟用網路,由於系統已經無法啟動,我們已經在linux系統上進行操作了,啟用網路與否都無所謂.這裡選擇不啟用.
下面到了最關鍵的步驟了,如圖5所示,修復模式會自動將系統的所有分區掛載到/mnt/sysimage目錄下,選擇“Continue”,則修復環境進入到read-write狀態下,可以對分區進行讀寫操作,選擇“Read-Only”,修復環境進入到只讀模式,由於我們要重建fstab文件到/etc目錄下,因此選擇“Continue”進入可讀寫模式下.
圖5 選擇修復模式的啟動方式
下面是一個友情提示界面,如圖6所示,由於fstab文件丟失,修復模式找不到任何可掛載的分區,從這裡可知,修復模式在這裡也讀取/etc/fstab文件,回車,進入下一步.
圖6 無法掛載系統任何分區
下面就進入了修復環境下,可以進行操作了.如圖7所示
圖7 修復模式命令行
上面詳細演示了如何進入linux的修復模式,其實很多情況下,linux無法啟動時,都可以通過這個方式登錄系統進行修復和更改操作.
下面是恢復/etc/fstab文件的詳細過程:
查看一下系統分區情況,如下所示:
sh-3.1# fdisk -l
Disk /dev/sda: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 25 200781 83 Linux
/dev/sda2 26 1300 10241437 83 Linux
/dev/sda3 1301 1682 3068415 83 Linux
/dev/sda4 1683 5221 28427017 5 Extended
/dev/sda5 1683 1873 1534176 83 Linux
/dev/sda6 1874 2064 1534176 83 Linux
/dev/sda7 2065 2255 1534176 83 Linux
/dev/sda8 2256 2382 1020096 83 Linux
/dev/sda9 2383 2484 819283 82 Linux swap / Solaris
/dev/sda10 2485 5221 21984921 83 Linux
分區並沒有損壞,通過fdisk命令可以查看到系統分區的完整信息,但是每個分區對應的label name信息我們還不知道,下面通過e2label命令查看每個分區對應的label name:
sh-3.1# e2label /dev/sda1
/boot
sh-3.1# e2label /dev/sda2
/usr
sh-3.1# e2label /dev/sda3
/
sh-3.1# e2label /dev/sda5
2、root文件系統破壞,導致系統無法啟動
Linux下普遍採用的是ext3文件系統,ext3是一個具有日誌記錄功能的日誌文件系統,可以進行簡單的容錯和恢復,但是在一個高負荷讀寫的ext3文件系統下,如果突然發生掉電,就很有可能發生文件系統內部結構不一致,導致文件系統破壞.
Linux在啟動時,會自動去分析和檢查系統分區,如果發現文件系統有簡單的錯誤,會自動修復,如果文件系統破壞比較嚴重,系統無法完成修復時,系統就會自動進入單用戶模式下或者出現一個交互界面,提示用戶介入手動修復,現象類似下面所示:
checking root filesystem
/dev/sdb5 contains a file system with errors, check forced
/dev/sdb5:
Unattached inode 68338812
/dev/sdb5: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY
(i.e., without -a or -p options)
FAILED
/contains a file system with errors check forced
an eror occurred during the file system check
****dropping you to a shell;the system will reboot
****when you leave the shell
Press enter for maintenance
(or type Control-D to continue):
give root password for maintenance
從這個錯誤可以看出,系統根分區文件系統出現了問題,系統在啟動時無法自動修復,然後進入到了一個交互界面,提示用戶進行系統修復.
三、其它故障的一般解決方案
如果是linux的引導程序出現問題,那麼也可以通過光碟引導的方式進入linux修復模式,然後修改對應的引導程序或者重新安裝引導程序.
如果linux內核崩潰或者丟失,同樣可以先進入linux rescue下,然後載入root分區,重新編譯內核.
如果出現了最壞的情況,文件系統破壞嚴重,同時內核也崩潰,那麼此時重新安裝系統反而比較容易,在這種情況下可以先將linux上有用的數據和文件備份轉移到其它設備,然後對整個文件系統進行全新安裝.
四、 linux下常見網路故障處理
linux網路服務功能非常強大,在linux上可以部署Web Server、DNS Server、Mail Server、Db server、Ftp server等等,但是也由此產生了很多網路問題,據統計,在linux系統下產生的故障,有60%來自網路方面,40%來自系統本身,可見熟練解決linux下故障,對於熟練掌握linux有著巨大的幫助.
解決linux網路問題的順序應該是從Linux操作系統自身的底層網路開始,然後逐步有點及面的向外擴展,網路問題的一般解決流程為:
網路硬體傳輸問題,可以通過檢查網線是否正常,網卡、集線器、路由器、交換機等是否正常來確認是否由硬體問題造成網路故障.
檢查網卡是否能正常工作,可以從網卡是否正常載入、網卡IP設置是否正確、系統路由是否設置正確3個方面進行檢查確認.
檢查DNS是否設定正確,可以從linux的DNS客戶端配置文件/etc/resolv.conf,本地主機文件/etc/hosts進行檢查確認.
服務是否正常打開,可以通過telnet或者netstat命令的方式檢測服務是否開啟.
訪問許可權是否打開,可以從本機iptables防火牆、linux內核強制訪問控制策略selinux兩方面入手,進行檢查確認.
區域網主機之間聯機是否正常; 可以通過ping自身IP,ping區域網其它主機IP,ping網關地址來確認區域網是否連接正常.
接下來,我們就針對上面給出的解決網路問題的一般思路,詳細展開講述.
1. 檢查網路硬體傳輸問題
檢查網路故障,要排除的是網路硬體設備是否存在問題,比如網線是否正常,網卡、集線器、路由器、交換機等是否正常,這些是網路正常運行的基本條件,如果發現某些設備出現故障,只需更換硬體即可解決問題.
2.檢查網卡是否能正常工作
(1)檢查網卡是否正常載入
通過lsmod、ifconfig命令可以判斷網卡是否正常載入,如果通過ifconfig可以顯示網路介面(eth0、eth1等等)的配置信息,表示系統已經認到了網卡驅動程序,檢測到了網路設備,網卡載入正常.
(2)檢查網卡IP設置是否正確
接下來就要檢查網卡的軟體設定,比如IP是否配置,配置是否正確,確保IP的配置和區域網其它計算機配置沒有衝突.
(3)檢查系統路由表信息是否正確
就是要檢查系統的路由表設置是否正確,如果一個linux系統有兩塊網卡,同時兩塊網卡設置的IP不在一個網段,要特別注意系統路由表的設置.
例如下面這個系統的網路介面信息:
[root@webserver ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:12:3F:FF:65:24
inet addr:10.10.1.239 Bcast:10.10.1.255 Mask:255.255.255.0
inet6 addr: fe80::212:3fff:feff:6524/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:20632289 errors:0 dropped:0 overruns:0 frame:0
TX packets:20223702 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:793608426 (756.8 MiB) TX bytes:2567481473 (2.3 GiB)
Interrupt:201
eth1 Link encap:Ethernet HWaddr 00:12:3F:FF:65:25
inet addr:192.168.200.30 Bcast:192.168.200.255 Mask:255.255.255.0
3.檢查DNS解析文件是否設置正確
在Linux系統中,有兩個文件用來指定系統到哪裡尋找相關域名解析的庫.分別是文件/etc/host.conf和/etc/nsswitch.conf.
/etc/host.conf文件指定系統如何解析主機名,Linux通過域名解析庫來獲得主機名對應的IP地址.下面是RedHat Linux安裝后預設的/etc/host.conf內容:
order hosts,bind
其中,order指定主機名查詢順序,這裡表示查找/etc/hosts文件對應的解析,如果沒有找到對應的解析,接著就根據/etc/resolve.conf指定的域名伺服器進行解析.
/etc/nsswitch.conf文件是由SUN公司開發的,用於管理系統中多個配置文件查詢的順序,由於nsswich.conf提供了更多的資源控制方式,nsswich.conf文件現在已經基本取代了hosts.conf,雖然LINUX系統中默認這兩個文檔都存在,但實際上起作用的是nsswitch.conf文件.
nsswitch.conf文件每行的配置都以一個關鍵字開頭,後跟冒號,緊接著是空白,然後是一系列方法的列表.
例如這段信息:
hosts: files dns
表示系統查詢主機庫文件,如果沒有找到對應的解析,接著會去DNS配置文件指定的DNS伺服器進行解析.
清楚了linux下域名解析的原理和過程,我們就可以根據這兩個文件的設定,確定解析的順序,從而判斷出域名解析可能出現的問題.
4.檢查服務是否正常打開
在一個應用出現故障時,必須要檢查的就是服務本身,比如服務是否開啟,配置是否正確等等,檢查服務是否正確打開,分為兩步,第一步是查看服務的埠是否打開:
5.檢查訪問許可權是否打開
(1)檢查系統防火牆iptables的狀態
當某些服務不能訪問時,一定要檢查是否被linux本機防火牆iptables屏蔽了,可以通過iptables -L指令查看iptables的配置策略,例如我們不能訪問某台linux伺服器提供的www服務,通過檢查,系統網路、域名解析都正常,並且服務也正常啟動,然後檢查了伺服器的iptables策略配置,信息如下:
6.檢查區域網主機之間聯機是否正常
通過上面5步的檢查,linux系統自身的問題已經基本排除,接下來需要擴展到linux主機之外的網路環境,檢查網路之間的連通是否存在故障,可以先通過ping命令測試區域網主機之間的連通性,然後ping網關,檢測主機到網關的通信是否正常.
本文出自 「技術成就夢想」 博客,請務必保留此出處http://ixdba.blog.51cto.com/2895551/566345
[火星人 ] 淺談linux系統下常見的故障與處理方法已經有1073次圍觀