VPS 磁碟空間滿了,網站可能無法上傳圖片、資料庫無法寫入、Docker 不能啟動,甚至 SSH 登入後很多指令都怪怪的。這時候最怕的不是磁碟滿,而是你不知道哪些檔案可以刪、哪些不能動。
這篇教你用 df、du、journalctl 和基本清理觀念找出問題。重點是先定位,再清理,不要一開始就亂刪系統目錄。
你會先搞懂這幾件事
df -h看哪個分割區滿了。du -h --max-depth=1找哪個目錄最大。- 常見爆量來源是 log、cache、備份檔、Docker image / volume。
- 不要亂刪
/usr、/lib、/bin、/etc。 - 清理前先確認檔案用途與備份狀態。
先看哪裡滿了:df -h
df -h
你會看到類似:
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 50G 47G 1.2G 98% /
重點看:
Mounted on:哪個掛載點滿了。Use%:使用率。Avail:剩餘空間。
如果 / 滿了,整台主機都可能受影響。先不要重開服務,先找出大檔來源。
找大目錄:du
從根目錄開始看:
sudo du -h --max-depth=1 / 2>/dev/null | sort -h
如果看到 /var 很大,再往下查:
sudo du -h --max-depth=1 /var 2>/dev/null | sort -h
sudo du -h --max-depth=1 /var/log 2>/dev/null | sort -h
常見大目錄:
| 目錄 | 常見內容 |
|---|---|
/var/log | 系統與服務日誌 |
/var/lib/docker | Docker image、container、volume |
/var/www | 網站檔案與上傳內容 |
/home | 使用者檔案與備份 |
/tmp | 暫存檔 |
清理 apt 快取
Ubuntu / Debian 可以先清理套件快取:
sudo apt clean
sudo apt autoremove
apt clean 通常安全性較高;autoremove 會移除不再需要的套件,但正式主機仍要看清楚它打算移除什麼。
清理 systemd journal
查看 journal 佔用:
journalctl --disk-usage
限制保留大小:
sudo journalctl --vacuum-size=500M
或限制保留時間:
sudo journalctl --vacuum-time=14d
不要直接刪 /var/log/journal。用 journalctl 提供的方式比較安全。
日誌檔太大怎麼辦
先找大檔:
sudo find /var/log -type f -size +100M -exec ls -lh {} \;
如果某個 log 持續爆量,要先找原因,不要只清空:
- 網站是否被大量掃描。
- 程式是否一直噴錯。
- Nginx / PHP-FPM 是否設定錯。
- 磁碟滿是否導致服務反覆失敗。
可以看:
sudo tail -100 /var/log/nginx/error.log
sudo journalctl -p err -n 100
備份檔爆量
很多 VPS 磁碟滿,是因為備份檔一直留在同一台主機:
find /home -type f \\( -name "*.zip" -o -name "*.tar.gz" -o -name "*.sql" \\) -exec ls -lh {} \;
備份不是不能放本機,而是不能只放本機,也不能無限累積。建議:
- 設定保留天數。
- 重要備份放到不同主機或不同儲存空間。
- 定期測試還原。
- 刪除前確認不是唯一備份。
Docker 空間怎麼看
如果你有使用 Docker:
docker system df
清理前要小心,不要刪掉仍需要的 volume。新手不要直接亂跑所有 prune 指令,至少先確認目前 container:
docker ps -a
docker volume ls
如果不確定 volume 裡是不是資料庫或上傳檔,不要刪。
不要亂刪這些地方
不要為了清空間隨便刪:
/etc/usr/bin/sbin/lib/var/lib/mysql- Docker volume
- 不確定用途的網站 uploads 或資料庫備份
刪錯可能比磁碟滿更難救。
下一步
如果你的正式網站已經因為磁碟滿導致資料庫、Email 或網站異常,可以先保留 df -h、du 與錯誤日誌,再到 聯絡我們 取得協助。