一、問(wèn)題現(xiàn)象
在Linux系統(tǒng)的運(yùn)行過(guò)程中,會(huì)經(jīng)常遇到磁盤使用率過(guò)高,通過(guò)執(zhí)行du與df命令查看磁盤容量確出現(xiàn)不一致的現(xiàn)象,例如以下幾種現(xiàn)象:
-
執(zhí)行du和df命令顯示的結(jié)果不一致,df比du命令顯示的數(shù)據(jù)大很多。
-
使用df命令顯示磁盤使用率過(guò)高,但是執(zhí)行du命令統(tǒng)計(jì)目錄時(shí)卻磁盤使用率不高,且查不到已刪除的句柄文件。
-
當(dāng)前系統(tǒng)存在數(shù)據(jù)盤掛載點(diǎn),使用df命令查看系統(tǒng)盤容量已滿,但是在根目錄下使用du命令統(tǒng)計(jì)各文件總?cè)萘?,但是合?jì)達(dá)不到總?cè)萘俊?/p>
二、原因分析
首先了解下du和df的工作原理:
du命令會(huì)對(duì)待統(tǒng)計(jì)文件逐個(gè)調(diào)用fstat這個(gè)系統(tǒng)調(diào)用,獲取文件大小。它的數(shù)據(jù)是基于文件獲取的,所以有很大的靈活性,不一定非要針對(duì)一個(gè)分區(qū),可以跨越多個(gè)分區(qū)操作。如果針對(duì)的目錄中文件很多,du速度就會(huì)很慢了。
df命令使用的事statfs這個(gè)系統(tǒng)調(diào)用,直接讀取分區(qū)的超級(jí)塊信息獲取分區(qū)使用情況。它的數(shù)據(jù)是基于分區(qū)元數(shù)據(jù)的,所以只能針對(duì)整個(gè)分區(qū)。由于df直接讀取超級(jí)塊,所以運(yùn)行速度不受文件多少影響。
其次,出現(xiàn)du和df統(tǒng)計(jì)的值有較大偏差時(shí),主要會(huì)有以下幾種原因:
-
1、用戶刪除了大量的仍在使用的文件后,du命令不會(huì)在文件系統(tǒng)目錄中統(tǒng)計(jì)這些文件。因?yàn)檫@個(gè)已經(jīng)被刪除的文件句柄不會(huì)真正在磁盤中被刪除,分區(qū)超級(jí)塊中的inode信息不會(huì)更改,df命令仍會(huì)統(tǒng)計(jì)這個(gè)被刪除的文件。 此時(shí)可通過(guò)lsof命令查詢處于deleted狀態(tài)的文件,被刪除的文件在系統(tǒng)中被標(biāo)記為deleted。如果系統(tǒng)有大量deleted狀態(tài)的文件,會(huì)導(dǎo)致du和df命令統(tǒng)計(jì)結(jié)果不一致。
-
2、當(dāng)用du -sh *命令來(lái)統(tǒng)計(jì)某個(gè)目錄總?cè)萘繒r(shí),如果該路徑下包含隱藏文件,是不會(huì)包含在統(tǒng)計(jì)結(jié)果里的。
-
3、由于數(shù)據(jù)盤掛載前該路徑下就存在文件,掛載后用du無(wú)法查詢到原路徑下文件大小。
三、處理建議
-
1、先通過(guò)lsof|grep delete查詢目標(biāo)目錄下是否有被標(biāo)記為已刪除的文件,如有通過(guò)重啟該文件所使用的進(jìn)程可釋放空間。(如是日志類文件,在暫時(shí)無(wú)法重啟程序的情況下,也可通過(guò)進(jìn)入/proc/進(jìn)程ID/fd目錄下,找到刪除的文件,然后執(zhí)行清空命令,可臨時(shí)釋放空間的問(wèn)題。)
-
2、在目標(biāo)目錄下,執(zhí)行du -ah命令統(tǒng)計(jì)結(jié)果中看是否包含較大的隱藏文件。
-
3、排除了1和2的原因檢查后仍未解決問(wèn)題,考慮可停業(yè)務(wù)應(yīng)用,卸載數(shù)據(jù)盤后再次使用du命令查詢,看是否定位到原因。
-
4、以上排除均未找到問(wèn)題,建議對(duì)所有應(yīng)用程序進(jìn)行一個(gè)停止,觀察是否有釋放,從而進(jìn)行進(jìn)一步定位。
-
5、一時(shí)半會(huì)找不到原因的,也可通過(guò)擴(kuò)容文件系統(tǒng),先降低高水位情況, 再持續(xù)分析,畢竟擴(kuò)容也只是治標(biāo)不治本。
? ? 最后,如果覺(jué)得本文對(duì)你有幫助,歡迎點(diǎn)贊、收藏、評(píng)論!文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-594580.html
? ? There are many things that can not be broken!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-594580.html
到了這里,關(guān)于LINUX空間管理之du與df命令查看磁盤容量不一致問(wèn)題的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!