Linux 執(zhí)行 df 和 du 查看磁盤(pán)時(shí)占用結(jié)果不一致的解決辦法

問(wèn)題現(xiàn)象

1、執(zhí)行 df -h 查看 ECS Linux 實(shí)例文件系統(tǒng)使用率,可以看到 /dev/xvdb1 磁盤(pán)占用了約27G,掛載目錄為 /opt 。

1531049590662f3fa303a98.jpg

2、進(jìn)入到 /opt 目錄執(zhí)行 du -sh ,顯示空間總占用量約 2.4 G,即df 和du查看到的結(jié)果不一致。

1531049590682d3db0a9740.jpg

原因分析

  • du 命令對(duì)統(tǒng)計(jì)文件逐個(gè)進(jìn)行 fstat 系統(tǒng)調(diào)用,獲取文件大小。它的數(shù)據(jù)是基于文件獲取,可以跨多個(gè)分區(qū)操作。

  • df 命令使用 statfs 系統(tǒng)調(diào)用,直接讀取分區(qū)的超級(jí)塊信息獲取分區(qū)使用情況。它的數(shù)據(jù)基于分區(qū)元數(shù)據(jù),只能針對(duì)整個(gè)分區(qū)。

  • 用戶刪除了大量的文件后,du 就不會(huì)在文件系統(tǒng)目錄中統(tǒng)計(jì)這些文件。如果此時(shí)還有運(yùn)行中的進(jìn)程持有這個(gè)已經(jīng)被刪除的文件句柄,那么這個(gè)文件就不會(huì)真正在磁盤(pán)中被刪除,分區(qū)超級(jí)塊中的信息也就不會(huì)更改,df 仍會(huì)統(tǒng)計(jì)這個(gè)被刪除的文件。

  • 通過(guò) lsof 查詢處于 deleted 狀態(tài)的文件,被刪除的文件在系統(tǒng)中被標(biāo)記為 deleted 。如果系統(tǒng)有大量 deleted 狀態(tài)的文件,會(huì)導(dǎo)致 du 和 df 統(tǒng)計(jì)結(jié)果不一致。

lsof |grep deleted //在opt目錄下執(zhí)行l(wèi)sof |grep deleted

解決方案

1、根據(jù) lsof 列出的 pid,kill 相應(yīng)進(jìn)程或者重啟相應(yīng)的服務(wù),如:#kill -9 692。

2、重啟服務(wù)器。重啟服務(wù)器系統(tǒng)會(huì)退出現(xiàn)有的進(jìn)程,開(kāi)機(jī)后重新加載,過(guò)程中會(huì)釋放調(diào)用的 deleted 文件的句柄。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容