系統無法寫入、服務啟動失敗、資料庫報錯,多半是磁碟 100% 滿了。本文提供 三步急診流程:df -hl 確認分區滿載 → du 定位大目錄 → lsof 找被刪除仍佔用空間的檔案,並給出釋放空間的標準動作清單。

df -hl
# 輸出範例
Filesystem Size Used Avail Use% Mounted on
/dev/hda2 45G 19G 24G 44% /
/dev/hda3 9.7G 7.2G 2.1G 78% /usr/local
/dev/hdb2 75G 75G 0 100% / ← 罪魁禍首:根分區 100%
/dev/hdb2 掛載在 /,影響全系統| 指令 | 用途 |
|---|---|
du -sh /目錄 | 顯示目錄總大小 (人類可讀) |
du -h --max-depth=1 /目錄 | 顯示第一層子目錄大小 |
du -h --max-depth=0 /目錄 | 等同 du -sh |
du -sh /opt/oracle | 指定路徑統計 (範例輸出 5.6G) |
du -h --max-depth=1 / | sort -hr | head -10
lsof | grep deleted
# 輸出範例
java 1234 user 4u REG 253,0 10G 12 /var/log/app.log (deleted)
df 顯示空間已用,但 du 統計不到 (目錄項已刪除)kill -9 1234 重啟服務,或 truncate -s 0 /proc/1234/fd/4 釋放空間 (不重啟)df -h # 每個掛載點分區大小
df -H # 以 1000 為基數 (廠商標示法)
du -sm 目錄 # 以 MB 為單位顯示總和
fdisk -l # 查看分區表結構
hdparm -i /dev/hda # IDE 磁碟資訊
hdparm -I /dev/sda # SATA/SCSI 磁碟詳細資訊
blktool /dev/sda id # 另一種查看 SCSI 裝置 ID
sync; fuser -km /media/usbdisk # 強制釋放 USB 掛載點
apt clean / yum clean alljournalctl --vacuum-size=200Mapt autoremove --purge 'linux-image-*' (保留當前+1)find /tmp -type f -mtime +7 -deletegzip /var/log/*.log.1 或 mv /var/log/big.log /data/logs/docker system prune -a --volumestruncate -s 0 /proc/PID/fd/FD核心原則:先 df 定分區,再 du 找大戶,最後 lsof 抓幽靈。動手前先備份關鍵資料,清理後驗證服務正常。