您好,登錄后才能下訂單哦!
在處理Linux操作系統(tǒng)出現(xiàn)的各種故障時(shí),故障的癥狀是最容易發(fā)現(xiàn)的,但導(dǎo)致故障的原因才是最終排除故障的關(guān)鍵。熟悉Linux操作系統(tǒng)中常見(jiàn)的日志文件,了解一般故障的分析與解決辦法,將有助于管理員快速定位故障點(diǎn),“對(duì)癥下藥”,及時(shí)解決各種系統(tǒng)問(wèn)題。
博文大綱:
一、分析日志文件;
二、排除系統(tǒng)啟動(dòng)類故障;
三、排除文件系統(tǒng)類故障;
日志文件是用于記錄Linux操作系統(tǒng)中各種運(yùn)行消息的文件,相當(dāng)于Linux主機(jī)的“日記”。不同的日志文件記載了不同類型的信息,如Linux內(nèi)核消息、用戶登錄事件、程序錯(cuò)誤等。
日志文件對(duì)于診斷和解決系統(tǒng)中的問(wèn)題很有幫助,因?yàn)樵贚inux操作系統(tǒng)中運(yùn)行的程序通常會(huì)把系統(tǒng)消息和錯(cuò)誤消息寫(xiě)入相應(yīng)的日志文件,這樣系統(tǒng)一旦出現(xiàn)問(wèn)題就會(huì)“有據(jù)可查”,此外,當(dāng)主機(jī)遭受 破壞時(shí),日志文件還可以幫助尋找破壞 者留下別的痕跡。
在Linux操作系統(tǒng)中,日志數(shù)據(jù)主要包括以下三種類型:
- 內(nèi)核及系統(tǒng)日志:這種日志數(shù)據(jù)由系統(tǒng)服務(wù)rsyslog統(tǒng)一管理,根據(jù)其主配置文件/etc/rsyslog.conf中的設(shè)置決定將內(nèi)核消息及各種系統(tǒng)程序消息記錄到什么位置。 系統(tǒng)中有相當(dāng)一部分程序會(huì)把自己的日志文件交由rsyslog管理,因而這些程序使用的日志記錄也具有相似的格式;
- 用戶日志:這種日志數(shù)據(jù)用于記錄Linux操作系統(tǒng)用戶登錄及退出系統(tǒng)的相關(guān)信息,包括用戶名、登錄的終端、登錄時(shí)間、來(lái)源主機(jī)、正在使用的進(jìn)程操作等;
- 程序日志:有些應(yīng)用程序會(huì)選擇由自己獨(dú)立管理一份日志文件(而不是交給rsyslog服務(wù)管理),用于記錄本程序運(yùn)行過(guò)程中的各種事件信息。由于這些程序只負(fù)責(zé)管理自己的日志文件,因此不同程序所使用的日志記錄格式可能會(huì)存在較大的差異;
Linux操作系統(tǒng)本身和大部分的服務(wù)器程序的日志文件都默認(rèn)放在目錄/var/log/下。一部分程序公用一個(gè)日志文件,一部分程序使用單個(gè)日志文件;而有些大型的服務(wù)程序由于日志文件不止一個(gè),所以會(huì)在/var/log/目錄中建立相應(yīng)的子目錄來(lái)存放日志文件,這樣既保證了日志文件目錄的結(jié)構(gòu)清晰,又可以快速定位日志文件。有相當(dāng)一部分日志文件只有root用戶才有權(quán)限讀取,這保證了相關(guān)信息的安全性。
對(duì)于Linux操作系統(tǒng)中的日志文件,有必要了解其各自的用途,這樣才能在需要的時(shí)候更快地找到問(wèn)題所在、及時(shí)地解決各種故障。
常見(jiàn)的一些日志文件,如圖:
分析日志文件的目的在于通過(guò)瀏覽日志查找關(guān)鍵信息,對(duì)系統(tǒng)服務(wù)進(jìn)行調(diào)試,以及判斷發(fā)生故障的原因等。
對(duì)于大多數(shù)文本格式的日志文件(如內(nèi)核及系統(tǒng)日志、大多數(shù)的程序日志),可以使用tail、more、cat、less等命令進(jìn)行查看,對(duì)于一些特殊的二進(jìn)制的日志文件(如用戶日志)則需要使用特定的查詢命令。
rsyslog服務(wù)所使用的配置文件為/etc/rsyslog.conf。
[root@localhost ~]# grep -v "^$" /etc/rsyslog.conf
//過(guò)濾空行
# rsyslog 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 ####
# The imjournal module bellow is now used as a message source instead of imuxsock.
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
…………………… //省略部分內(nèi)容
從配置文件中可以看出,受rsyslog服務(wù)管理的日志文件都是Linux操作系統(tǒng)中主要的日志文件,它們記錄了Linux操作系統(tǒng)中內(nèi)核、用戶認(rèn)證、電子郵件、計(jì)劃任務(wù)等基本的系統(tǒng)消息。在Linux內(nèi)核中,根據(jù)日志消息的重要程度不同,將其分為不同的優(yōu)先級(jí)別(數(shù)字越小,優(yōu)先級(jí)越高,消息越重要)。如圖:
內(nèi)核及大多數(shù)系統(tǒng)消息被記錄到公共日志文件/var/log/messages中,而其他一些程序消息被記錄到各自獨(dú)立的日志文件中,此外日志消息還能夠記錄到特定的存儲(chǔ)設(shè)備中,或者直接發(fā)送給指定用戶。
對(duì)于rsyslog服務(wù)統(tǒng)一管理的大部分日志文件,使用的日志記錄格式基本上是相同的。以公共日志/var/log/messages文件的記錄格式為例,其中每一行表示一條日志消息,每一條消息均包括以下四個(gè)字段:
在有些情況下,可以設(shè)置rsyslog,使其在把日志信息記錄到文件的同時(shí)將日志信息發(fā)送到打印機(jī)進(jìn)行打印,這樣無(wú)論網(wǎng)絡(luò) 非法進(jìn)入 者怎么修改日志都不能清除***的痕跡。rsyslog日志服務(wù)是一個(gè)常被 破壞 的的顯著目標(biāo),破壞了它將管理員難以發(fā)現(xiàn) 非法進(jìn)入 及相關(guān)信息,因此要特別注意監(jiān)控其守護(hù)進(jìn)程及配置文件。
在wtmp、btmp、lastlog等日志文件中,保存了系統(tǒng)用戶登錄、退出等相關(guān)的時(shí)間消息。但是這些文件都是二進(jìn)制的數(shù)據(jù)文件,不能直接使用tail、less等文本查看工具進(jìn)行瀏覽,需要使用who、w、users、last和lastb等用戶查詢命令來(lái)獲取日志信息。
user命令只是簡(jiǎn)單地輸出當(dāng)前登錄的用戶名稱,每個(gè)顯示的用戶名對(duì)應(yīng)一個(gè)登錄會(huì)話。如果一個(gè)用戶有不止一個(gè)登錄會(huì)話,那么他的用戶名將顯示與其相同的次數(shù)。操作如下:
[root@localhost ~]# users
(unknown) root root root
who命令用于報(bào)告當(dāng)前登錄到系統(tǒng)中的每個(gè)用戶的信息。使用該命令,系統(tǒng)管理員可以查看當(dāng)前系統(tǒng)存在哪些不合法的用戶,從而對(duì)其進(jìn)行審計(jì)和處理。who的默認(rèn)輸出包括用戶名、終端類型、登錄日期及遠(yuǎn)程主機(jī)。操作如下:
[root@localhost ~]# who
(unknown) :0 2019-09-10 00:01 (:0)
root tty2 2019-09-10 00:10
root pts/0 2019-09-09 16:25 (192.168.1.253)
root tty3 2019-09-09 16:42
w命令用于顯示當(dāng)前系統(tǒng)中的每個(gè)用戶及其運(yùn)行的進(jìn)程信息,比users、who命令的輸出內(nèi)容更豐富一些,操作如下:
[root@localhost ~]# w
16:49:29 up 48 min, 4 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCU WHAT
root tty2 00:10 ? 0.84s 0.84s -bash
root pts/0 192.168.1.253 16:25 1.00s 0.10s 0.06s w
root tty3 16:42 ? 0.08s 0.03s -bash
last命令用于查詢成功登錄到系統(tǒng)的用戶記錄,最近的登錄情況將顯示在最前面。
[root@localhost ~]# last
xiaoli tty3 Thu Sep 12 04:49 still logged in
root pts/0 192.168.1.253 Thu Sep 12 04:47 still logged in
root tty2 Thu Sep 12 04:46 still logged in
lastb命令用于查詢登錄失敗的用戶記錄,如登錄的用戶名錯(cuò)誤,密碼不正確等情況都將記錄下來(lái)。
[root@localhost ~]# lastb
xiaowang tty3 Thu Sep 12 04:52 - 04:52 (00:00)
xiaoli tty3 Thu Sep 12 04:52 - 04:52 (00:00)
除了使用lastb命令以外,還可以查看安全日志/var/log/secure。查看日志文件可以使用webalizer、Awstats軟件可以通過(guò)圖形化查看日志,通俗易懂!
在Linux操作系統(tǒng)中,還有相當(dāng)一部分應(yīng)用程序沒(méi)有使用rsyslog服務(wù)來(lái)管理日志,而是由程序自己維護(hù)日志記錄。例如:http網(wǎng)站服務(wù)等。不同應(yīng)用程序i的日志記錄格式差別很大,且沒(méi)有嚴(yán)格使用統(tǒng)一的格式。
作為一名合格的系統(tǒng)管理人員,應(yīng)該提高警惕,隨時(shí)注意各種可疑狀況,定期并隨機(jī)檢查各種系統(tǒng)日志文件,包括一般信息日志、網(wǎng)絡(luò)連接日志、文件傳輸日志及用戶登錄日志記錄等。在檢查這些日志時(shí),要注意是否有不和常理的時(shí)間或操作記錄。
出現(xiàn)以下情況之一,就需要多加注意:
- 用戶在非常規(guī)的時(shí)間登錄,或者用戶登錄系統(tǒng)的IP地址和往常的不一樣;
- 用戶登錄失敗的日志記錄,尤其是那些一再連續(xù)嘗試進(jìn)入系統(tǒng)失敗的日志記錄;
- 非法使用或不正當(dāng)使用超級(jí)用戶權(quán)限;
- 無(wú)故或者非法重新啟動(dòng)各項(xiàng)網(wǎng)絡(luò)服務(wù)的記錄;
- 不正常的日志記錄,如日志殘缺不全,或者比如wtmp這樣的日志文件無(wú)故缺少了中間的記錄文件。
另外,需要管理人員注意的是,日志并不是完全可靠的,聰明的黑 客在進(jìn)入系統(tǒng)后經(jīng)過(guò)會(huì)打掃現(xiàn)場(chǎng)。所以管理人員需要綜合運(yùn)用以上的系統(tǒng)命令,全面、綜合地進(jìn)行審查和檢測(cè)。切記不要斷章取義,否則將會(huì)做出錯(cuò)誤的判斷。
Linux操作系統(tǒng)的啟動(dòng)過(guò)程涉及到MBR、GRUB啟動(dòng)菜單、系統(tǒng)初始化配置文件等各方面,其中任何一個(gè)環(huán)節(jié)出現(xiàn)故障都可能導(dǎo)致系統(tǒng)啟動(dòng)失常,因此一定要在注意好相關(guān)文件的備份工作。
MBR扇區(qū)包括三部分:
- 系統(tǒng)引導(dǎo)程序(GRUB引導(dǎo)菜單占用446字節(jié));
- 分區(qū)表(最多可以有四個(gè)主分區(qū),每個(gè)分區(qū)占用16字節(jié));
- 扇區(qū)的結(jié)束標(biāo)志占用2字節(jié);
MBR位于物理硬盤(pán)的第一個(gè)扇區(qū)(512字節(jié)),該扇區(qū)又稱為主引導(dǎo)扇區(qū)(MBR扇區(qū)),除了包含系統(tǒng)引導(dǎo)程序的部分?jǐn)?shù)據(jù)外部分?jǐn)?shù)據(jù)外,還包含整個(gè)硬盤(pán)的分區(qū)表記錄。當(dāng)主引導(dǎo)扇區(qū)發(fā)生故障時(shí),將很有可能無(wú)法進(jìn)入引導(dǎo)才散,或者無(wú)法找到正確的分區(qū)位置而無(wú)法加載系統(tǒng),通過(guò)該硬盤(pán)引導(dǎo)主機(jī)時(shí)很可能進(jìn)入黑屏、死機(jī)狀態(tài)。
通過(guò)下面示例我們開(kāi)始對(duì)MBR扇區(qū)進(jìn)行備份、模擬破壞、修復(fù)的過(guò)程:
由于MBR扇區(qū)中包含了整個(gè)硬盤(pán)的分區(qū)表記錄,因此該扇區(qū)的備份文件必須存放到其他的存儲(chǔ)設(shè)備中,否則在恢復(fù)時(shí)將無(wú)法讀取到備份文件。例如:
[root@localhost ~]# mkdir /backup
[root@localhost ~]# mount /dev/sdb1 /backup
[root@localhost ~]# dd if=/dev/sda of=/backup/sda.mbr.bak bs=512 count=1
//使用dd命令將第一塊硬盤(pán)中的MBR扇區(qū)數(shù)據(jù)備份到第二塊硬盤(pán)sdb1分區(qū)中
關(guān)于硬盤(pán)分區(qū)等詳細(xì)情況可以參考博文:Linux磁盤(pán)和文件系統(tǒng)管理(一)
[root@localhost ~]# dd if=/dev/zero of=/dev/sda bs=512 count=1
//使用/dev/zero(無(wú)限寫(xiě)零)文件覆蓋原本的MBR扇區(qū)數(shù)據(jù)
系統(tǒng)重啟,將會(huì)出現(xiàn)“Operating system not found”的提示信息,表示無(wú)法找到可用的操作系統(tǒng),因此無(wú)法啟動(dòng)主機(jī)。
由于MBR扇區(qū)被破壞以后,就無(wú)法再?gòu)挠脖P(pán)啟動(dòng)系統(tǒng)化,所以需要使用其他硬盤(pán)中的操作系統(tǒng)進(jìn)行引導(dǎo),或者使用Centos系統(tǒng)的安裝光盤(pán)進(jìn)行引導(dǎo),不管使用什么方式,目的都是相同的——獲得一個(gè)可以執(zhí)行命令的Shell環(huán)境,以便從備份文件中恢復(fù)MBR扇區(qū)中的數(shù)據(jù)。
我們使用系統(tǒng)盤(pán)引導(dǎo)為例,操作如圖:
完成以上操作后,就會(huì)出現(xiàn)一個(gè)帶“sh-4.2#”提示符的bash環(huán)境,如圖:
完成恢復(fù)操作以后,執(zhí)行“exit”命令退出當(dāng)前臨時(shí)shell環(huán)境,系統(tǒng)將會(huì)自動(dòng)重啟!
GRUB是大多數(shù)Linux操作系統(tǒng)默認(rèn)使用的引導(dǎo)程序,可以通過(guò)啟動(dòng)菜單的方式選擇進(jìn)入不同的操作系統(tǒng)(如果有別的系統(tǒng)),當(dāng)配置文件/boot/grub2/grub.cfg 丟失,或者關(guān)鍵配置出現(xiàn)錯(cuò)誤,或者M(jìn)BR中的引導(dǎo)程序遭到破壞時(shí),
提前備份grub配置文件:
[root@localhost ~]# vim /boot/grub2/grub.cfg
[root@localhost ~]# mv /boot/grub2/grub.cfg /boot/grub2/grub.cfg.bak
//將原本的grub配置文件改名
重啟之后,Linux主機(jī)啟動(dòng)后可能會(huì)出現(xiàn)“grub>”的提示符,無(wú)法完成進(jìn)一步的系統(tǒng)啟動(dòng)過(guò)程。如圖:
解決方案:
進(jìn)入急救模式,如圖:
完成以上操作后,就會(huì)出現(xiàn)一個(gè)帶“sh-4.2#”提示符的bash環(huán)境,具體操作命令如圖:
當(dāng)選擇啟動(dòng)方式為光盤(pán)啟動(dòng)時(shí),建議修改完成之后依然選擇硬盤(pán)啟動(dòng),也可以根據(jù)光盤(pán)啟動(dòng)的提示信息手工選擇本地硬盤(pán)啟動(dòng),如圖:
完成以后操作后,系統(tǒng)就可正常啟動(dòng)!
注意:CentOS7因?yàn)槭褂玫氖莋rub2,配置文件同grub有不少變化,一定要切記備份grub.cfg以便恢復(fù)。
遺忘root密碼可以參考博文:遺忘Linux系統(tǒng)root密碼所采取的必要措施
無(wú)論是MBR扇區(qū)故障、GRUB引導(dǎo)菜單還是遺忘root密碼相關(guān)操作,都可進(jìn)入急救模式進(jìn)行修復(fù)。
文件系統(tǒng)及磁盤(pán)中所存儲(chǔ)的數(shù)據(jù)的價(jià)值是無(wú)法估量的,管理員的工作職責(zé)之一就是必須確保數(shù)據(jù)的安全。由于磁盤(pán)屬于易損耗品,無(wú)法預(yù)估它什么時(shí)候會(huì)損壞,所以最好的辦法就是建立完整的備份機(jī)制。當(dāng)系統(tǒng)出現(xiàn)文件系統(tǒng)或磁盤(pán)故障時(shí)沒(méi)一定要慎重處理。
在Linux主機(jī)中,可能會(huì)因?yàn)榉钦jP(guān)機(jī)、突然斷電、設(shè)備數(shù)據(jù)讀寫(xiě)異常等原因?qū)е挛募到y(tǒng)破壞。比較常見(jiàn)的是超級(jí)快損壞。超級(jí)快是文件系統(tǒng)的核心“檔案”,它記錄了該文件系統(tǒng)的類型、大小、空閑磁盤(pán)塊等信息。
當(dāng)文件系統(tǒng)的超級(jí)塊數(shù)據(jù)損壞是,Linux將無(wú)法識(shí)別該文件系統(tǒng),掛載時(shí)會(huì)出現(xiàn)錯(cuò)誤提示以致不能正常使用。執(zhí)行下列操作可以破壞文件的超級(jí)塊數(shù)據(jù)庫(kù)。命令如下:
[root@localhost ~]# dd if=/dev/zero of=/dev/sdb1 bs=512 count=4
記錄了4+0 的讀入
記錄了4+0 的寫(xiě)出
2048字節(jié)(2.0 kB)已復(fù)制,0.000868901 秒,2.4 MB/秒
[root@localhost ~]# mkdir /a
[root@localhost ~]# mount /dev/sdb1 /a
mount: /dev/sdb1 寫(xiě)保護(hù),將以只讀方式掛載
mount: 未知的文件系統(tǒng)類型“(null)”
[root@localhost ~]# vim /etc/fstab
…………………… //省略部分內(nèi)容
/dev/sdb1 /a xfs defaults 0 1
//實(shí)現(xiàn)自動(dòng)掛載
重啟系統(tǒng)后,會(huì)出現(xiàn)以下錯(cuò)誤,如圖:
修復(fù)完畢!?。?/p>
顯而易見(jiàn),當(dāng)一個(gè)文件系統(tǒng)的磁盤(pán)空間耗盡以后,將無(wú)法繼續(xù)在該分區(qū)中創(chuàng)建新的文件數(shù)據(jù),從而導(dǎo)致故障的出現(xiàn)。
當(dāng)因?yàn)楦謪^(qū)磁盤(pán)空間不足,而無(wú)法啟動(dòng)進(jìn)入Linux操作系統(tǒng)時(shí),可以進(jìn)入急救模式,清理占用大量空間的文件??梢允褂妹睢癲d if=/dev/zer0 of=/a bs=1M count=999999”模擬故障。
除此之外,在每一個(gè)文件系統(tǒng)中,能夠使用的文件數(shù)量(對(duì)應(yīng)i結(jié)點(diǎn)的數(shù)量)也是有限的,當(dāng)一個(gè)文件系統(tǒng)被格式化后,其i結(jié)點(diǎn)數(shù)也就固定了,如果用戶故意消耗i結(jié)點(diǎn)數(shù)量,那么,及時(shí)該分區(qū)有大量的空間,也不可以創(chuàng)建文件。
通過(guò)示例了解一下:
[root@localhost ~]# mkdir /a
[root@localhost ~]# mount /dev/sdb1 /a
[root@localhost ~]# df -i /a
文件系統(tǒng) Inode 已用(I) 可用(I) 已用(I)% 掛載點(diǎn)
/dev/sdb1 10485248 3 10485245 1% /a
編寫(xiě)一個(gè)小腳本,消耗i結(jié)點(diǎn)數(shù)量,腳本內(nèi)容如下:
[root@localhost ~]# vim a.sh
#!/bin/bash
i=1
while [ $i -le 310485245 ]
do
touch /a/file$i
let i++
done
[root@localhost ~]# sh a.sh &
[root@localhost ~]# df -i /a
文件系統(tǒng) Inode 已用(I) 可用(I) 已用(I)% 掛載點(diǎn)
/dev/sdb1 10485248 0 3 10485245 100% /a
[root@localhost ~]# touch /a/newfile
touch: 無(wú)法創(chuàng)建“/a/newfile” :設(shè)備上沒(méi)有空間
[root@localhost ~]# df -hT /a
文件系統(tǒng) 類型 容量 已用 可用 已用% 掛載點(diǎn)
/dev/mapper/cl-root xfs 17G 4.5G 13G 26% /
[root@localhost ~]# rm -rf /a/file*
磁盤(pán)壞道分為邏輯壞道和物理壞道來(lái)哪種,前者是由于軟件操作不當(dāng)造成,可以使用軟件修復(fù)工具進(jìn)行修復(fù),而后者是物理性損壞,只能通過(guò)更改磁盤(pán)分區(qū)或扇區(qū)的占用位置進(jìn)行進(jìn)行改善,從而排除包含壞塊的磁盤(pán)空間,若磁盤(pán)出現(xiàn)以下現(xiàn)象,則有可能是磁盤(pán)出現(xiàn)壞道,需要檢測(cè)和修復(fù)。
在Linux系統(tǒng)中,檢測(cè)磁盤(pán)的壞道情況可以使用badblocks命令進(jìn)行,結(jié)合“-s”用于顯示進(jìn)度信息;“-v”選項(xiàng)用于顯示詳情。
[root@localhost ~]# badblocks -sv /sdb/sdb
在長(zhǎng)期使用計(jì)算機(jī)的過(guò)程中,文件系統(tǒng)和磁盤(pán)類的故障現(xiàn)象很難完全避免,對(duì)于此類故障的修復(fù)需要十分謹(jǐn)慎,如果操作不當(dāng)可能會(huì)加重?cái)?shù)據(jù)破壞的程度。當(dāng)發(fā)現(xiàn)磁盤(pán)中存在壞道時(shí),應(yīng)盡快停止系統(tǒng)中的應(yīng)用服務(wù)、備份相關(guān)數(shù)據(jù),必要時(shí)立即關(guān)閉系統(tǒng)一方磁盤(pán)壞道進(jìn)一步擴(kuò)散,避免導(dǎo)致更大的損失。對(duì)于存在壞道的硬盤(pán)設(shè)備,應(yīng)使用其他完好的硬盤(pán)進(jìn)行替換。
———————— 本文至此結(jié)束,感謝閱讀 ————————
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。