Linux 環境下分析和排查系統故障

這是我參與 8 月更文挑戰的第 8 天,活動詳情查看: 8月更文挑戰html

一名致力於在技術道路上的終身學習者、實踐者、分享者,一位忙起來又偶爾偷懶的原創博主,一個偶爾無聊又偶爾幽默的少年。shell

歡迎各位掘友們微信搜索「傑哥的IT之旅」關注!數據庫

原文連接:Linux 環境下分析和排查系統故障vim

1、分析日誌文件

日誌文件是用於記錄Linux系統中各類運行消息的文件,不一樣的日誌文件記載了不一樣類型的信息,如Linux內核消息、用戶登陸時間、程序錯誤等;安全

日誌文件對於診斷和解決系統中的問題有很大幫助,由於Linux系統中運行的程序一般會把系統消息和錯誤消息寫入相應的日誌文件。bash

在Linux系統中,日誌數據主要包括三種類型:服務器

  • 內核及系統日誌:這種日誌數據由系統服務rsyslog統一管理,根據其主配置文件/etc/rsyslog.conf中的設置決定將內核消息及各類系統程序消息記錄到什麼位置。微信

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

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

Linux系統自己和大部分服務器程序的日誌文件默認都放在目錄/var/log/下,一部分程序公用一個日誌文件,一部分程序使用單個日誌文件,而有些大型服務器程序因爲日誌文件不止一個,因此會在/var/log/目錄中創建相應的子目錄存放日誌文件。

1.1 經常使用的日誌文件

  • /var/log/messages:記錄Linux內核消息及各類應用程序的公共日誌信息、包括啓動、1/0錯誤、網絡錯誤、程序故障等。

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

  • /var/log/dmesg:記錄Linux系統在引導過程當中的各類事件信息。

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

  • /var/log/lastlog:記錄每一個用戶最近的登陸事件。

  • /var/log/secure:記錄用戶認證相關的安全事件信息。

  • /var/log/wtmp:記錄每一個用戶登陸、註銷及系統啓動和停機事件。

  • /var/log/btmp:記錄失敗的、錯誤的登陸嘗試及驗證事件。

分析日誌文件的目的在於經過瀏覽日誌查找關鍵信息、對系統服務進行調試,已經判斷髮生故障的緣由等。大多數文本格式的日誌文件,使用tail、more、less、cat等文本處理工具就能夠查看日誌內容。

內核及系統日誌功能主要由默認安裝的rsyslog-5.8.10-8.el6.x86_64軟件包提供。rsyslog服務所使用的配置文件爲/etc/rsyslog.conf。

