三年攒下的技术债,一个周末还清——家庭服务器大扫除记录
上周六早上,我照例想给家里那台 All-in…
上周六早上,我照例想给家里那台 All-in-One 服务器加个新服务,结果一登录就傻眼了:root 目录下躺着十几个不知道哪年留下的脚本,Docker 里挂着七个我早就忘了用途的容器,/etc/crontab 和 systemd timer 各管各的,备份脚本还互相打架。那一刻我才意识到,这台跟了我三年的机器,早就攒下了一屁股技术债。
于是我把整个周末搭了进去,给它做了一次彻底的大扫除。过程不算惊险,但踩了不少坑,也总结出几条适合 homelab 玩家的经验。写下来留个记录,也分享给同样在折腾家用服务器的朋友。
第一步:先盘点,别急着删
很多人清理服务器的第一反应,是”看着不顺眼的先 rm 掉”,这是最危险的。我给自己定了一条铁律:删任何东西之前,先搞清楚它是什么、谁在用它、删了会不会炸。
我用了三个命令把家底彻底摸了一遍。第一个,列出所有 Docker 容器,看运行状态和启动时长:
docker ps -a --format "table {{.Names}}\t{{.Status}}\t{{.RunningFor}}\t{{.Ports}}"
这一眼就能看出哪些容器跑了两年没重启、哪些占着端口却从没被访问过。第二个,列出所有开机自启、且非系统自带的 systemd 服务:
systemctl list-unit-files --state=enabled --type=service \
| grep -vE "dbus|network|ssh|systemd|getty|cron|user"
第三个,看看哪些端口在监听、被哪些进程占用:
ss -tlnp
第二步:给技术债分类
盘点完,我把问题归成了四类:
- 僵尸容器:七个容器里有两个已经三个月没被访问,日志早就不滚了,纯粹占着内存和端口。
- 重复的定时任务:同一个备份脚本,我在 crontab 里写了一份,又在 systemd timer 里写了一份,两边时间还不一样,等于每天备份两次、还互相覆盖。
- 没人用的端口:一堆服务当初为了”测试”临时开的口子,事后忘了关,成了安全隐患。
- 失传的脚本:/root 下十几个脚本,一半没有注释,光看文件名根本猜不出是干什么的。
分类最大的好处,是能分清”可以安全删””需要迁移””必须保留”三种情况,而不是一刀切地全删。
第三步:动手清理,但先备份
正式动手前,我先把重要数据做了一次离线备份。这一步不能省,尤其是我这种”先斩后奏”的性子,更需要用备份给自己兜底。
rsync -avz --delete /srv/docker/ /mnt/backup/docker-$(date +%F)/
tar -czf /mnt/backup/etc-$(date +%F).tar.gz /etc
备份确认无误后,才开始动刀。停掉并删除那两个月没用的僵尸容器,顺手清掉悬空的镜像:
docker stop old-service-a old-service-b
docker rm old-service-a old-service-b
docker image prune -af
第四步:统一管理,不再各管各的
这次大扫除最大的收获,不是省了多少内存,而是我把散落各处的管理方式统一了。
以前服务有的是裸机 systemd 跑的,有的是 docker run 直接起的,有的是 Compose 挂着的,乱得像一锅粥。这次我全部收编到 Docker Compose 下,一个服务一个目录,一份 docker-compose.yml,外加一个 .env 存配置:
~/services/
├── nginx/
│ └── docker-compose.yml
├── nextcloud/
│ └── docker-compose.yml
└── ...
以后起停、升级、迁移,一律 docker compose up -d / docker compose down,不用再翻历史命令。定时任务也一样,我把 crontab 里的东西全部迁到 systemd timer,统一用 systemctl list-timers 查看,谁在什么时候跑、跑了多少次,一目了然。
第五步:写文档,别让技术债再生
收拾完机器,我花了半小时写了一份 README,把每个服务的作用、依赖、备份方式、常用命令都记下来,放在 /srv/README.md。这不是给机器看的,是给半年后那个又忘光了的自己看的。
几条血泪心得
- 先盘点再动手,删之前一定知道它是什么、谁在用。
- 备份永远排在清理前面,
rsync一次比后悔一次便宜得多。 - 统一管理方式,能 Compose 就别裸跑,能 timer 就别 crontab 双份。
- 服务启动时顺手写一行文档,比事后回忆强一百倍。
最后说句实在的:家用服务器的技术债,往往不是一次欠下的,是三年里每一次”先跑起来再说”攒出来的。定期做一次大扫除,比等它炸了再抢救,省心得多。
