爲什麼要管理磁盤空間?¶
服務器運行久了,磁盤空間可能會不知不覺被佔滿,導致新軟件無法安裝、服務報錯甚至系統崩潰。比如日誌文件越積越多、臨時文件沒人清理、大文件長期不刪,都會讓磁盤告急。合理管理磁盤空間,能讓服務器更穩定,還能避免不必要的停機。
基礎概念:先懂”倉庫”和”身份證”¶
要管理磁盤,得先理解兩個核心概念:inode 和 塊(block)。
-
inode(身份證):每個文件/目錄都有一個inode,像身份證一樣記錄文件的元數據(大小、修改時間、權限等),但不存文件內容。磁盤空間不足時,可能是inode先被用完(即使磁盤空間還有剩餘)。
-
塊(block):存儲數據的最小單位,比如4KB/塊。文件內容被拆分成多個塊存儲在磁盤上,inode會記錄這些塊的位置。
如何快速查看磁盤空間?¶
1. 查看整體磁盤使用情況(df命令)¶
df -h
- 參數-h:以人類可讀的單位(GB/MB)顯示,避免數字太複雜。
- 輸出解釋:
Filesystem:磁盤設備名(如/dev/sda1)Size:磁盤總容量Used:已用空間Avail:可用空間Use%:使用率(超過85%就該警惕了)Mounted on:掛載點(如/、/home)
2. 查看目錄/文件大小(du命令)¶
du -sh /path/to/dir # 查看單個目錄總大小(-s=彙總,-h=人類可讀)
du -ah /var | sort -hr | head -10 # 查看/var目錄下最大的10個文件/目錄
du -sh /var/log:快速看日誌目錄大小,日誌常是”空間殺手”。
3. 排查inode使用情況(df -i)¶
df -i
- 如果
IUse%接近100%,即使磁盤空間還有,也無法創建新文件(inode用完了)。
常見問題:磁盤空間突然滿了怎麼辦?¶
1. 日誌文件過大(最常見)¶
- 原因:服務日誌(如Nginx、MySQL)不清理,導致單個日誌文件幾十GB。
- 解決:
- 用
logrotate自動管理日誌(系統自帶,會按大小/時間分割日誌)。 - 手動清理:先備份關鍵日誌(如
cp /var/log/messages messages.bak),再用> /var/log/messages清空(日誌會自動重新創建)。
2. 臨時文件堆積(/tmp、/var/tmp)¶
- 原因:程序產生的臨時文件未及時清理(如緩存、下載殘留)。
- 解決:
- 用
tmpwatch定時清理臨時文件:tmpwatch 72 /tmp(72小時內未修改的文件刪除)。 - 重啓服務器前手動清理:
rm -rf /tmp/*(謹慎,避免刪除正在使用的臨時文件)。
3. 大文件未清理(如備份、舊數據)¶
- 原因:備份包、舊版本代碼、大日誌等未及時歸檔。
- 解決:
- 用
find查找大文件:find / -type f -size +100M -print0 | xargs -0 du -h(找100MB以上的文件)。 - 確認後刪除:
find / -name "*.old" -delete(刪除所有.old後綴的文件)。
4. 分區設計不合理¶
- 原因:所有數據都放在根分區(/),導致單個分區滿後影響全局。
- 解決:
- 調整分區:若用
LVM(邏輯卷管理),可動態擴容(如lvextend -L +10G /dev/mapper/root)。 - 分離分區:/var(日誌)、/home(用戶數據)單獨分區,避免互相影響。
長期優化:如何讓磁盤空間”健康”運行?¶
1. 定期清理+備份¶
- 每週用
cron任務自動清理臨時文件(0 3 * * 0 /usr/sbin/tmpwatch 7 /tmp)。 - 定期刪除歷史備份包(如
find /backup -name "*.tar.gz" -mtime +30 -delete)。
2. 用外部存儲分擔壓力¶
- 掛載NAS/SAN:將用戶數據(/home)或日誌(/var/log)掛載到單獨存儲設備。
- 示例:
mount /dev/sdb1 /mnt/external_data,之後修改/etc/fstab永久掛載。
3. 設置告警+監控¶
- 用
nagios/zabbix監控磁盤使用率,超過80%發郵件告警。 - 或簡單用
df -h | grep -vE 'tmpfs|udev' | awk '{print $5}' | sort -nr | head -1檢查最高使用率分區。
4. 避免”踩坑”的注意事項¶
- 刪除前確認:用
ls/file確認文件用途,誤刪系統配置文件會導致服務崩潰。 - 日誌別亂刪:若日誌文件被服務佔用(如
tail -f正在看),直接rm會導致服務寫日誌失敗,需先重啓服務再清理。 - 小目錄優先刪:若inode滿,優先刪除/tmp、/var/spool等小文件目錄,而非大文件。
總結¶
磁盤空間管理是Linux服務器運維的基礎,核心是定期檢查+主動清理+長期規劃。記住:別等磁盤滿了才處理,提前發現問題(如告警)、用工具自動化清理(logrotate、tmpwatch)、分離分區/用外部存儲,就能讓服務器存儲一直”夠用”。