Linux系統故障排查思路與常見案例

Linux系統故障排查思路與常見案例

1、Linux系統日誌與分類
內核及系統日誌
這種日誌數據由系統服務syslog統一管理,根據其主配置文件“/etc/syslog.conf”中的設置決定將內核消息及各種
系統程序消息記錄到什麼位置。


用戶日誌:
這種日誌數據用於記錄Linux系統用戶登錄及退出系統的相關信息,包括用戶名、登錄的終端、登錄時間、來源主機、正在使用的進程操作等。

程序日誌:
有些應用程序運行會選擇自己來獨立管理一份日誌文件(而不是交給syslog服務管理),用於記錄本程序運行過程中的各種事件信息。

2、Linux下日誌文件解讀:
Linux系統本身和大部分服務器程序的日誌文件默認情況下都放置在目錄 /var/log 中。
/var/log/messages : 公共日誌文件,記錄Linux內核消息及各種應用程序的公共日誌信息,包括啓動、IO錯誤、網絡錯誤、程序故障等。
對於未使用獨立日誌文件的應用程序或服務,一般都可以從該文件獲得相關的事件記錄信息。


/var/log/cron : 記錄crond計劃任務產生的事件消息。

/var/log/dmesg: 包含內核緩衝信息(kernel ring buffer)。在系統啓動時,會在屏幕上顯示許多與硬件有關的信息。此文件記錄的信息是上次啓動時的信息。
而用dmesg命令可查看本次系統啓動時與硬件有關的信息,以及內核緩衝信息。

/var/log/maillog : 記錄進入或發出系統的電子郵件活動。

/var/log/boot.log : 記錄系統啓動時的軟件日誌信息。

/var/log/secure : 記錄用戶遠程登錄、認證過程中的事件信息。

/var/log/wtmp : 記錄系統所有登錄進入和退出紀錄。可執行last命令查看。
/var/log/btmp : 記錄錯誤登錄進入系統的日誌信息,可執行lastb命令查看。
/var/log/lastlog: 記錄最近成功登錄的事件和最後一次不成功的登錄事件。可執行lastlog命令查看。

export LANG=en_US (把shell終端變爲英文。)

#lastlog (查看最近登錄信息)
#locale (查看系統編碼格式)
二、忘記linux root密碼故障與解決案例

1、單用戶模式
這個問題出現的機率是很高的,不過,在linux下解決這個問題也很簡單,只需重啓linux系統,然後引導進入linux的單用戶模式(init 1),
由於單用戶模式是不需要輸入登錄密碼的,因此,可以直接登錄系統,修改root密碼即可解決問題。

進入單用戶模式centos6.x和centos7.x不同。

centos6.x進入單用戶模式:
在啓動剛開機時有歡迎界面,馬上按上、下、左、右鍵。進入GRUB界面,再按鍵盤上“e”鍵。進入新的界面。選擇 “kernel ...”這行(內核),按鍵盤上“E”鍵。
進入新的界面,此時可以輸入字符。輸入“single”按回車。再次進入“kernel ...”界面,繼續選擇此行,按“b”鍵。開始自動引導,自動進入單用戶模式。
此時可以修改密碼: #passwd root(表示修改root用戶密碼)。 按提示輸入密碼,完成,reboot。完成密碼修改。
#cd /etc/grub.cfg(centos6.9開機文件的設置)



centos7.x進入單用戶模式修改密碼:
在啓動時的引導界面,選擇“CentOS Linux....”內核,按鍵盤“E”鍵,進入到新的界面,把光標移動到“Linux16 /... root=UUID=...”這行,在這行加入內容,把光標放到這行最後,
...UTF-8這裏,輸入 “init=/bin/sh”加完後讓繼續引導,按Crt和x。進入到shell終端,開始重置密碼。先把根分區變爲可寫,輸入: # mount -o remount,rw /(把根分區重新掛載,讓可讀可寫)。
更改密碼 # passwd root(修改root用戶密碼),修改完成。進入#cd /etc/selinux/ 查看 #more config 。在根目錄下常見一個文件: # touch /.autorelabel 或把 /etc/selinux下的config文件
裏的 SELINUXTYPE的值改爲 disabled。此時完成密碼修改,重啓系統。 使用 # exec /sbin/init (centos7單用戶模式下用此命令重啓。)
#cd /etc/grub2.cfg(centos7開機文件的設置)




三、系統無法啓動故障案例
1、root文件系統破壞,導致系統無法啓動故障案例。
這種情況多由於異常斷電、不正常關機,引起文件系統結構不一致的。此種問題發生,在系統啓動的時候,屏幕會顯示:
checking root filesystem
/dev/sdb5 contains a file system with errors , check forced
/dev/sdb5: UNEXPECTED INCONSISTENCY;RUN fsck MANUALLY
....
press enter for maintenance
(or type Control-D to continue):
give root password for maintenance