[root@localhost ~]# grep -v "^$" /etc/rsyslog.conf
# rsyslog v5 configuration file
# For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html
# If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html
#### MODULES ####
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imklog   # provides kernel logging support (previously done by rklogd)
#$ModLoad immark  # provides --MARK-- message capability
# Provides UDP syslog reception
#$ModLoad imudp
#$UDPServerRun 514
# Provides TCP syslog reception
#$ModLoad imtcp
#$InputTCPServerRun 514
#### GLOBAL DIRECTIVES ####
# Use default timestamp format
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
# File syncing capability is disabled by default. This feature is usually not required,
# not useful and an extreme performance hit
#$ActionFileEnableSync on
# Include all config files in /etc/rsyslog.d/
$IncludeConfig /etc/rsyslog.d/*.conf
#### RULES ####
# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.*                                                 /dev/console
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none                /var/log/messages
# The authpriv file has restricted access.
authpriv.*                                              /var/log/secure
# Log all the mail messages in one place.
mail.*                                                  -/var/log/maillog
# Log cron stuff
cron.*                                                  /var/log/cron
# Everybody gets emergency messages
*.emerg                                                 *
# Save news errors of level crit and higher in a special file.
uucp,news.crit                                          /var/log/spooler
# Save boot messages also to boot.log
local7.*                                                /var/log/boot.log
# ### begin forwarding rule ###
# The statement between the begin ... end define a SINGLE forwarding
# rule. They belong together, do NOT split them. If you create multiple
# forwarding rules, duplicate the whole block!
# Remote Logging (we use TCP for reliable delivery)
#
# An on-disk queue is created for this action. If the remote host is
# down, messages are spooled to disk and sent when it is up again.
#$WorkDirectory /var/lib/rsyslog # where to place spool files
#$ActionQueueFileName fwdRule1 # unique name prefix for spool files
#$ActionQueueMaxDiskSpace 1g   # 1gb space limit (use as much as possible)
#$ActionQueueSaveOnShutdown on # save messages to disk on shutdown
#$ActionQueueType LinkedList   # run asynchronously
#$ActionResumeRetryCount -1    # infinite retries if host is down
# remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional
#*.* @@remote-host:514
# ### end of the forwarding rule ###
# A template to for higher precision timestamps + severity logging
$template SpiceTmpl,"%TIMESTAMP%.%TIMESTAMP:::date-subseconds% %syslogtag% %syslogseverity-text%:%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n"
:programname, startswith, "spice-vdagent"  /var/log/spice-vdagent.log;SpiceTmpl
複製代碼

從配置文件/etc/rsyslog.conf中能夠看到,受rsyslogd服務管理的日誌文件都是Linux系統中最主要的日誌文件,記錄了Linux系統中內核、用戶認證、郵件、計劃任務等最基本的系統消息。

在Linux內核中,根據日誌消息的重要程度不一樣,將其分爲不一樣的優先級別(數字等級越小、優先級越高、消息越重要)

  • 0 EMERG(緊急):會致使主機系統不可用的狀況。

  • 1 ALERT(警告):必須立刻採起措施解決的問題。

  • 2 CRIT(嚴重):比較嚴重的錯誤。

  • 3 ERR(錯誤):運行出現錯誤。

  • 4 WARNING(提醒):可能影響系統功能,須要提醒用戶的重要事件。

  • 5 NOTICE(注意):不會影響正常功能,可是須要注意的事件。

  • 6 INFO(信息):通常信息。

  • 7 DEBUG(調試):程序或系統調試信息等。

內核及大多數系統消息都被記錄到公共日誌文件/var/log/messages中,而其餘一些程序消息被記錄到各自獨立的日誌文件中,此外日誌消息還可以記錄到特定的存儲設備中,或者直接發送給指定用戶。

圖片

對於rsyslog服務統一管理的大部分日誌文件,使用的日誌記錄格式基本上都相同。以公共日誌/var/log/messages文件的記錄格式,其中每一行表示一條日誌消息,每一條消息都均包括如下四個字段。

  • 時間標籤:消息發出的日期和時間。

  • 主機名:生成消息的計算機的名稱。

  • 子系統名稱:發出消息的應用程序的名稱。

  • 消息:消息的具體內容。

2、用戶日誌

2.1 查看當前登陸的用戶狀況——users、who、w命令

users命令:輸出當前登陸的用戶名稱,每一個顯示的用戶名對應一個登陸會話。若是一個用戶有不止一個登陸會話,那他的用戶名將顯示與其相同的次數。

[root@localhost ~]# users
root root root
複製代碼

who命令用戶報告當前登陸到系統中的每一個用戶的信息,能夠查看當前系統存在哪些不合法用戶,從而對其進行審計和處理。who的默認輸出包括用戶名、終端類型、登陸日期及遠程主機。

[root@localhost ~]# who
root     tty1         2016-06-17 17:14 (:0)
root     pts/0        2016-06-17 17:16 (:0.0)
root     pts/1        2016-06-17 17:18 (172.20.10.5)
複製代碼

2.2 w命令用戶顯示當前系統中的每一個用戶及其所運行的進程信息。

[root@localhost ~]# w
17:50:35 up 37 min,  3 users,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty1     :0               17:14   37:45   2.32s  2.32s /usr/bin/Xorg :0 -nr -verbose -audit 4 -auth /var/run/gdm/auth-for-gdm-0vXGA4/datab
root     pts/0    :0.0             17:16   34:07   0.00s  0.00s /bin/bash
root     pts/1    172.20.10.5      17:18    0.00s  0.13s  0.09s w
[root@localhost ~]#
複製代碼

2.3 查詢用戶登陸的歷史記錄——last、lastb命令

last命令用戶查詢成功登陸到系統的用戶記錄,最近登陸狀況將顯示在最前面。經過last命令能夠及時掌握Linux主機的登陸狀況,若發現未經受權的用戶登陸過,表示當前主機可能已被入侵。

[root@localhost ~]# last
root     pts/1        172.20.10.5      Fri Jun 17 17:18   still logged in  
root     pts/0        :0.0             Fri Jun 17 17:16   still logged in  
root     tty1         :0               Fri Jun 17 17:14   still logged in  
reboot   system boot  2.6.32-431.el6.x Fri Jun 17 17:12 - 17:51  (00:38)    
root     pts/2        172.20.10.5      Fri Jun 17 14:36 - down   (02:35)    
root     pts/1        172.20.10.5      Fri Jun 17 12:23 - 14:43  (02:20)    
root     pts/0        :0.0             Fri Jun 17 12:22 - down   (04:49)    
root     tty1         :0               Fri Jun 17 12:21 - down   (04:50)    
reboot   system boot  2.6.32-431.el6.x Fri Jun 17 12:19 - 17:12  (04:52)    
root     pts/1        192.168.0.133    Sat Jun  4 14:35 - crash (12+21:43)  
root     pts/0        :0.0             Sat Jun  4 14:35 - crash (12+21:44)  
root     tty1         :0               Sat Jun  4 14:35 - crash (12+21:44)  
reboot   system boot  2.6.32-431.el6.x Sat Jun  4 14:31 - 17:12 (13+02:40)  
root     pts/1        192.168.0.133    Sat Jun  4 12:41 - down   (01:49)    
root     pts/0        :0.0             Sat Jun  4 12:40 - down   (01:50)    
root     tty1         :0               Sat Jun  4 12:40 - down   (01:51)    
reboot   system boot  2.6.32-431.el6.x Sat Jun  4 12:35 - 14:31  (01:55)    
root     pts/1        192.168.0.133    Sat Jun  4 12:11 - down   (00:23)    
root     pts/2        172.20.10.5      Sat Jun  4 09:32 - 12:30  (02:57)    
root     pts/1        172.20.10.5      Sat Jun  4 07:48 - 09:57  (02:08)    
root     pts/0        :0.0             Sat Jun  4 07:48 - down   (04:46)    
root     tty1         :0               Sat Jun  4 06:45 - down   (05:49)    
reboot   system boot  2.6.32-431.el6.x Sat Jun  4 06:40 - 12:34  (05:54)    

wtmp begins Sat Jun  4 06:40:32 2016
複製代碼

lastb命令用於查詢登陸失敗的用戶記錄,如登陸的用戶名錯誤、密碼不正確等狀況都將記錄在案。

[root@localhost ~]# lastb
root     tty1         :0               Fri Jun 17 12:21 - 12:21  (00:00)    
root     tty1         :0               Sat Jun  4 14:34 - 14:34  (00:00)    

btmp begins Sat Jun  4 14:34:54 2016
複製代碼

3、程序日誌

在Linux系統中,一部分應用程序 並無使用rsyslog服務來管理日誌,而是由程序本身維護日誌記錄。

出現如下一些注意現象

  • 用戶在很是規的時間登陸,或者用戶登陸系統的IP地址和以往的不同。

  • 用戶登陸失敗的日誌記錄,尤爲是那些一再連續嘗試進入失敗的日誌記錄。

  • 非法使用或不正當使用超級用戶權限。

  • 無端或者非法從新啓動各項網絡服務的記錄。

  • 不正常的日誌記錄,日誌殘缺不全,或者是wtmp這樣的日誌文件也缺乏了中間的記錄文件。

4、排除系統啓動類故障——MBR扇區故障

4.1 備份MBR扇區數據

因爲MBR扇區中包含了整個硬盤的分區表記錄,所以該扇區的備份文件必須存放到其餘的存儲設備中,不然在恢復時將沒法讀取到備份文件。

[root@localhost ~]# mkdir /backup
[root@localhost ~]# mount /dev/sda3 /backup/
[root@localhost ~]# dd if=/dev/sda of=/backup/sda.mbr.bak bs=512 count=1
記錄了1+0 的讀入
記錄了1+0 的寫出
512字節(512 B)已複製,0.00029813 秒,1.7 MB/秒
複製代碼

4.2 模擬MBR扇區故障

使用dd命令,人爲的將MBR扇區的記錄覆蓋,模擬出MBR扇區被損壞的故障狀況(切記先作好備份,並且將備份文件存放到其餘硬盤)。

[root@localhost ~]# dd if=/dev/zero of=/dev/sda bs=512 count=1
記錄了1+0 的讀入
記錄了1+0 的寫出
512字節(512 B)已複製,0.00141057 秒,363 kB/秒
複製代碼

完成上述操做後重啓系統,將會出現「Operating system not found」的提示信息,表示沒法找到可用的操做系統,所以沒法啓動主機。

4.3 從備份文件中恢復MBR扇區數據

當出現安裝嚮導界面,選擇「Rescue installed system」,將以「急救模式」引導光盤中的Linux系統。

圖片

以後依次按Enter鍵接受默認的語言、鍵盤格式,提示是否配置網卡時通常選擇「NO」,而後系統會自動查找硬盤中的Linux分區並嘗試將其掛載到「/mnt/sysimage」目錄(選擇「Continue」確認並繼續)。會出現rescue窗口,單擊「OK」按鈕。

圖片

圖片

圖片

圖片

圖片

單擊「Skip」鍵後將進入到「bash-4.1#」提示符的Bash Shell環境,只要執行相應的命令掛載保存有備份文件的硬盤分區,並將數據恢復到硬盤「/dev/sda」中。

圖片

圖片

完成恢復後,執行「exit」命令退出臨時shell環境,執行「reboot」命令,系統將會自動重啓。

5、遺忘root用戶密碼

當忘記root用戶的密碼時,將沒法登陸Linux系統執行管理、維護等任務,而只能經過其餘用戶登陸使用一些受限制的功能。若是系統中還有別的具備root權限的用戶,或者擁有修改root帳號密碼權限的用戶,也可使用這些用戶登陸系統,而後從新設置root用戶密碼。

5.1 經過單用戶模式重設root用戶的密碼

具體步驟:

1.重啓主機,在出現GRUB菜單時按↑、↓箭頭鍵取消倒計時,並定位到要進入的操做系統選擇項,按e鍵進入編輯模式。

圖片

2.定位到kernel開頭的一行並按e鍵,在行尾添加「single」的啓動參數,其中「single」也能夠換成字母「s」或數字「1」,也能夠進入單用戶模式。

圖片

3.按Enter鍵確認後,按b鍵將系統引導進入單用戶模式,直接進入shell環境(不須要任何密碼驗證)。

圖片

4.在單用戶模式的shell環境中,能夠執行「passwd root」命令從新設置root用戶密碼。

圖片

5.2 經過急救模式重設root帳號密碼

若使用RHEL6的安裝光盤進入急救模式的shell環境,則只需切換到待修復Linux系統的根目錄環境,執行「passwd root」命令重設root用戶密碼便可;或者修改/etc/shadow文件,將root用戶的密碼字段清空,重啓後以空密碼登陸系統。

推薦閱讀

99%的Linux運維工程師必需要掌握的命令及運用

Linux 環境下 Oracle 數據庫經常使用命令

Linux 環境下 vi/vim 編輯器經常使用命令

Linux環境下安裝及管理程序(軟件包封裝、RPM命令、源代碼編譯安裝的基本過程)

Linux 環境下帳號和權限管理

Linux 磁盤和文件系統管理

Linux 環境下進程和計劃任務管理

本文完。


原創不易,若是你以爲這篇文章對你有點用的話,麻煩你爲本文點個贊、評論或轉發一下,由於這將是我輸出更多優質文章的動力,感謝!

對了,掘友們記得給我點個免費的關注喲!防止你迷路下次就找不到我了。

咱們下期再見!

相關文章
相關標籤/搜索