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

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

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

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

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

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

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

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

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

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

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

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

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

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

一、單用戶模式
這個問題出現的概率是很高的,不過,在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開機文件的設置)

3、系統沒法啓動故障案例
一、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分區對應的路徑)

二、/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文件丟失,則系統不能正常啓動。

4、「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(修復完成後,從新掛載該分區)

5、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 / (查看目錄或文件的權限信息)

6、「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中。先後兩個文件之後面的文件設置爲準。

相關文章
相關標籤/搜索