为什么要动这个老系统
我那个名叫SiNiSistar2的破烂玩意儿,就是我家里的核心服务器,跑着媒体库、家庭自动化和一些乱七八糟的下载服务。这系统我搭起来已经快四年了,当时图稳定,用的是一个比较老版本的容器环境,跑得是真特娘的慢。最近半年,我明显感觉它开始拖后腿了。
压垮骆驼的一根稻草是什么?上周五晚上,我老婆突然要拉一份之前出去旅游的照片回来,结果她一点备份服务,S2就直接卡死了,CPU占用直接飙到90%以上,风扇呼呼地转。重启了四五遍,备份进度条动都不动。我当时就火了,这服务不就是为了方便吗?现在搞得这么麻烦,不如直接扔掉算了。
我躺在床上琢磨了一晚上,不能再用这种老掉牙的、东拼西凑的配置了。我决定,这回必须彻底重构,来一次从底层到应用层的“大换血”。既然要换,就直接上最新的技术栈,让它轻盈、快速,而且易于维护。
从开始到格式化:最折腾的备份工作
既然决定要动手了,第一步自然是备份。这活儿是最枯燥也最累人的。我找出了两个新的10T机械盘,插到S2的机箱里,挂载上去之后,我用rsync命令开始把所有的数据,包括媒体、配置文件、数据库备份,全部拉到新盘上。这个拉数据的过程,足足跑了二十多个小时,中途我不得不起来几次检查进度,生怕它给我撂挑子。
等数据确定都同步好了,我拔掉了外接盘,深吸一口气,格式化了S2的主系统盘。心想,这回搞定了就再也不用受气了。
我选择了最新的Debian系统,装好内核之后,进入了我的核心操作阶段——容器运行时升级。我决定这回彻底放弃那个臃肿的Docker,转投Podman的怀抱。因为Podman的Rootless模式听起来就香,安全且不占资源。
配置的深坑:权限的拉锯战
我以为这回升级会很顺利,毕竟系统是新的,依赖包也是最新的。结果,我刚跑第一个容器,脸就绿了。
- 我按照网上找到的几篇最新教程配置了Podman。
- 设置了用户映射,调整了`/etc/subuid`和`/etc/subgid`。
- 启动了Home Assistant的容器,它报了个错:权限不足,无法写入配置文件。
我当时就懵了。Rootless不就是为了让普通用户也能跑容器吗?我对着这个权限问题,折腾了整整三天。日志文件翻烂了,GitHub上的issue看了个遍。每次调整完配置,都必须重启系统,光是等待重启的时间,就耗掉了我一个晚上的耐心。
网上那帮写教程的,要么是基于老版本的,要么就是没说清楚最核心的关键点。我发现根本不是Podman本身的问题,而是内核参数没调对!必须修改几个关于用户命名空间的参数,并刷新了systemd的配置。
我改完那几个参数,重启系统,敲下启动命令的一瞬间,容器噌地一下就跑起来了。那一刻,我感觉比中了彩票还痛快。
新的SiNiSistar2:终于轻盈了
搞定了基础环境,接下来的应用层迁移就顺畅多了。
我重建了几个关键服务的容器:媒体管理、下载器、备份脚本。因为切换到了更轻量级的Podman,并且优化了底层文件系统,整个S2机器的待机功耗直接降了一大截。风扇再也不像以前那样,动不动就狂转了。
- 系统启动速度比以前快了三倍不止。
- 老婆拉取照片备份,只需要几分钟就能搞定,再也不会卡死。
- 我在外面访问服务,响应时间明显缩短了。
这回的更新日志虽然费了我两个周末的功夫,但结果是喜人的。它证明了,技术升级虽然折腾,但带来的性能提升是实打实的。SiNiSistar2终于卸下了它一身的旧包袱,轻装上阵了。我打算继续观察一段时间,看看新架构下还有没有新的小毛病需要收拾。
折腾就是我们玩儿这些东西的乐趣所在,虽然骂骂咧咧,但弄好了心里就是舒坦。