分區規劃不當、日誌暴增、臨時檔堆積……磁碟滿載會導致服務掛掉、無法寫入、甚至系統無法啟動。本文提供 10 招實戰清理技巧,並說明操作風險與優先順序,助你從容化解空間危機。
# 建立基準線 find /home -type f -printf "%p %s\n" > files_old.txt # 隔天再跑一次 find /home -type f -printf "%p %s\n" > files_new.txt # 比對差異 diff files_old.txt files_new.txt
分析哪些檔案頻繁讀寫、快速增長,對不常用的大檔案考慮壓縮或歸檔。
df -i /home
若 inode 還有大量剩餘 → 大檔案佔空間;若 inode 耗盡 → 大量小檔案(如快取、session、郵件佇列)佔空間,處理策略截然不同。
# 顯示 /home 總大小 du -sh /home # 列出超過 1GB 的子目錄(單位為 KB,故 1GB ≈ 1048576) du /home | awk '$1 > 1048576'
find /home -type f -size +200M -exec ls -lh {} \;
# 建立時間戳記檔(例:8月19日 08:00) touch -t 08190800 /tmp/time_mark # 找出比這個時間新的檔案 find /home -newer /tmp/time_mark -ls
# 清理 journalctl(保留最近 2 週) journalctl --vacuum-time=2weeks # 清理 /var/log 下舊日誌(注意保留進行中的) find /var/log -type f -name "*.log" -mtime +30 -delete # 清理 apt/yum 快取 apt-get clean # Debian/Ubuntu yum clean all # RHEL/CentOS dnf clean all # Fedora
rm -rf ~/.cache/* rm -rf ~/.local/share/Trash/*
# 列出已安裝核心 rpm -q kernel # RHEL/CentOS dpkg -l 'linux-image-*' # Debian/Ubuntu # 移除舊版(保留最新 2 個) package-cleanup --oldkernels --count=2 # RHEL/CentOS apt-get autoremove --purge # Debian/Ubuntu
# 找出超過 100MB 且 90 天未存取的檔案壓縮
find /data -type f -size +100M -atime +90 -exec gzip {} \;
# 互動式確認刪除
find /backup -type f -mtime +180 -ok rm {} \;
# 假設 /var/lib/mysql 太大,/mnt/data 有空間 systemctl stop mariadb mv /var/lib/mysql /mnt/data/ ln -s /mnt/data/mysql /var/lib/mysql systemctl start mariadb
# 使用 iotop(需安裝)或 pidstat iotop -o pidstat -d 1
fsck -y /dev/sdX
若 df 顯示滿但 du 顯示正常,通常是檔案已刪除但進程仍持有開啟。重啟或重啟該服務即可釋放。
du -h --max-depth=1 / | sort -hr | head -20 # 進入最大目錄繼續 cd /var du -h --max-depth=1 | sort -hr | head -20
truncate -s 0 /var/log/syslog 清空內容保留檔案。uname -r)。若以上招式皆無效,剩下的就是「硬辦法」:加裝硬碟、調整分區(LVM 擴容)、重新規劃分區重裝系統。記住:分區規劃才是根本預防,建議 /、/var、/home、/opt 分開掛載,並啟用 LVM 彈性擴容。