磁碟空間耗盡是Linux 伺服器運維中最常見的問題之一。本文將從故障現象、排除想法、具體步驟到主動監測,為你提供一套完整的解決方案。
常見的故障現象
當磁碟空間出現問題時,系統通常會表現出以下症狀:
- 應用程式例外:服務無法寫入日誌、資料庫報錯”No space left on device”、檔案上傳失敗
- 系統警告:監控工具發送磁碟使用率超過閾值的通知
- 登入困難:SSH 連線變慢,甚至無法建立新的會話
- 指令失效:apt、yum 等套件管理器無法正常運作
故障定位的思路
排除磁碟空間問題遵循”先整體後局部”的原則:
- 確認整體使用情況- 哪些分區滿了?
- 定位大檔案/目錄—— 空間被什麼佔用了?
- 分析文件類型— 是日誌?臨時文件?還是資料檔?
- 判斷是否可以清理── 哪些能刪,哪些不能動?
故障定位的步驟
步驟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
主動監測,避免事後處理
- 設定磁碟使用率告警
使用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 -
- 日誌輪轉配置
確保 logrotate 正常運作:cat /etc/logrotate.conf logrotate -d /etc/logrotate.conf
- 預留緩衝空間
分區規劃時預留10-15% 的冗餘對關鍵目錄設定獨立分區(/var、/home、/tmp)使用LVM 方便後期擴容
- 定期巡檢清單
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 這幾個核心指令,配合定期監控和合理的空間規劃,就能將故障消滅在萌芽狀態。
記住:預防勝於治療,監控優於搶修。
发表回复