一、存储优化的必要性
Debian作为稳定可靠的Linux发行版,长期运行后会产生大量临时文件、日志文件和软件包缓存。存储空间不足可能导致:
- 系统运行缓慢甚至崩溃
- 无法安装新软件包
- 日志文件丢失关键信息
- 服务无法正常写入数据
本文详细介绍Debian系统存储空间优化的完整方案,从基础清理到自动化维护,帮助您保持系统健康运行。
二、分析当前存储使用情况
2.1 查看磁盘使用概况
# 查看文件系统使用情况
df -h
# 查看inode使用情况
df -i
# 查看当前目录大小
du -sh /*
2.2 定位大文件和目录
# 查看根目录下各目录大小
sudo du -h --max-depth=1 / 2>/dev/null | sort -hr | head -20
# 查找大于100MB的文件
sudo find / -type f -size +100M 2>/dev/null | head -20
# 查找大于1GB的文件
sudo find / -type f -size +1G 2>/dev/null
2.3 使用ncdu工具可视化分析
# 安装ncdu
sudo apt install ncdu
# 分析根目录
sudo ncdu /
# 分析特定目录
sudo ncdu /var
三、清理APT软件包缓存
3.1 清理已下载的软件包
# 查看缓存大小
du -sh /var/cache/apt/archives/
# 清理已下载的deb包
sudo apt clean
# 清理过期的deb包
sudo apt autoclean
# 查看清理后效果
du -sh /var/cache/apt/archives/
3.2 移除不需要的软件包
# 查看可移除的依赖包
sudo apt autoremove --dry-run
# 执行移除
sudo apt autoremove -y
# 清理配置文件
sudo apt autoremove --purge -y
3.3 清理旧内核
# 查看已安装的内核
dpkg --list | grep linux-image
# 查看当前运行的内核
uname -r
# 移除旧内核(保留当前和最新两个版本)
sudo apt autoremove --purge linux-image-* -y
# 或手动指定版本移除
sudo apt purge linux-image-5.10.0-10-amd64
四、日志文件管理
4.1 查看日志文件大小
# 查看日志目录大小
sudo du -sh /var/log/
# 列出最大的日志文件
sudo du -ah /var/log/ | sort -hr | head -20
4.2 清理旧日志文件
# 清理旧的压缩日志
sudo rm -f /var/log/*.gz
sudo rm -f /var/log/*.1
sudo rm -f /var/log/*.old
# 截断大日志文件(保留最后1000行)
sudo truncate -s 0 /var/log/syslog
sudo truncate -s 0 /var/log/kern.log
# 或使用更安全的方式
sudo journalctl --vacuum-time=7d
sudo journalctl --vacuum-size=100M
4.3 配置日志轮转
编辑日志轮转配置:
sudo nano /etc/logrotate.conf
示例配置:
# 每周轮转
weekly
# 保留4周
rotate 4
# 压缩旧日志
compress
# 创建新日志文件
create
# 包含特定配置
include /etc/logrotate.d
检查配置:
# 测试配置
sudo logrotate -d /etc/logrotate.conf
# 强制执行轮转
sudo logrotate -f /etc/logrotate.conf
五、清理临时文件
5.1 系统临时文件
# 查看/tmp目录大小
sudo du -sh /tmp/
# 清理/tmp中超过10天的文件
sudo find /tmp -type f -mtime +10 -delete
# 清理/var/tmp中超过30天的文件
sudo find /var/tmp -type f -mtime +30 -delete
5.2 用户缓存目录
# 查看用户缓存大小
du -sh ~/.cache/
# 清理特定应用缓存
rm -rf ~/.cache/mozilla/firefox/*/cache2/*
rm -rf ~/.cache/thumbnails/*
# 清理pip缓存
rm -rf ~/.cache/pip/
5.3 清理systemd临时文件
# 查看临时文件配置
systemd-tmpfiles --cat-config
# 清理过期临时文件
sudo systemd-tmpfiles --clean
六、Docker存储清理
6.1 Docker磁盘使用分析
# 查看Docker磁盘使用情况
sudo docker system df
# 查看详细信息
sudo docker system df -v
6.2 清理Docker资源
# 删除停止的容器
sudo docker container prune -f
# 删除未使用的镜像
sudo docker image prune -a -f
# 删除未使用的卷
sudo docker volume prune -f
# 删除未使用的网络
sudo docker network prune -f
# 一键清理所有未使用资源
sudo docker system prune -a --volumes -f
七、软件特定清理
7.1 Python包管理
# 清理pip缓存
pip cache purge
# 查看缓存位置
pip cache dir
7.2 Node.js清理
# 清理npm缓存
npm cache clean --force
# 清理yarn缓存
yarn cache clean
# 查看缓存位置
npm config get cache
yarn cache dir
7.3 浏览器缓存
# Firefox缓存位置
~/.cache/mozilla/firefox/
# Chrome缓存位置
~/.cache/google-chrome/
八、高级优化技巧
8.1 压缩不常用文件
# 压缩旧日志
sudo find /var/log -type f -name "*.log" -mtime +30 -exec gzip {} \;
# 压缩备份文件
sudo find /backup -type f -name "*.sql" -mtime +7 -exec gzip {} \;
8.2 查找并处理重复文件
# 安装fdupes工具
sudo apt install fdupes
# 查找重复文件
sudo fdupes -r /home/
# 删除重复文件(需确认)
sudo fdupes -rd /home/
8.3 使用ZFS压缩
# 安装ZFS
sudo apt install zfsutils-linux
# 创建压缩存储池
sudo zpool create tank /dev/sdb
sudo zfs set compression=lz4 tank
九、自动化清理脚本
9.1 综合清理脚本
创建自动化清理脚本:
#!/bin/bash
# /usr/local/bin/storage-cleanup.sh
LOG_FILE="/var/log/storage-cleanup.log"
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a $LOG_FILE
}
log "开始存储空间清理..."
# 清理APT缓存
log "清理APT缓存..."
apt clean >> $LOG_FILE 2>&1
apt autoclean >> $LOG_FILE 2>&1
apt autoremove -y >> $LOG_FILE 2>&1
# 清理旧日志
log "清理旧日志文件..."
find /var/log -type f -name "*.gz" -delete
find /var/log -type f -name "*.1" -delete
journalctl --vacuum-time=7d >> $LOG_FILE 2>&1
# 清理临时文件
log "清理临时文件..."
find /tmp -type f -mtime +10 -delete
find /var/tmp -type f -mtime +30 -delete
# Docker清理
log "清理Docker资源..."
docker system prune -f >> $LOG_FILE 2>&1
# 报告清理结果
log "清理完成。"
df -h / | tee -a $LOG_FILE
设置权限:
sudo chmod +x /usr/local/bin/storage-cleanup.sh
9.2 配置定时任务
sudo crontab -e
添加定时任务:
# 每周日凌晨3点执行清理
0 3 * * 0 /usr/local/bin/storage-cleanup.sh >> /var/log/storage-cleanup.log 2>&1
# 每天凌晨4点清理临时文件
0 4 * * * find /tmp -type f -mtime +10 -delete 2>/dev/null
9.3 systemd定时器配置
创建服务文件:
sudo nano /etc/systemd/system/storage-cleanup.service
内容:
[Unit]
Description=Storage Cleanup Service
[Service]
Type=oneshot
ExecStart=/usr/local/bin/storage-cleanup.sh
[Install]
WantedBy=multi-user.target
创建定时器:
sudo nano /etc/systemd/system/storage-cleanup.timer
内容:
[Unit]
Description=Weekly Storage Cleanup Timer
[Timer]
OnCalendar=weekly
Persistent=true
[Install]
WantedBy=timers.target
启用定时器:
sudo systemctl enable storage-cleanup.timer
sudo systemctl start storage-cleanup.timer
sudo systemctl list-timers
十、存储空间监控
10.1 磁盘空间告警脚本
#!/bin/bash
# /usr/local/bin/disk-alert.sh
THRESHOLD=80
EMAIL="admin@example.com"
USAGE=$(df -h / | awk 'NR==2 {print $5}' | sed 's/%//')
if [ $USAGE -gt $THRESHOLD ]; then
SUBJECT="磁盘空间告警: $(hostname)"
MESSAGE "根分区使用率: ${USAGE}%,超过阈值${THRESHOLD}%"
echo "$MESSAGE" | mail -s "$SUBJECT" $EMAIL
echo "$MESSAGE"
fi
添加到cron:
sudo crontab -e
# 添加
*/30 * * * * /usr/local/bin/disk-alert.sh
10.2 Prometheus监控配置
# prometheus.yml
scrape_configs:
- job_name: 'node'
static_configs:
- targets: ['localhost:9100']
# 告警规则
groups:
- name: disk
rules:
- alert: DiskUsageHigh
expr: (1 - (node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"})) * 100 > 80
for: 5m
labels:
severity: warning
annotations:
summary: "磁盘使用率超过80%"
十一、最佳实践总结
11.1 定期清理清单
| 任务 | 频率 | 命令 |
|---|---|---|
| APT缓存清理 | 每周 | apt clean |
| 旧内核移除 | 每月 | apt autoremove |
| 日志轮转 | 每周 | logrotate |
| 临时文件清理 | 每天 | find -delete |
| Docker清理 | 每周 | docker prune |
11.2 存储优化检查清单
- [ ] 定期检查磁盘使用率
- [ ] 配置日志轮转策略
- [ ] 设置磁盘空间告警
- [ ] 定期清理软件包缓存
- [ ] 管理Docker存储空间
- [ ] 清理用户缓存目录
- [ ] 移除不需要的旧内核
- [ ] 部署自动化清理脚本
11.3 不同规模建议
| 服务器规模 | 存储容量 | 建议保留空间 | 清理频率 |
|---|---|---|---|
| 小型 | 20GB | 5GB | 每周 |
| 中型 | 100GB | 20GB | 每两周 |
| 大型 | 500GB+ | 50GB | 每月 |
十二、总结
Debian系统存储空间优化需要建立定期维护机制:
- 定期分析:使用du、ncdu等工具监控使用情况
- 系统清理:清理APT缓存、旧内核、临时文件
- 日志管理:配置日志轮转,定期清理旧日志
- 自动化维护:部署定时任务和清理脚本
- 监控告警:设置磁盘空间告警及时发现问题
通过以上措施,可以保持Debian系统存储空间充足,确保系统稳定运行。
注:本文基于Debian 12编写。生产环境请在执行清理前备份重要数据。