Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> 關於 Linux

Linux 磁碟空間尚餘但無法寫入檔案?inode 耗盡完整排查與解決指南

編輯:關於 Linux

df -h 顯示磁碟使用率僅 70%,但 df -hi 卻顯示某分區 IUse% 達 100% —— 經典的 inode 耗盡導致「無法建立新檔案」。本文提供兩階段定位異常目錄的指令組合,並說明監控與根因消除策略。

df -h 與 df -hi 對比圖

現象確認

# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        20G   14G  5.2G  73%  /

# df -hi
Filesystem     Inodes IUsed IFree IUse% Mounted on
/dev/sda1       1.3M  1.3M     0  100%  /

磁碟容量充足,但 inode 已滿,無法建立新檔案(含目錄、Socket、Pipe 等)。

階段一定位:大量小檔集中在少數目錄

find / -type d -size +10M

列出佔用超過 10 MB 的目錄(目錄本身佔用大通常意味包含極多檔案)。

階段二定位:大量小檔分散在大量目錄

若階段一無明顯異常目錄,改用統計各一級目錄檔案總數:

cd /
find */ ! -type l | cut -d/ -f1 | uniq -c | sort -rn
  • find */ ! -type l:列出所有一級子目錄下的所有檔案(排除符號連結)
  • cut -d/ -f1:取一級目錄名
  • uniq -c | sort -rn:統計數量並由大到小排序

若發現 /data 佔用最多,繼續深入:

cd /data
find */ ! -type l | cut -d/ -f1 | uniq -c | sort -rn

層層遞進,直至鎖定具體目錄。

常見根因與清理策略

根因典型路徑清理建議
PHP Session 檔案堆積/var/lib/php/session/調整 session.gc_maxlifetime、啟用 session.gc_probability、定期 cron 清理
郵件佇列卡住/var/spool/postfix/maildrop/檢查 Postfix 配置、清理郵件佇列 postsuper -d ALL
快取/暫存檔未清理/tmp、/var/cache、應用自定義快取目錄設定 tmpwatch/systemd-tmpfiles、應用層面定期清理
大量小日誌檔/var/log、應用日誌目錄啟用 logrotate、合併為單一檔案、限制檔案數量
容器/虛擬機映像層/var/lib/docker、/var/lib/libvirt/images清理未使用映像 docker image prune、精簡層數

監控與預警

# 納入監控系統(Prometheus + node_exporter)
# 告警規則範例
- alert: InodeUsageHigh
  expr: (node_filesystem_files{mountpoint="/"} / node_filesystem_files_total{mountpoint="/"}) > 0.85
  for: 10m
  labels:
    severity: warning
  annotations:
    summary: "Inode usage > 85% on {{ $labels.instance }}"
    description: "Mount point {{ $labels.mountpoint }} inode usage is {{ $value | humanizePercentage }}"

收到告警後,依本文兩階段指令快速定位、清理、並回報開發/應用團隊從源頭修正(如調整 Session GC、啟用 logrotate),避免復發。

Copyright © Windows教程網 All Rights Reserved