刪除大檔案 (如日誌) 後 df -h 空間未回升,因檔案仍被進程開啟,inode 未釋放。本文示範用 lsof 定位佔用進程、重啟服務釋放空間的完整排查流程。
df -h # /var 98% 滿
du -sh /var/* # 發現 account/ 佔 3.3G
rm -rf /var/account/*
df -h # 仍 98%,du 顯示 120K
lsof | grep -i deleted
# 輸出範例:
# Billing_P 16989 blty 0u CHR 136,0 2 /dev/pts/0 (deleted)
# 找到進程屬於 billing 服務
/etc/init.d/billing restart
# 若無效,嘗試重啟管理該檔案的 daemon (如 psacct)
/etc/init.d/psacct restart
# df -h 顯示 /var 釋放至 4%
Linux 檔案被開啟時,刪除僅移除目錄項 (unlink),inode 與資料區塊保留直到**最後一個開啟該檔案的進程關閉檔案描述符**。lsof 顯示 (deleted) 標記即為此狀態。
lsof | grep deleted 確認無進程佔用。truncate -s 0 file 清空內容保留 inode。logrotate) 避免單一檔案過大。umount 分區再掛載強制釋放 (極端手段)。