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 磁盤空間不足應急手冊:10 招「軟」解決分區滿載危機

編輯:Linux 教學

現象與風險

df -h 顯示某分區 (如 /home、/var、/) 使用率 100%,導致服務崩潰、無法寫入日志、資料庫拒絕連接、SSH 登錄失敗。切勿盲目刪除,先定性再處置。

10 招診斷與釋放組合拳

1. 定期掃描建立基線,對比異常增長

ls -lR /home > /tmp/files_$(date +%F).txt
diff /tmp/files_2024-01-15.txt /tmp/files_2024-01-16.txt | grep "^>"  # 新增/增大文件
# 長期建議:部署 Prometheus node_exporter + Grafana 磁盤使用率儀表盤,設置告警閾值 80%

2. 檢查 inode 耗盡 vs 空間耗盡

df -i /home
# Inode 用盡 (IUse% 100%):海量小文件 (郵件隊列、緩存、會話文件、PHP session)
# 空間用盡:大文件 (日志、備份、媒體、數據庫、core dump)

3. 定位佔用空間最大的目錄 (du 神技)

du -h --max-depth=2 /home | sort -hr | head -20
# 或人類可讀 + 排序
du -x /home | sort -rn | head -20   # -x 不跨文件系統,速度更快

4. 精準查找大文件

find /home -type f -size +100M -printf "%s %p\n" | sort -rn | head -20
# 顯示大小(字節) + 路徑,按大小降序

5. 近期變動文件追蹤

# 最近 24 小時修改/創建
find /home -type f -mtime -1 -ls
# 精確時間範圍
touch -t 202401150800 /tmp/start
touch -t 202401160800 /tmp/end
find /home -type f -newer /tmp/start ! -newer /tmp/end -ls

6. 清理公認安全的垃圾文件

# core dump (確認已分析或無需分析)
find / -xdev -name "core*" -type f -mtime +7 -delete

# 郵件隊列積壓 (postfix/exim)
mailq | tail -20
postsuper -d ALL  # 謹慎!僅確認全為垃圾郵件時

# journal 日志 (systemd)
journalctl --vacuum-size=500M
journalctl --vacuum-time=14d

# /var/log 舊日志 (logrotate 未生效時)
find /var/log -type f -name "*.gz" -mtime +30 -delete
find /var/log -type f -name "*.[0-9]" -mtime +7 -delete

# 包管理器緩存
apt clean           # Debian/Ubuntu
dnf clean all       # Fedora/RHEL
zypper clean -a     # openSUSE
pacman -Sc          # Arch

7. 利用符號鏈接/綁定掛載遷移大目錄 (無需重新分區)

# 例:將 /home/user/large_data 遷移到 /data (另一分區有空間)
mv /home/user/large_data /data/
ln -s /data/large_data /home/user/large_data
# 或 bind mount (更透明,不影響路徑解析)
mount --bind /data/large_data /home/user/large_data
# 永久生效寫入 /etc/fstab
/data/large_data  /home/user/large_data  none  bind  0  0

8. 定位佔用空間的進程 (lsof 找出「幽靈文件」)

lsof -nP | grep deleted | awk '{print $1, $2, $9}' | sort -u
# 輸出:進程名 PID 文件路徑 (deleted)
# 解決:重啟該進程 (systemctl restart xxx) 或發送 SIGUSR1 觸發日志輪轉

9. 文件系統一致性檢查與修復 (極端情況)

# 必須在卸載或只讀掛載下執行
umount /home
fsck -y /dev/mapper/vg-home   # ext4/xfs 用 xfs_repair
# 注意:XFS 無 fsck,僅 xfs_repair -n 預檢,-L 強制修復 (需卸載)

10. 重啟作為最後手段 (釋放被佔用的 deleted 文件、清理 tmpfs、復位掛載點)

reboot
# 重啟前確保關鍵服務已備份、數據庫正常關閉

預防長效機制

  • 分區規劃:/ 50-100G、/var 獨立 (日志/數據庫/郵件)、/home 獨立、/tmp 掛載 tmpfs (限制大小)。
  • 日志輪轉:/etc/logrotate.d/ 強制 daily、compress、maxage 30、missingok、notifempty。
  • 監控告警:disk_usage > 80% 觸發釘釘/企業微信/郵件告警。
  • 配額:quota 限制用戶/項目最大空間/文件數。
  • 定期巡檢腳本:每日跑 du/find/lsof deleted 生成報表。

總結

磁盤滿載 90% 以上由「日志失控、備份遺留、緩存無清理、幽靈文件」引起。掌握 du/find/lsof/journalctl/bind mount 五大核心工具,配合自動化巡檢與分區規劃,將「滿盤危機」轉化為常規運維動作。

Copyright © Windows教程網 All Rights Reserved