Linux 伺服器磁碟空間耗盡故障排查與預防

磁碟空間耗盡是Linux 伺服器運維中最常見的問題之一。本文將從故障現象、排除想法、具體步驟到主動監測,為你提供一套完整的解決方案。

常見的故障現象

當磁碟空間出現問題時,系統通常會表現出以下症狀:

  1. 應用程式例外:服務無法寫入日誌、資料庫報錯”No space left on device”、檔案上傳失敗
  2. 系統警告:監控工具發送磁碟使用率超過閾值的通知
  3. 登入困難:SSH 連線變慢,甚至無法建立新的會話
  4. 指令失效:apt、yum 等套件管理器無法正常運作

故障定位的思路

排除磁碟空間問題遵循”先整體後局部”的原則:

  1. 確認整體使用情況- 哪些分區滿了?
  2. 定位大檔案/目錄—— 空間被什麼佔用了?
  3. 分析文件類型— 是日誌?臨時文件?還是資料檔?
  4. 判斷是否可以清理── 哪些能刪,哪些不能動?

故障定位的步驟

步驟1:查看磁碟整體使用情況

命令:df -h

正常輸出範例:Filesystem Size Used Avail Use% Mounted on /dev/sda1 50G 15G 33G 32% / /dev/sdb1 100G 20G 80G 20% /data

異常輸出範例(磁碟已滿):Filesystem Size Used Avail Use% Mounted on /dev/sda1 50G 50G 0 100% /

步驟2:定位佔用空間的大目錄

指令:du -sh /* 2>/dev/null |排序-rh |頭-20

輸出範例:30G /var 15G /usr 8G /home 5G /opt


步驟3:查找大文件

指令:find / -type f -size +500M -exec ls -lh {} ; 2>/dev/null

輸出範例:-rw-r—– 1 root root 2.1G Feb 27 14:30 /var/log/nginx/access.log -rw——- 1 root root 1.5G Feb 27 10:15 /var/lib/mysql/ibdata1

步驟4:檢查已刪除但仍被佔用的文件

指令:lsof | grep deleted

異常輸出範例:nginx 1234 root 3w REG 8,1 5368709120 /var/log/nginx/error.log (deleted)

解決方法:重新啟動佔用進程或清空文件

步驟5:清理常見”空間殺手”

清理包快取:apt clean 或yum clean all清理舊日誌:journalctl –vacuum-time=7d清理臨時檔案:rm -rf /tmp/*清除Docker:docker system prune -a

主動監測,避免事後處理

  1. 設定磁碟使用率告警

使用cron + 腳本監控:
#!/bin/bashTHRESHOLD=80USAGE=$(df / | tail -1 | awk '{print $5}' | sed 's/%//')if [ $USAGE -gt $THRESHOLD ]; then    echo "警告:根分区使用率已达 ${USAGE}%" | mail -s "磁盘告警" admin@example.comfi

添加到定时任务(每 30 分钟检查一次):
echo "*/30 * * * * /path/to/disk_alert.sh" | crontab -

  1. 日誌輪轉配置

確保 logrotate 正常運作:cat /etc/logrotate.conf logrotate -d /etc/logrotate.conf

  1. 預留緩衝空間

分區規劃時預留10-15% 的冗餘對關鍵目錄設定獨立分區(/var、/home、/tmp)使用LVM 方便後期擴容

  1. 定期巡檢清單

echo  ” = 磁碟使用情況  =” df -h echo “” echo ” = 大檔案TOP 10   = ” find / -type f -size +100M -exec ls -lh {} ; 2>/dev/null | head -10 echo “” echo ” =已刪除但未釋放的  檔案

總結

磁碟空間問題看似緊急,實則有章可循。掌握df、du、find、lsof 這幾個核心指令,配合定期監控和合理的空間規劃,就能將故障消滅在萌芽狀態。

記住:預防勝於治療,監控優於搶修。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注