Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Linux 磁碟空間不足?10 招清理大法 + 避坑指南

編輯:Linux 教學

分區規劃不當、日誌暴增、臨時檔堆積……磁碟滿載會導致服務掛掉、無法寫入、甚至系統無法啟動。本文提供 10 招實戰清理技巧,並說明操作風險與優先順序,助你從容化解空間危機。

先診斷,再動刀:找出佔空間的「真兇」

1. 掃描重要檔案系統並比對變化

# 建立基準線
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

分析哪些檔案頻繁讀寫、快速增長,對不常用的大檔案考慮壓縮或歸檔。

2. 檢查 inode 耗用量

df -i /home

若 inode 還有大量剩餘 → 大檔案佔空間;若 inode 耗盡 → 大量小檔案(如快取、session、郵件佇列)佔空間,處理策略截然不同。

3. 找出佔空間最大的目錄

# 顯示 /home 總大小
du -sh /home
# 列出超過 1GB 的子目錄(單位為 KB,故 1GB ≈ 1048576)
du /home | awk '$1 > 1048576'

4. 找出大檔案

find /home -type f -size +200M -exec ls -lh {} \;

5. 找出近期新增/修改的檔案

# 建立時間戳記檔(例:8月19日 08:00)
touch -t 08190800 /tmp/time_mark
# 找出比這個時間新的檔案
find /home -newer /tmp/time_mark -ls

實戰清理 5 招(按風險從低到高排序)

  1. 清理系統日誌與暫存檔(低風險)
    # 清理 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
  2. 清理使用者快取與垃圾桶(低風險)
    rm -rf ~/.cache/*
    rm -rf ~/.local/share/Trash/*
  3. 移除舊核心套件(中風險,確保保留當前運行核心)
    # 列出已安裝核心
    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
  4. 壓縮/歸檔大型靜態檔案(中風險)
    # 找出超過 100MB 且 90 天未存取的檔案壓縮
    find /data -type f -size +100M -atime +90 -exec gzip {} \;
  5. 刪除不再需要的資料/備份(高風險,務必二次確認)
    # 互動式確認刪除
    find /backup -type f -mtime +180 -ok rm {} \;

進階招式:掛載點轉移與檔案系統修復

6. 利用符號連結將大目錄遷移到有空間的分區

# 假設 /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

7. 找出佔用大量磁碟 I/O 的進程

# 使用 iotop(需安裝)或 pidstat
iotop -o
pidstat -d 1

8. 檢查並修復檔案系統(需卸載或單用戶模式)

fsck -y /dev/sdX

9. 重啟系統釋放被刪除但仍被進程持開的檔案空間

若 df 顯示滿但 du 顯示正常,通常是檔案已刪除但進程仍持有開啟。重啟或重啟該服務即可釋放。

10. 終極大招:遞迴找出最大目錄並逐層深入

du -h --max-depth=1 / | sort -hr | head -20
# 進入最大目錄繼續
cd /var
du -h --max-depth=1 | sort -hr | head -20

避坑提醒

  • 切勿刪除 /tmp、/var/tmp 下正在被使用的檔案,會導致服務異常。
  • 不要直接 rm -rf /var/log/*,會清空正在寫入的日誌檔,導致服務崩潰;請用 truncate -s 0 /var/log/syslog 清空內容保留檔案。
  • 核心套件移除前務必確認當前運行核心版本(uname -r)。
  • 生產環境操作前先快照/備份,尤其是 LVM 快照或虛擬機快照。

若以上招式皆無效,剩下的就是「硬辦法」:加裝硬碟、調整分區(LVM 擴容)、重新規劃分區重裝系統。記住:分區規劃才是根本預防,建議 /、/var、/home、/opt 分開掛載,並啟用 LVM 彈性擴容。

Copyright © Windows教程網 All Rights Reserved