從這個錯誤可以看出,系統根分區文件系統出現了問題,系統在啓動時無法自動修復,然後進入到了一個交互界面,提示用戶進行系統修復。

解決方法: 輸入root密碼後進入系統修復模式,在修復模式下,可以執行 fsck命令,如:
#fsck .ext4 -y /dev/sdb5 (文件系統是ext4,就用.ext4格式修復)

加入boot分區出現問題,先卸載該分區。# umount /boot
修復 #fsck /dev/sda1(/dev/sda1爲boot分區對應的路徑)

2、/etc/fstab文件丟失,導致系統無法啓動案例
/etc/fstab文件存放了系統中文件系統的相關信息,在linux啓動時,系統會讀取此文件,自動掛載linux的各個分區,如果此文件配置錯誤,
或者丟失,就會導致系統無法啓動,具體的故障現象是在檢測mount partition時出現: starting system logger .此後系統啓動就停止了。

解決方法:
利用Linux rescue 修復模式登錄系統,進而獲取分區和掛載點信息,重構/etc/fstab文件。

Linux系統無法啓動的通用解決方案。
1,進入單用戶模式或援救模式(rescue),修復分區錯誤或者備份數據,然後修復或重新安裝系統。
進入援救(rescue)模式方式:通過iso磁盤或者U盤,選擇到其啓動,選擇troubleshooting 。進入新的界面,選擇 Rescue a CentOS system進入,
等進入新的界面,根據情況選擇,continue ,第一個爲continue,輸入1.到新的界面,可以輸入命令。#df -h。進入 #cd /mnt/sysimage/ 再進入#cd /etc .
#vi /etc/fstab。
如果fstab文件丟失,則系統不能正常啓動。




四、“Read-only file system”錯誤與解決案例

如現象: java.lang.RuntimeException:Cannot make directory:file:/www/data/html/2021-01-24

思路:可能是服務器磁盤故障(磁盤空間滿了或者磁盤無法寫入了)

原因:磁盤分區出現了問題,導致文件系統結構不一致,文件系統關閉了寫功能,需要修復文件系統結構:

#umont /www/data (先卸載出現問題的分區)
#fsck -y /dev/sda7(修復出問題的分區對應的硬件分區地址)
#mount /dev/sda7 /data1(修復完成後,重新掛載該分區)

五、su命令切換用戶帶來的問題

故障現象: su:warning:cannot change directory to /home/oracle: Permission denied

解決思路:
用戶目錄/home/oracle權限問題
su程序執行權限問題
程序依賴的共享庫權限問題
selinux問題導致
系統跟空間問題




產生原因: 根目錄權限問題導致,修改根目錄權限即可。 #chmod 555 /

#ldd /bin/ls (查看ls命令依賴的庫文件),ldd命令用來查看系統命令依賴的庫文件。
#more /etc/selinux/config (查看selinux配置文件。)
#stat / (查看目錄或文件的權限信息)

六、“Too many open files”錯誤與解決方法:
如現象: java.io.IOException: Too many openfiles
思路:這個案例涉及到linux下ulimit命令的使用,ulimit主要是用來限制進程對資源的使用情況的,它支持各種類型的限制。
ulimit -a
-a :顯示當前系統所有的limit資源信息。
-H :設置硬資源限制,一旦設置不能增加。
-S :設置軟資源限制,設置後可以增加,但是不能超過硬資源設置。
-c : 最大的core文件的大小,以blocks爲單位。
-f : 進程可以創建文件的最大值,以blocks爲單位。
-d : 進程最大的數據段的大小,以kbytes爲單位。
-m : 最大內存大小,以kbytes爲單位。
-n : 可以打開的最大文件描述符的數量。
-s : 線程棧大小,以Kbytes爲單位。
-P : 管道緩衝區的大小,以kbytes爲單位。
-U : 用戶最大可用的進程數。
-v : 進程最大可用的虛擬內存,以kbytes爲單位。
-t : 最大CPU佔用時間,以秒爲單位。
-l :最大可加鎖內存大小,以kbytes爲單位。
















#ulimit -n 655360 (修改可打開最大文件描述的數量爲655360)此處修改爲臨時生效的。
需要永久保存需進入/etc/security/limits.conf 文件中配置,此處設置系統級的資源配置。

vi /etc/security/limits.conf

處理/etc/security/limits.conf文件還有一個/etc/security/limits.d/20-nproc.conf文件,此文件在centos7中。
前後兩個文件以後面的文件設置爲準。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章