故障排查:
使用命令查看磁盤使用量
# 使用人類可讀的格式(預設值是不加這個選項的...)
df -h
# --inodes 列出 inode 資訊,不列出已使用 block
df -i
# 查看當前目錄下各個文件及目錄佔用空間大小
du -sh /
情況一:一般磁盤空間滿了,是由於服務器上面跑的服務日誌引起的佔用太多空間,去刪除多於的大文件就可以了。
# 從根盤開始查找大於100字節的文件(字節數可以自己設置)
find / -size +100c -print
# 也可以使用如下命令將文件列出來(注意空格)
find / -size +100c -exec ls -l {} \;
情況二:如果df -hT查詢出來磁盤佔用滿了,但是使用 du -sh 查看沒有那麼多。
- 原因:使用rm 命令刪除文件時,只有當前文件不存在任何link纔會被刪除當有進程訪問這個文件時,這個文件實際佔用空間不會被釋放。du 是根據文件名進行空間統計,使用rm 時該文件對系統來說已經不可見,所以不會統計這個文件。使用df 則是磁盤實際佔用的數量
- 解決方法:
# 查看正在使用的已刪除得文件
lsof|grep delete
# 發現存在多個這樣文件,kill 掉進程文件刪除成功
kill <進程id>
情況三:因爲認爲的誤操作,導致某些進程在沒有執行完成時被kill 掉了,但是緩存中的程序沒有釋放,仍然在運行,這會產生一些臨時文件佔用的磁盤空間資源,這種現象的特點是爆發式增長,在很短時間內就將磁盤空間佔滿。
- 如果因爲父進程被殺掉,子進程還運行導致,那麼最簡單,kill 子進程,就會釋放;
- 如果能用ipcs 命令確認是那個用戶進程,那麼也不困難,順着使用ipcrm 命令就行;
- 執行進程的用戶是比較關鍵用戶如:root用戶、有實例的oracle 用戶、在線生產用戶等。那麼建議在確定一位是共享緩存的原因導致的問題後重啓服務器;