在linux中,當我們使用rm在linux上刪除了大檔案,但是如果有程序開啟了這個大檔案,卻沒有關閉這個檔案的控制代碼,那麼linux核心還是不會釋放這個檔案的磁碟空間,最後造成磁碟空間占用100%,整個系統無法正常執行。這種情況下,通過df和du命令查詢的磁碟空間,
在linux中,當我們使用rm在linux上刪除了大檔案,但是如果有程序開啟了這個大檔案,卻沒有關閉這個檔案的控制代碼,那麼linux核心還是不會釋放這個檔案的磁碟空間,最後造成磁碟空間占用100%,整個系統無法正常執行。這種情況下,通過df和du命令查詢的磁碟空間,兩者是無法匹配的,可能df顯示磁碟100%,而du查詢目錄的磁碟容量占用卻很小。
遇到這種情況,基本可以斷定是某些大檔案被某些程式占用了,並且這些大檔案已經被刪除了,但是對應的檔案控制代碼沒有被某些程式關閉,造成核心無法收回這些檔案占用的空間。
那麼,如何查詢那些檔案被某些程式占用呢:12
3lsof -n | grep deleted
command pid user fd type device size node name
dd 31708 higkoo 1w reg 8,2 5523705856 429590 /data/filetest (deleted)
命令:lsof -n| grep deleted列印出所有針對已刪除檔案的讀寫操作,這類操作是無效的,也正是磁碟空間莫名消失的根本原因。
解決辦法:kill -9 pid ----只需把程序刪掉就能釋放空間
lsof `which httpd` //那個程序在使用apache的可執行檔案
lsof /etc/passwd //那個程序在占用/etc/passwd
lsof /dev/hda6 //那個程序在占用hda6
lsof /dev/cdrom //那個程序在占用光碟機
lsof -c sendmail //檢視sendmail程序的檔案使用情況
lsof -c courier -u ^zahn //顯示出那些檔案被以courier打頭的程序開啟,但是並不屬於使用者zahn
lsof -p 30297 //顯示那些檔案被pid為30297的程序開啟
lsof -d /tmp 顯示所有在/tmp資料夾中開啟的instance和檔案的程序。但是symbol檔案並不在列
lsof -u1000 //檢視uid是100的使用者的程序的檔案使用情況
lsof -utony //檢視使用者tony的程序的檔案使用情況
lsof -u^tony //檢視不是使用者tony的程序的檔案使用情況(^是取反的意思)
lsof -i //顯示所有開啟的埠
lsof -i:80 //顯示所有開啟80埠的程序
lsof -i -u //顯示所有開啟的埠和unix domain檔案
lsof -i udp@[url]www.akadia.com:123 //顯示那些程序開啟了到www.akadia.com的udp的123(ntp)埠的鏈結
lsof -i [email protected]:ftp -r //不斷檢視目前ftp連線的情況(-r,lsof會永遠不斷的執行,直到收到中斷訊號,+r,lsof會一直執行,直到沒有檔案被顯示,預設是15s重新整理)
lsof -i [email protected]:ftp -n //lsof -n 不將ip轉換為hostname,預設是不加上-n引數
`lsof|grep delete|awk ''|sed 's/^/kill -9 /g'`
Linux 磁碟空間排查
場景 整個部門的所有業務系統都部署到了同一臺測試機上,然後產生大量日誌檔案後,並且都是保留了30天,導致各業務系統癱瘓。排查步驟 1 df h 檢視磁碟使用情況 2 du h max depth 1 目錄全路徑 檢視指定目錄下各資料夾 檔案 占用空間的大小 3 找到占用比較大的檔案,並且可以刪除的檔...
磁碟空間滿的問題
kinux os pc 出現磁碟空間不足問題有 導致該問題的可能原因包括 執行df h檢視磁碟使用 以及使用du sh 檢視 分析根目錄下每個目錄下面有多少個檔案。fori in doecho i find i wc l done df i 檢視實際inode 命令 命令重新建立檔案系統,指定ino...
排查磁碟空間
排查目錄的大檔案 一利用inode 排查 涉及用到命令 du sh 報告磁碟空間使用情況 s summarize 對每個引數只顯示總和 h separate dirs 單獨報告每乙個目錄的大小,不包括子目錄的大小 代表是哪個目錄 代表所有 這裡舉乙個簡單例子,block滿了 這裡我模擬了乙個環境,在...