AWS顶尖云 AWS顶尖云 立即咨询

腾讯云账号购买平台 腾讯云清理磁盘空间技巧

腾讯云国际 / 2026-04-17 14:55:57

腾讯云清理磁盘空间技巧:别再让服务器哭着说“我满了”

你有没有经历过——凌晨三点,监控告警疯狂闪烁,网站打不开,后台登录失败,SSH连上去只看到一行冰冷的提示:No space left on device?不是硬盘坏了,不是被黑了,就是简简单单:磁盘满了。而你的腾讯云CVM,正默默躺在那里,像刚吃完十顿自助餐还拒绝运动的室友,肚皮鼓胀、眼神无辜。

第一步:别瞎删!先搞清谁在“偷吃”空间

很多同学一慌就rm -rf /var/log/*,结果第二天发现Nginx不写日志了、系统审计全断了、连谁半夜改了密码都查不到——这不是清理,是自爆式排雷。正确姿势是:先侦察,再动刀。

打开终端,敲这三行,像给服务器做B超:

df -h                  # 看整体:哪个分区爆了?(重点关注 / 或 /var)
du -sh /var/* | sort -hr | head -10   # 看/var里谁最能吃
ncdu /var              # (需apt install ncdu)图形化钻取,按方向键层层深入,比du直观十倍

常见“空间窃贼”TOP5: 

  • systemd-journal 日志:默认不轮转,半年下来轻松占10G+;
  • Web服务器日志:Nginx/Apache的access.log.error.log,尤其开了debug级别;
  • Docker残留:悬空镜像、停止容器的卷、构建缓存,docker system df一查吓一跳;
  • /tmp 和 /var/tmp:某些程序崩溃后留下的巨型临时文件(比如Java堆转储、Python编译缓存);
  • MySQL慢查询日志 & binlog:没配自动清理,一年攒下几百G不是梦。

第二步:精准“减脂”,不伤筋骨

腾讯云账号购买平台 ❶ 给 systemd-journal “扎针放水”

它不是垃圾,但可以瘦。编辑配置:

sudo vim /etc/systemd/journald.conf

取消注释并修改两行:

SystemMaxUse=500M
MaxRetentionSec=2week

然后重启服务:sudo systemctl restart systemd-journald。再执行sudo journalctl --vacuum-size=500M,立刻释放空间。记住:别设Storage=none,否则你连journalctl -u nginx都查不了。

❷ Web日志:用logrotate“定时刮痧”

以Nginx为例,检查/etc/logrotate.d/nginx是否存在。没有?自己建一个:

/var/log/nginx/*.log {
    daily
    missingok
    rotate 30
    compress
    delaycompress
    notifempty
    create 0644 www-data www-data
    sharedscripts
    postrotate
        if [ -f /var/run/nginx.pid ]; then
            kill -USR1 `cat /var/run/nginx.pid`
        fi
    endscript
}

这段代码的意思是:每天切日志、保留30天、自动压缩、切完通知Nginx重开新文件。测试是否生效:sudo logrotate -d /etc/logrotate.d/nginx(-d是调试模式,只看不执行)。

❸ Docker:别让它当“仓鼠”

执行这组命令,干净利落:

docker system prune -a --volumes -f    # 清空所有未使用镜像、容器、网络、卷(谨慎!确认无重要数据)
docker builder prune -f               # 清理构建缓存(Docker 23.0+)
# 查看空间占用详情:
docker system df -v

更温柔的做法:定期运行docker image prune -f(只删悬空镜像),搭配docker volume ls -qf dangling=true | xargs -r docker volume rm(删悬空卷)。

❹ MySQL:慢日志不是“古董”,是负担

登录MySQL,执行:

SHOW VARIABLES LIKE 'slow_query_log%';
SHOW VARIABLES LIKE 'long_query_time';

如果slow_query_log是ON,且日志文件巨大,先关掉再归档:

SET GLOBAL slow_query_log = 'OFF';
-- 把旧日志移到/home/mysql-backup/并压缩
mv /var/lib/mysql/slow.log /home/mysql-backup/slow_$(date +%Y%m%d).log.gz
gzip /home/mysql-backup/slow_*.log
-- 再开启(可选)
SET GLOBAL slow_query_log = 'ON';

长期方案:在/etc/mysql/mysql.conf.d/mysqld.cnf里加:

slow_query_log_file = /var/log/mysql/slow.log
log_error = /var/log/mysql/error.log
# 加上自动轮转(需配合logrotate)

第三步:防复发!自动化才是终极奥义

手动清理一次爽,反复清理一次傻。我们写个“腾讯云友好型”清理脚本(保存为/usr/local/bin/tc-clean-disk.sh):

#!/bin/bash
# 腾讯云磁盘健康守护脚本 · 安全版
LOG="/var/log/tc-clean-$(date +%Y%m%d).log"
echo "【$(date)】开始清理" >> $LOG

# 1. 清理journal(保留最近2周,最大500M)
sudo journalctl --vacuum-time=2weeks --vacuum-size=500M >> $LOG 2>&1

# 2. 清理旧core dump(如有)
find /var/crash -name "*.crash" -mtime +7 -delete >> $LOG 2>&1

# 3. 清理apt缓存(Ubuntu/Debian)
sudo apt clean >> $LOG 2>&1

# 4. 清理已卸载包的配置残留(谨慎!仅对明确无用的)
sudo deborphan | xargs -r sudo apt --purge remove -y >> $LOG 2>&1

# 5. 记录清理后空间
df -h | grep -E '(^Filesystem|/dev/vda|/dev/vdb)' >> $LOG

echo "【$(date)】清理完成" >> $LOG

赋予权限:chmod +x /usr/local/bin/tc-clean-disk.sh,再加进crontab每天凌晨2点跑一次:

0 2 * * * /usr/local/bin/tc-clean-disk.sh

最后送你三条血泪忠告

  1. 别碰 /boot 分区:里面是内核和grub,删错直接变砖。清理前先ls -lh /boot看有没有重复的旧内核(如vmlinuz-5.4.0-xx),再用sudo apt autoremove --purge(Ubuntu)安全卸载;
  2. 警惕“隐藏大块头”:用sudo du -sh .[!.]* * | sort -hr | head -10,点开头的隐藏文件(如.git、.cache)可能暗藏几十G;
  3. 腾讯云控制台≠万能解药:云硬盘扩容只是“买更大的胃”,不解决“暴饮暴食”问题。根源清理+监控告警(云监控设置磁盘使用率≥85%告警)双管齐下,才是王道。

清理完,记得喝杯茶,对着df -h输出长长舒一口气。那行绿色的23% /,不是数字,是服务器对你温柔的眨眼。

毕竟,运维的终极浪漫,不是扩容,而是——让每1GB空间,都干它该干的活。

下载.png
Telegram售前客服
客服ID
@cloudcup
联系
Telegram售后客服
客服ID
@yanhuacloud
联系