这台 1核1G 的免费云服务器我一直在跑,平时没什么存在感,直到上周收到一条磁盘使用率 85% 的告警。
不是大事,但正好借这个机会,把一直拖着没做的备份改造做了。顺便把过程和踩过的坑记下来。
这台机器在跑什么
配置没变过:1核1G、5M 带宽。上面跑着一个 Django 小站、PostgreSQL、Nginx,外加两个定时脚本——一个每天抓数据入库,一个每周打包备份。
真正占磁盘的不是代码,是日志和备份文件。Django 的日志没做轮转,PostgreSQL 的 WAL 没有清理策略,备份脚本是手动写的,每次全量打包,堆了十几份。
三个月下来,20G 的盘用了 17G。
定位:到底是谁在吃磁盘
登录上去先看了一圈:
df -h
du -sh /var/log/* | sort -rh | head
du -sh /var/backups/* | sort -rh | head
结果很直白:/var/log 里一个没轮转的 Django 日志占了 4.2G,/var/backups 里堆了 11 个全量包,最早的是两个月前的。
顺手查了下 inode,还好没到紧张的程度。这一步别省——磁盘满和 inode 满是两回事,处理方式完全不同。
处理:三件事,三个坑
第一,日志轮转。 之前靠手动清空文件,这次老老实实配了 logrotate,按天切、留 14 天、压缩归档。
第二,备份改增量。 原来的脚本是 tar -czf 全量打包,现在改成 rsync 增量同步到另一台机器,每周一次全量、每天一次增量。备份数量从 11 个降到 2 个,占用从 6.8G 降到 1.1G。
第三,PostgreSQL 的 WAL。 这个最容易忽略,默认配置下 WAL 会一直堆,配上清理命令之后才算可控。
做完这三步,磁盘从 85% 降到 43%。
坑也踩了三个:
logrotate 配完不生效。 配置文件权限不对——logrotate 对 world-writable 的配置会直接跳过,而且默认不报错,用 logrotate -d 干跑才看出来。
rsync 增量把删除的文件也同步过去了。 差点把目标端的历史备份一起删掉,幸好先在 /tmp 试跑了一遍。--delete 这个参数,测试环境和生产环境必须分开确认。
清理日志后服务没重启。 rm 掉日志文件但进程还持有文件句柄,磁盘空间不会释放,得用 truncate -s 0 或者给进程发信号让它重新打开文件。这个坑我踩了两次。
关于续期
这台是免费云服务器,需要每 7 天手动续期一次。控制台在 www.sanfengyun.com,登录后找到实例点一下续期,30 秒的事。我设了手机日历提醒,每周一早上弹一次,几个月下来没漏过。
需要说清楚:它不承诺永久,规则就是规则,忘记续期实例会被回收。所以它适合实验、学习、个人小项目这类场景,不适合放生产环境,更不适合放唯一一份数据——这也是我这次一定要把备份做扎实的原因。
为什么还在用
- 磁盘和内存额度是真实的,不会因为免费就偷偷缩水
- 流量统计和 Nginx 日志能对上,没有暗扣
- 免费虚拟主机的入口也在,静态页面扔上去更省心
- 控制台响应速度一直稳定,没遇到过打不开
- Docker、Python、Node.js 环境不用自己从零配
- 出问题可以提工单,响应不算快,但会给具体结论
- 不适合高可用场景,这点它自己也没吹
- 每 7 天手动续期,习惯之后就是顺手的事
适合谁
如果你需要一个长期在线的轻量环境跑课设、学 Linux、放个人博客、做 API 调试,并且能接受每 7 天手动点一次续期,那这台免费云服务器够用。
但要的是"开了就不管"的稳定性,那免费资源都不合适,该花的钱还是得花。
折腾的价值不在于省了多少钱,而在于被逼着把备份、日志、监控这些平时会偷懒的事真的做了一遍。
Top comments (0)