很多人用 VPS 掛網站、開 Minecraft 私服、跑 Discord Bot、跑 Docker 程式,本來一切正常,某一天突然間 SSH 連線變超慢、網站跳出 502 Bad Gateway、MySQL 無故停止,重開機沒多久又掛,用盡各種方法排查最後才發現——硬碟 100% 滿了。
硬碟爆滿是 VPS 最常見也最容易被忽略的問題之一,和記憶體不足、CPU 滿載不同,硬碟滿了不會在負載監控上立刻顯示異常,卻會導致幾乎所有服務都無法正常運作。這篇教學從台港用戶最常遇到的真實場景出發,教你用最快的方式找到問題、釋放空間、並設定好預防機制,從此不用怕硬碟無預警爆滿。
df -h 確認哪個分割區滿了 → du -sh /* 找到大目錄 → 清理日誌或 Docker 殘留 這三步在 10 分鐘內解決。先確認:硬碟滿了的 8 種常見症狀
很多時候症狀不會直接告訴你「硬碟滿了」,而是表現成各種奇怪的服務異常,容易讓人誤判是記憶體不夠、程式壞掉、或是網路問題。如果你遇到以下症狀,先打 SSH 打 df -h 看一眼,八成就是硬碟滿了:

最經典的誤判場景:網站跳出 502,你以為是 Nginx 或 PHP 壞了,重開服務後好五分鐘又掛,最後才發現是硬碟滿了 PHP 根本寫不進 socket 檔,怎麼重開都沒用。
7 步排查流程總覽
我們按照「從快到慢、從常見到少見」的順序整理了完整排查流程,照著順序做,九成以上的問題都能在 10 分鐘內找到原因:

第一步:用 df -h 確認哪個分割區真的滿了
首先不要亂刪東西,先確認是不是真的硬碟滿了、以及滿的是哪個分割區。SSH 連進 VPS 之後輸入:
df -h
正常的輸出會長這樣,我們直接看範例:

- 絕大多數 VPS 只有一顆虛擬硬碟,掛載在根目錄
/,就是/dev/vda1那一行 - 如果
Use%顯示 100% 或是 95% 以上,就是硬碟滿了 - 如果是額外掛載的數據碟滿了(例如掛在 /home 或 /data),後續就從那個目錄往下找
- tmpfs 是記憶體虛擬碟,滿了不會影響硬碟,不用管它
第二步:用 du 指令逐層找到佔空間的大兇手
確認是根目錄滿了之後,接下來從根目錄開始,逐層往下找哪個目錄佔了最大空間。輸入:
du -sh /* 2>/dev/null | sort -hr
這個指令會把根目錄下一層所有資料夾的大小算出來,從大到小排序。通常你會看到 /var 或 /home 是最大的,例如上面範例 /var 就佔了 28G。
接著繼續往大目錄裡面鑽,例如 /var 最大就接著打:
du -sh /var/* 2>/dev/null | sort -hr
就這樣一層一層往下找,很快就能找到真正佔空間的大檔案或大資料夾。
rm -rf!先確認那個檔案是不是正在被程式使用中,例如正在寫入的資料庫檔案、正在運行的容器數據,亂刪會導致資料遺失或服務壞掉。根據我們的統計,台港用戶 VPS 硬碟空間的佔用分布大致如下,你可以按照這個優先順序排查:

第三步:最常見!清理 /var/log 爆炸的系統日誌
第一名佔空間的兇手就是系統日誌,尤其是長期運行沒有重開過的 VPS,journalctl 系統日誌、Nginx 存取日誌、MySQL 錯誤日誌累積下來動輒十幾 G 非常常見。
3.1 清理 systemd journal 日誌(最常見)
絕大多數 Linux 發行版(Ubuntu 18.04+、Debian 10+、CentOS 7+)都用 systemd,預設沒有開啟日誌輪替,跑久了 journal 日誌可以佔掉 10G 以上空間,一鍵清理指令:
# 只保留最近 200MB 的日誌
journalctl --vacuum-size=200M
# 或是只保留最近7天的日誌
journalctl --vacuum-time=7d
打完之後直接就會釋放空間,而且不會影響系統運作。
3.2 清理 Nginx / Apache 網站日誌
如果你的網站流量不小,Nginx 的 access.log 存取日誌一個月長到好幾 G 很正常,不要直接刪檔案(正在寫入的話刪了空間不會釋放),正確做法是截斷:
# 清空所有 Nginx 日誌(不會刪檔案,只清空內容)
truncate -s 0 /var/log/nginx/*.log
# Apache 的話是
truncate -s 0 /var/log/apache2/*.log
3.3 順便清理 apt 快取與舊核心
如果你用 Debian/Ubuntu,跑了很多次 apt install/update 之後,快取和舊版核心也會佔不少空間:
apt clean
apt autoremove --purge -y
第四步:清理 Docker 殘留的鏡像、容器與日誌
第二名是 Docker,很多人用 Docker 跑網站、跑 Discord Bot、跑 Minecraft,測試了一堆鏡像和容器之後沒刪乾淨,加上每個容器的日誌預設無上限,很容易就佔掉十幾二十 G。
4.1 一鍵清理 Docker 所有沒在使用的資源
如果你確定不需要保留離線的容器、沒用到的鏡像和無用的 volume:
docker system prune -a --volumes
--volumes 避免資料被刪。4.2 限制 Docker 容器日誌大小(治本)
如果不做設定,每個 Docker 容器的日誌預設可以無限長大,跑幾個月就好幾 G。編輯或建立 /etc/docker/daemon.json,加入:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
存檔之後重啟 Docker 服務就會生效:
systemctl restart docker
這樣每個容器最多只會保留 3 個日誌檔、每個最多 10MB,總共 30MB,從此不會再被 Docker 日誌塞爆硬碟。
第五步:清理網站、遊戲備份與各種快取檔
第三名是各種手動備份忘記刪,這也是台港用戶非常常見的狀況:
- 用外掛自動備份 WordPress 網站,備份檔存在同一台 VPS 的 web 目錄裡,累積了十幾份
- 手動打包 Minecraft 世界存檔備份,打完就忘記刪
- Nextcloud 開了版本控制,舊版本檔案保留了好幾個月
- PT 種子下載完的檔案忘記搬走,長期佔在硬碟裡
- PHP、Redis、各種程式的 session 暫存檔無限累積
實用指令:找所有超過 500MB 的大檔案
find / -type f -size +500M -exec ls -lh {} \; 2>/dev/null | awk '{ print $5 ": " $9 }'
這個指令會把全機所有超過 500MB 的檔案列出來,你可以一眼看到哪些大檔案是忘記刪的備份、安裝包、舊影片、舊地圖檔。
自動刪除超過 30 天的舊備份(建議排程)
如果你有固定把備份放在 /backup 目錄的習慣,可以手動先清一次:
find /backup -name "*.tar.gz" -mtime +30 -delete
後面我們會教你怎麼設定排程自動做,不用每次手動打。
第六步:刪除遺忘的大檔案與隱藏的資源回收桶
有幾個很容易被忽略的隱藏空間殺手,怎麼找都找不到的時候可以檢查:
- 已被刪除但還被程式佔用的檔案:你刪了一個正在被程式寫入的大日誌檔,檔案從資料夾裡消失了,但作業系統因為程式還開著它,不會釋放空間。用下面指令找:
lsof | grep deleted | grep -v tmpfs找到之後重開對應的服務(例如 Nginx、MySQL),空間就會釋放出來。
- 資源回收桶:如果你有用桌面環境、或用 sFTP 刪檔案,有時候檔案會被丟進
~/.local/share/Trash/資源回收桶,沒真的刪掉。 - Linux 預留保留空間:ext4 檔案系統預設會預留 5% 的硬碟空間給 root 使用者,硬碟大的話這 5% 可能就是好幾 G,如果是數據碟可以手動調低成 1%:
# 例如把 /dev/vda1 的保留空間調成1% tune2fs -m 1 /dev/vda1 - 使用者家目錄的隱藏檔:很多人會把東西下載到 /root 或自己的家目錄,久了就忘記,記得
du -sh /root/*也檢查一下。
第七步:擴容?或設定自動清理避免復發
如果該清的都清了還是空間不夠,那就是你這台 VPS 的硬碟本來就不敷使用了,LuckVM 後台支援一鍵擴容,不用重開機也不會遺失資料,幾分鐘就可以把硬碟升級到更大的容量。
不過大部分狀況其實不需要擴容,只要做好下面幾個自動清理設定,從此就不會再遇到硬碟無預警爆滿的狀況:

最推薦做的三個治本設定
1. 永久設定 journalctl 日誌上限
編輯 /etc/systemd/journald.conf,找到下面兩行取消註解並修改:
SystemMaxUse=200M
SystemMaxFileSize=50M
存檔後重啟 journald 就永久生效:systemctl restart systemd-journald
2. 設定每週自動清理舊備份與快取
編輯 crontab:crontab -e,加入下面這行,每週一凌晨三點自動刪除超過30天的備份和暫存:
0 3 * * 1 find /backup -name "*.tar.gz" -mtime +30 -delete && journalctl --vacuum-size=200M && docker system prune -f
3. 開啟硬碟用量告警
你可以在 LuckVM 後台開啟磁碟用量通知,當硬碟使用率超過 80% 就會自動發 Email / Telegram 通知你,不用自己手動檢查,就可以在硬碟滿之前提前處理。
下面整理了常見場景的一鍵清理指令對照表,你可以收藏起來備用:

需要更大硬碟或更穩定的 VPS?
LuckVM 香港、日本、韓國、新加坡節點全線 SSD 雲端硬碟,後台一鍵擴容不用重開機,3分鐘完成升級,不怕硬碟突然爆滿。新用戶輸入優惠碼 BLOG2026 享首購 85 折優惠。
立即查看 VPS 方案常見問題 FAQ
VPS硬碟滿了會有什麼症狀?
常見症狀包含 SSH 連線異常變慢、輸入指令有延遲、網站出現 502/503 Bad Gateway、MySQL/MariaDB 無故自動停止、Docker 容器一直重啟、Minecraft 伺服器突然閃退、無法安裝套件或執行系統更新、甚至完全無法 SSH 連進去。重開機後可能會暫時恢復正常,但很快又會掛掉。
用什麼指令快速確認 VPS 是不是硬碟滿了?
SSH 連進去之後直接打 df -h,看根目錄 / 對應的 Use% 欄位,如果顯示 95% 以上或 100% 就是硬碟滿了。這個指令一秒就有結果,遇到服務異常時先打這個指令確認,可以省掉非常多排查時間。
VPS硬碟空間最常見是被什麼東西佔用?
根據台港用戶真實案例統計:第一名是系統與服務日誌(/var/log,含 journalctl、Nginx、MySQL 日誌,約 32%),第二名是 Docker 殘留的舊鏡像、容器與日誌(約 28%),第三名是未清理的手動/自動備份檔(約 20%),真正的網站程式本身通常只佔幾百 MB 而已。
為什麼我明明刪了大檔案,df 還是顯示 100%?
這是非常經典的狀況:你刪除的檔案目前還被某個正在運行的程式開著(例如正在寫入的 Nginx 日誌、MySQL 日誌),Linux 作業系統會等到程式關閉檔案之後才真正釋放空間。解法是用 lsof | grep deleted 找到佔用檔案的程式,重啟該服務就會釋放空間;日誌檔建議用 truncate -s 0 檔名 清空而不是 rm 刪除。
怎麼預防 VPS 硬碟無預警爆滿?
最簡單的三步:1) 設定 journalctl 和 Docker 日誌大小上限,從根源避免日誌無限長大;2) 開啟 LuckVM 後台的硬碟 80% 用量告警,滿了就提前通知你;3) 每月花 10 秒打一次 df -h 看使用率。養成這三個習慣,幾乎永遠不會遇到硬碟突然爆滿掛台的狀況。




