View Categories

Debian 清理指南:日志、缓存、旧内核与 Docker 资源

阅读时间: 3 分钟

长期运行的 Debian 系统中,系统日志、包管理器缓存、内核遗留文件和容器数据会逐渐积累,占据大量磁盘空间。Debian 清理指南汇总了关键的空间清理策略,附带自动化脚本,适用于日常维护与周期性执行。

1. 清理系统日志 #

查看日志占用空间: #

Bash
journalctl --disk-usage

清理旧日志: #

保留最近 7 天的日志:

Bash
sudo journalctl --vacuum-time=7d

限制总占用为 100MB:

Bash
sudo journalctl --vacuum-size=100M

配置日志占用限制(可选): #

编辑 /etc/systemd/journald.conf

Plaintext
[Journal]
SystemMaxUse=100M
SystemKeepFree=500M
MaxFileSec=1month

应用配置:

Bash
sudo systemctl restart systemd-journald

⚠️ 注意:不要直接删除 /var/log/journal/ 目录,可通过压缩方式备份旧日志:

Bash
sudo tar --warning=no-file-changed -czf ~/journal-backup-$(date +%F-%H:%M:%S).tar.gz /var/log/journal

2. 清理 APT 包管理器缓存 #

Bash
sudo apt-get clean
sudo apt-get autoclean
sudo apt-get autoremove -y

适用于清理缓存安装包、过期软件与不再使用的依赖项。

3. 清理旧内核与源码 #

删除旧内核(保留当前版本): #

Bash
uname -r  # 查看当前内核
dpkg --list | grep linux-image

确认无用版本后:

Bash
sudo apt-get remove linux-image-<旧版>

清理旧的内核源码(/usr/src): #

Bash
CURRENT_KERNEL=$(uname -r)
for dir in /usr/src/*; do
    if [[ "$dir" != "/usr/src/linux-$CURRENT_KERNEL" ]]; then
        sudo rm -rf "$dir"
    fi
done

⚠️ 注意:请勿删除当前内核或 /usr/lib/usr/bin 等核心路径。

4. Docker 清理 #

查看空间使用: #

Bash
docker system df

清理无用资源: #

Bash
docker system prune -a --volumes
docker builder prune -a

⚠️ 注意docker system prune -a --volumes 会删除所有未使用资源,确认无重要数据。

日志限制(可选): #

编辑 /etc/docker/daemon.json

Bash
{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}

重启服务:

Bash
sudo systemctl restart docker

5. 清理临时与缓存目录 #

Bash
sudo rm -rf /tmp/*
sudo rm -rf /var/tmp/*
sudo rm -rf /root/.cache/*
sudo rm -rf /root/.npm/_cacache
sudo rm -rf /root/.cargo/registry

建议定期执行,防止构建工具和脚本生成的缓存持续积累。

6. 查找大文件(仅展示) #

Bash
sudo find / -type f -size +100M -exec ls -lh {} \; 2>/dev/null | sort -k 5 -rh | head -n 10

适合辅助检查空间占用异常位置,避免误删。

7. 自动清理脚本 #

建议使用以下脚本完成一键清理操作。保存为 debian-clean-all.sh

Bash
#!/bin/bash
# 全面清理 Debian 系统空间占用

set -e

BACKUP_DIR="/backup"
TIMESTAMP=$(date +%F-%H:%M:%S)
LOG_BACKUP="$BACKUP_DIR/journal-backup-$TIMESTAMP.tar.gz"

sudo mkdir -p "$BACKUP_DIR"
if ! sudo tar --warning=no-file-changed -czf "$LOG_BACKUP" /var/log/journal; then
  echo "日志备份失败,终止。"
  exit 1
fi

read -p "是否继续执行清理操作?(y/n): " confirm
if [[ "$confirm" != "y" ]]; then
    echo "操作已取消。"
    exit 0
fi

sudo journalctl --vacuum-time=7d
sudo apt-get clean
sudo apt-get autoclean
sudo apt-get autoremove -y

CURRENT_KERNEL=$(uname -r)
for dir in /usr/src/*; do
    if [[ "$dir" != "/usr/src/linux-$CURRENT_KERNEL" ]]; then
        sudo rm -rf "$dir"
    fi
done

sudo docker system prune -a --volumes -f
sudo docker builder prune -a -f

sudo rm -rf /tmp/*
sudo rm -rf /var/tmp/*
sudo rm -rf /root/.cache/*
sudo rm -rf /root/.npm/_cacache
sudo rm -rf /root/.cargo/registry

echo
echo "清理完成。磁盘使用情况如下:"
df -h /
journalctl --disk-usage
docker system df

使用方式: #

Bash
sudo chmod +x debian-clean-all.sh
sudo ./debian-clean-all.sh

设置定期执行(可选): #

使用 crontab -e 添加:

Bash
0 4 1 * * /path/to/debian-clean-all.sh

表示每月 1 日凌晨 4 点自动运行。

8. 注意事项 #

  • 清理前请备份系统关键日志与数据;
  • 不要删除当前内核或核心路径下文件;
  • docker system prune -a --volumes 会删除所有未使用镜像与卷,请慎用;
  • 脚本默认使用 sudo,请以具备权限的用户运行;
  • 清理后可通过 df -hjournalctl --disk-usage 等命令验证效果。

Debian 清理指南适用于稳定运行的 Debian 服务器或开发环境,旨在通过周期性维护确保磁盘空间健康。如需更复杂的自动化机制,可集成 systemd timer 或 DevOps 工具链执行。

Docker: Prune unused Docker objects, Linux manual page: journalctl(1)
更新 2025-07-23