這篇文章將為大家詳細(xì)講解有關(guān)Linux中如何實(shí)現(xiàn)軟件包類故障排錯(cuò),小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
10年積累的網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有曲阜免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。軟件包類故障在Linux系統(tǒng)中比較常見,例如:需要編譯源碼包程序時(shí)系統(tǒng)中沒有安裝gcc編譯工具,安裝RPM軟件包時(shí)有未解決的依賴關(guān)系,程序庫文件或頭文件的安裝路徑不正確等,軟件包類故障產(chǎn)生的原因非常多,通常只需要根據(jù)相應(yīng)的錯(cuò)誤提示信息,確認(rèn)安裝好編譯環(huán)境,找到所需要的依賴軟件包,糾正庫文件或?qū)?yīng)的頭文件路徑即可。
下面主要介紹rpm數(shù)據(jù)庫損壞和找不到“.so”文件的故障解決方法。
1、rpm數(shù)據(jù)庫損壞
rpm數(shù)據(jù)庫損壞的故障并不多見,出現(xiàn)該故障的原因一般是由于經(jīng)常強(qiáng)制關(guān)機(jī),誤刪除運(yùn)行中的文件,強(qiáng)制替換一些rpm包文件等。rpm數(shù)據(jù)庫損壞后,在使用rpm工具查詢或安裝軟件時(shí),將無法正常運(yùn)行。
eg:模擬rpm數(shù)據(jù)庫損壞故障,并驗(yàn)證錯(cuò)誤信息。
RPM作為L(zhǎng)inux系統(tǒng)中的軟件包管理機(jī)制,維護(hù)著一份獨(dú)立的文件數(shù)據(jù)庫,用于存儲(chǔ)在系統(tǒng)中已安裝的rpm包信息。當(dāng)數(shù)據(jù)文件損壞時(shí),將導(dǎo)致不能使用rpm命令或yum命令來查詢、安裝、升級(jí)、刪除rpm類軟件包。解決該故障一般只需要執(zhí)行"rpm --rebuilddb"命令,重建數(shù)據(jù)庫即可。
Ps:本系統(tǒng)httpd包已經(jīng)安裝!
eg:清除損壞的rpm數(shù)據(jù)文件,并重建數(shù)據(jù)庫信息。
看圖提示可以了吧!
2、缺少*.so類文件
在通過源碼編譯的方式安裝軟件包時(shí),程序的可執(zhí)行文件、函數(shù)庫、配置文件等一般會(huì)默認(rèn)安裝到"/usr/local'目錄下的相應(yīng)位置(前提是你的程序安裝在"/usr/local"下喔,比如:/usr/local/mysql/bin、/usr/local/mysql/lib等),以便與系統(tǒng)程序的相關(guān)目錄區(qū)別開來。
*.so文件就如同Windows系統(tǒng)中的.dll文件一樣,是庫文件。一個(gè)程序的正常安裝和運(yùn)行需要特定庫文件的支持。由于類似于"/usr/local/mysql/lib"的目錄并不包括在Linux系統(tǒng)的默認(rèn)庫文件路徑下,當(dāng)安裝其他軟件包時(shí),如果需要用到這些目錄中的動(dòng)態(tài)鏈接庫文件,將會(huì)無法找到,從而出現(xiàn)缺少".so"文件的錯(cuò)誤信息。
在RHEL5系統(tǒng)中,配置文件“/etc/ld.so.conf”記錄了動(dòng)態(tài)鏈接庫的默認(rèn)搜索路徑。當(dāng)需要添加新的庫文件搜索路徑時(shí),則必須在該文件中進(jìn)行相應(yīng)修改,修改完畢后執(zhí)行"ldconfig"命令,重新讀取新的配置信息。
eg:將"/usr/local/mysql/lib/mysql'目錄添加到系統(tǒng)的庫文件搜索路徑中。
vi /etc/ld.so.conf //在文件末尾添加一行記錄
/usr/local/mysql/lib/mysql
ldconfig
當(dāng)安裝新的應(yīng)用程序時(shí),如果提示缺少".so"文件,應(yīng)首先使用find命令查找系統(tǒng)中是否存在對(duì)應(yīng)的文件,若不存在則表示提供該鏈接庫的依賴軟件并沒有安裝,需要先獲取相應(yīng)的軟件包并安裝才行。若在系統(tǒng)中已經(jīng)存在對(duì)應(yīng)的".so"文件,則可以通過上述修改ld.so.conf文件的方法解決庫文件搜索的問題。
3、修復(fù)文件系統(tǒng)
Linux主機(jī)經(jīng)常因?yàn)榉钦jP(guān)機(jī)、突然斷電、設(shè)備數(shù)據(jù)讀寫異常等原因?qū)е挛募到y(tǒng)的破壞。比較常見的是超級(jí)塊(super-block)損壞,超級(jí)塊是文件系統(tǒng)的核心"檔案",它記錄了該文件系統(tǒng)的類型、大小、空閑磁盤塊等信息。當(dāng)文件系統(tǒng)的超級(jí)塊數(shù)據(jù)損壞時(shí),Linux將無法識(shí)別該文件系統(tǒng),也就無法掛載使用。
當(dāng)通過"/etc/fstab"配置文件自動(dòng)加載的文件系統(tǒng)出現(xiàn)錯(cuò)誤時(shí),Linux系統(tǒng)開機(jī)后一般會(huì)自動(dòng)進(jìn)行檢測(cè),并提示用戶需要進(jìn)行文件系統(tǒng)的修復(fù)操作,例如:當(dāng)"/dev/sdb1"分區(qū)的超級(jí)塊出現(xiàn)錯(cuò)誤時(shí),啟動(dòng)后系統(tǒng)將提示"Give root password for maintenance"
這時(shí)只需要輸入root用戶的密碼,即可進(jìn)入到一個(gè)臨時(shí)的Shell環(huán)境,在這里用戶可以對(duì)出現(xiàn)錯(cuò)誤的文件系統(tǒng)進(jìn)行修復(fù)。修復(fù)一般的文件系統(tǒng)錯(cuò)誤可以使用fsck命令,結(jié)合"-t"選項(xiàng)指定文件系統(tǒng)類型,結(jié)合“-y”選擇對(duì)發(fā)現(xiàn)的問題自動(dòng)回答“yes”。需要注意的是,如果該文件系統(tǒng)遭受破壞的情況很嚴(yán)重,則修復(fù)完畢后可能仍然會(huì)丟失一些數(shù)據(jù),因此請(qǐng)慎重決定是否進(jìn)行修復(fù)。
eg:使用fsck命令修復(fù)位于"/dev/sdb1"分區(qū)中的ext3文件系統(tǒng)。
fsck -yt ext3 /dev/sdb1
exit //退出臨時(shí)Shell環(huán)境后將自動(dòng)重啟。
4、磁盤資料耗盡故障
顯而易見,當(dāng)一個(gè)文件系統(tǒng)的磁盤空間被耗盡以后,將無法繼續(xù)在該分區(qū)創(chuàng)建新的文件數(shù)據(jù),從而導(dǎo)致故障的出現(xiàn),例如:當(dāng)根分區(qū)"/"中的磁盤空間耗盡以后,將可能導(dǎo)致部分程序乃至整個(gè)系統(tǒng)無法正常啟動(dòng)或進(jìn)行,因?yàn)橐恍┡R時(shí)的運(yùn)行文件將無法建立。
當(dāng)根分區(qū)磁盤空間不足無法啟動(dòng)進(jìn)入Linux系統(tǒng)時(shí),可以通過RHEL5的光盤進(jìn)入急救模式,轉(zhuǎn)移或清除掉根分區(qū)占用大量空間的文件。過程不再描述。
除此以外,當(dāng)ext3文件系統(tǒng)中,i節(jié)點(diǎn)作為文件的索引節(jié)點(diǎn),決定了該磁盤中文件數(shù)據(jù)的存儲(chǔ)位置。當(dāng)一個(gè)文件系統(tǒng)被創(chuàng)建以后,其i節(jié)點(diǎn)數(shù)就已經(jīng)固定下來了,從而在該文件系統(tǒng)中能夠使用的文件數(shù)量也就固定下來了。如果用戶在該分區(qū)中創(chuàng)建了巨量的細(xì)小文件(耗盡i節(jié)點(diǎn)),將可能出現(xiàn)這種情況;雖然該分區(qū)中仍然有大量的剩余磁盤空間,但是用戶卻無法再 建立新的文件。
4.1、模擬i節(jié)點(diǎn)耗盡故障
eg:1、以一個(gè)20M的ext3文件系統(tǒng)為例(“/dev/sdb2”),將其掛載到"/data"目錄下。并使用帶“-i”選項(xiàng)的df命令確認(rèn)該分區(qū)的i節(jié)點(diǎn)的使用情況。
4.2、編寫一個(gè)循環(huán)創(chuàng)建空文件的腳本程序,運(yùn)行該腳本直至耗盡sdb2分區(qū)中的i節(jié)點(diǎn)。
4.3、i節(jié)點(diǎn)耗盡以后,再次創(chuàng)建新的文件時(shí),將會(huì)出現(xiàn)"設(shè)備上沒有空間"的錯(cuò)誤信息,但是使用df命令可以查看到該分區(qū)中還有可用的剩余空間,只是i節(jié)點(diǎn)數(shù)已經(jīng)用完。
4.4、修復(fù)i節(jié)點(diǎn)耗盡故障
理解i節(jié)點(diǎn)耗盡故障的根結(jié)以后,問題就好了點(diǎn)了,只要找出該分區(qū)中占用大量i節(jié)點(diǎn)的細(xì)小文件,并進(jìn)行轉(zhuǎn)移或者刪除即可。
rm -rf `find /data -empty -a -type f`
5、無法卸載已掛載的設(shè)備
在Linux系統(tǒng)中,通過umount命令卸載光驅(qū)等設(shè)備時(shí),有時(shí)候會(huì)出現(xiàn)"device is busy"的提示信息,而無法卸載。這表示"設(shè)備正忙",很可能是由于用戶或者其他程序正在使用設(shè)備的資料而造成的,系統(tǒng)基于保護(hù)性考慮,將禁止直接卸載該設(shè)備。
eg:當(dāng)用戶的當(dāng)前功能路徑位于光盤中的目錄時(shí),將無法卸載該光盤設(shè)備。
由于umount命令并不會(huì)告知是那個(gè)用戶、程序正在使用該設(shè)備中的資源,因此在當(dāng)前登錄的用戶數(shù)量較多、進(jìn)程結(jié)構(gòu)復(fù)雜的情況下會(huì)很難定位正在使用該目錄的進(jìn)程。使用fuser命令可以幫助解決這個(gè)問題
fuser命令用戶找出正在使用某個(gè)設(shè)備或文件/目錄的用戶、程序等相關(guān)信息。通過“-m”選項(xiàng)可以指定相應(yīng)的文件或目錄,“-v”選項(xiàng)可以顯示詳細(xì)信息。如果使用"-k"選項(xiàng),還可以強(qiáng)制關(guān)閉正在使用該文件或目錄的進(jìn)程(當(dāng)然,也可以使用kill命令終止該進(jìn)程。)
eg:查看正在使用"/media"目錄的用戶、進(jìn)程等相關(guān)信息,然后關(guān)閉正在使用該目錄的進(jìn)程。
6、檢測(cè)硬盤壞道
磁盤壞道分為邏輯壞道和物理壞道兩種,前者主要由于軟件操作不當(dāng)造成,可以使用軟件修復(fù);而后者是物理性損壞,只能通過更改磁盤分區(qū)或扇區(qū)占用位置來進(jìn)行改善,排除掉包含壞塊的磁盤空間。當(dāng)磁盤出現(xiàn)一下現(xiàn)象時(shí),有可能是磁盤出現(xiàn)壞道,需要進(jìn)行檢測(cè)和修復(fù)。
>:讀取磁盤中的數(shù)據(jù)時(shí),磁盤設(shè)備發(fā)出異常聲響。
>:訪問磁盤中的某個(gè)文件時(shí),反復(fù)讀取且出錯(cuò),提示文件損壞。
>:對(duì)于新建立的分區(qū)無法完成格式化。
>:系統(tǒng)使用該磁盤時(shí)頻繁死機(jī)。
硬盤出現(xiàn)壞道后,如果不及時(shí)更換或進(jìn)行技術(shù)出來,壞道就會(huì)越來越多,并可能造成頻繁死機(jī)和數(shù)據(jù)丟失的后果。所有必要時(shí)應(yīng)該對(duì)磁盤進(jìn)行定期檢測(cè),檢測(cè)是否存在壞道。
在Linux系統(tǒng)中,檢測(cè)磁盤的壞道情況可以使用badblocks命令進(jìn)行,在創(chuàng)建文件系統(tǒng)的過程中也可以結(jié)合mkfs命令的選項(xiàng)進(jìn)行檢測(cè)。使用badblocks命令時(shí),“-s”選項(xiàng)用戶顯示進(jìn)度信息,“-v”選項(xiàng)用于顯示詳情。
eg:使用mkfs命令格式化"/dev/sdb2"分區(qū),并結(jié)合"-c"選項(xiàng)進(jìn)程壞塊檢測(cè)。
eg:使用badblocks命令檢測(cè)"/dev/sdb2"分區(qū)中是否存心壞塊。
關(guān)于“Linux中如何實(shí)現(xiàn)軟件包類故障排錯(cuò)”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。