早上上班收到報警:「Discuz!X 論壇無法上傳圖片」。追蹤程式日誌發現:檔案寫入臨時目錄正常,但從臨時檔生成正式圖片檔時中斷報錯。檢查權限、程式碼、覆蓋開發環境代碼均無異常。偶然發現同伺服器另一站點同樣報錯。查看 Apache 錯誤日誌提示「write failed: No space left on device」。一條 df -h 揭開真相:磁碟剩餘空間 0。原來是備份腳本跑滿了整顆磁碟。
| 時間 | 動作 | 發現 |
|---|---|---|
| 09:00 | 接到上傳失敗報警 | 程式日誌:臨時檔 → 正式檔 階段失敗 |
| 09:10 | 檢查檔案權限 (chmod/chown) | 權限正常 |
| 09:20 | 檢查程式碼邏輯、覆蓋開發環境代碼 | 代碼無異常、開發環境正常 |
| 09:30 | 發現另一站點同樣錯誤 | 排除單站點代碼問題,指向系統層面 |
| 09:35 | 查看 Apache error_log | 「write failed: No space left on device」 |
| 09:36 | 執行 df -h | 所有掛載點 Use% 100%, Available 0 |
| 09:40 | 排查佔用空間大戶 | du -h --max-depth=1 / | sort -hr 發現備份目錄佔用 95% |
| 09:45 | 清理舊備份、調整備份保留策略 | 釋放 40% 空間,上傳恢復正常 |
# 1. 快速檢視磁碟使用率 (人類可讀)
df -h
# 2. 找出佔用空間最大的目錄 (前 10)
du -h --max-depth=1 / | sort -hr | head -10
# 3. 找出指定目錄下大檔案
find /backup -type f -size +100M -exec ls -lh {} \;
# 4. 清理舊備份 (保留最近 7 天)
find /backup -type f -mtime +7 -name "*.tar.gz" -delete
# 5. 監控磁碟空間 (加入 crontab 每小時檢查)
df -h | awk 'NR>1 && $5+0 > 85 {print "Disk alert: " $0}' | mail -s "Disk Alert $(hostname)" admin@example.com
disk.used.pct > 80% 即時告警 (郵件/釘釘/Telegram/簡訊)。ENOSPC (No space left on device) 時,明確記錄「磁碟空間不足」並拋出友善錯誤訊息給前端/日誌。一條 df -h 省去數小時盲目排查。**磁碟空間耗盡是最隱蔽、破壞力最強、卻最容易預防的故障**。建立「備份保留 + 隔離儲存 + 主動監控 + 明確錯誤提示」四位一體防線,讓「No space left on device」永遠不再出現在生產日誌中。
Windows Server 2003 + MySQL 每日自動備份、壓縮、清理 5 天前舊檔完整腳本
Linux 系統管理員日常監控命令大全:iostat、vmstat、sar、nmon、ss、pidstat 實戰速查
Linux MySQL 使用者管理完整指令集:建立、授權、刪除、修改密碼與遠端連線
Gartner:延長伺服器壽命優於換代,2010 年資料中心能源危機解法
Exchange 2003 重裝域與伺服器後郵件資料遷移保留實戰指南
LNMP 環境下 MySQL Binlog 爆盤清理與禁用策略