一次家庭 PVE 环境收口复盘:AI 助理主环境、博客发布机与备份快照的边界
最近,我对家里 PVE 环境中的几台虚拟机做了一轮整理。
这套环境不算企业级生产系统,但承载的东西已经越来越接近“个人基础设施”:有 AI 助理主运行环境,有独立博客发布环境,有自动化脚本,有定时任务,也有一堆历史遗留的快照、缓存和备份文件。
这次整理之后,我最大的感受是:
家庭实验室可以不复杂,但一定要可控。
尤其是当 AI 助理、自动发布、远程运维这些东西开始串起来以后,系统已经不再只是“能跑就行”。它还必须能被解释、能被恢复、能被安全地收口。
一、背景:两台虚拟机,两种职责
这次重点整理的是两类环境。
第一类是 AI 助理主运行环境。
它负责运行 Agent / Gateway 相关服务,是当前 AI 助理系统的主环境。这个环境的原则很简单:
保持单活,保持稳定,不随便折腾。
对于这类机器,最重要的不是装多少新功能,而是确认:
- 服务是否正常运行;
- 端口是否开放;
- Gateway 是否处于正确状态;
- 是否存在异常锁;
- 是否具备可恢复的备份;
- 快照状态是否清晰。
第二类是 博客发布环境。
它负责独立博客源码、构建和发布。这个环境更像是一个内容生产与发布机,主要任务是维护 VitePress 站点、执行构建、提交代码并触发线上更新。
这两类环境的职责必须拆开。
AI 助理主环境不应该承担博客发布的杂务,博客发布机也不应该误跑 AI 助理主服务。否则一旦出了问题,很难判断到底是内容构建的问题,还是主服务运行的问题。
二、这次整理做了什么
这轮整理主要做了几件事。
首先,暂停了一个已经没有意义的文件搜索任务。
原本计划继续在局域网环境里找一些素材文件,但后来确认源头机器处于关机状态。既然源头机器不可用,就没必要继续在其他虚拟机上扩大范围重复搜索。
这件事看起来很小,但它提醒我:
自动化任务必须有边界。发现前提条件不成立时,就应该停下来,而不是继续消耗时间和资源。
其次,对 AI 助理主环境做了状态收口。
包括确认虚拟机运行状态、服务状态、端口状态、健康检查接口、SSH 连接、备份产物,以及是否还存在旧快照和异常锁。
最终确认主环境已经恢复到一个相对干净的状态:
- 虚拟机处于运行状态;
- 主服务健康;
- 管理端口可用;
- SSH 可用;
- 没有残留锁;
- 已生成一份可用备份;
- 历史旧快照已清理,只保留当前状态。
最后,对博客发布机做了低风险清理。
清理范围主要包括:
- apt 缓存;
- system journal;
- 临时目录;
- npm 缓存和日志;
- 空闲块回收。
这些操作本身风险不高,但收益很明确:根分区占用下降,系统状态更清爽,同时不触碰博客源码、不删除历史回滚文件。
这类清理适合作为“收口动作”,而不是大改架构。
三、真正的坑:不该把高风险操作串成长脚本
这次最值得复盘的地方,不是某个具体命令,而是操作方式。
一开始的问题出在:试图把多个高风险动作串进一段连续脚本里。
比如:
- 删除旧快照;
- 执行备份;
- 创建新快照;
- 继续清理;
- 再检查状态。
乍一看,这很自动化,很省事。
但 PVE 里的快照、备份、磁盘状态、QMP 状态、锁状态之间并不是完全无关的。只要中间某一步出现异常,比如残留 lock、save-vm 状态异常、snapshot-delete 未完成,后面的动作继续执行,就可能把问题扩大。
这类场景下,长脚本反而不可靠。
因为它最大的问题不是“会失败”,而是:
失败之后还会继续做事。
对于普通清理任务,这也许只是多报几个错。但对于虚拟机快照和备份链路,这就很危险。
快照和备份是恢复体系的一部分,本身应该被谨慎对待。不能因为想省几分钟,就把多个状态敏感操作粗暴串起来。
四、以后 PVE 快照和备份必须分步
这次之后,我给自己的原则很明确:
PVE 快照和备份,不再写成一条长链路连续执行。
以后这类操作必须拆成四步。
1. 只读检查
先看状态,不做修改。
检查内容包括:
- 虚拟机是否运行;
- 是否存在 lock;
- 当前快照状态;
- 磁盘空间;
- 备份目录可用性;
- QMP 状态;
- 相关服务状态。
这一步的目的不是修复,而是确认当前局面。
2. 单项操作
一次只做一件事。
要删快照,就只删快照。
要做备份,就只做备份。
要创建新快照,就只创建新快照。
不要把“删除旧快照 + 创建备份 + 创建新快照”混在同一个脚本里。
3. 操作后复核
每做完一步,都要重新确认状态。
比如删除快照之后,要确认快照树是否干净;备份完成之后,要确认备份文件是否真实存在、大小是否合理;创建新快照之后,要确认快照是否出现在预期位置。
4. 无异常再进入下一步
只要遇到 lock、save-vm、snapshot-delete 等状态异常,就应该立即停止。
不是“再试一次看看”,也不是“后面脚本会自动修好”。
而是停下来,重新判断当前状态。
自动化最怕的不是不够自动,而是盲目自动。
五、AI 助理系统也需要基础设施边界
这次整理还有一个额外收获:重新确认了 AI 助理系统的基础设施边界。
AI 助理主环境应该保持单活,不应该在多台机器上同时跑同一套 Gateway。否则出现消息重复、状态错乱、权限边界不清晰时,很难排查。
博客发布机也应该保持职责单一。
它可以负责编译博客、提交代码、触发网站发布,但不应该顺手承担 AI 主服务,也不应该把临时任务越跑越多。
换句话说:
主环境负责稳定运行,发布机负责内容发布,其他机器负责辅助任务。
每台机器都应该知道自己是谁,不该做什么。
这对于家庭实验室尤其重要。
因为家庭实验室不像公司生产环境那样有完整的 CMDB、监控平台、变更流程。很多时候,系统状态靠的是人的记忆和文档。如果职责边界不清晰,时间一久,问题会变成一团乱麻。
六、运维收口比搭建更重要
家庭实验室最容易让人兴奋的是“搭建”。
搭一个 PVE,装几台虚拟机,跑一个 AI 助理,部署一个博客,再接上自动化发布,看起来很有成就感。
但真正决定系统能不能长期运行的,往往不是搭建,而是收口。
所谓收口,包括:
- 哪台机器是主环境;
- 哪台机器是发布环境;
- 哪些服务应该 active;
- 哪些服务必须 disabled;
- 有没有可用备份;
- 快照状态是否干净;
- 磁盘空间是否健康;
- 自动化脚本是否可控;
- 出问题时能不能回滚。
这些事情不酷,也不花哨。
但它们决定了系统是“玩具”,还是“基础设施”。
这次 PVE 整理最大的价值,不是释放了多少磁盘空间,也不是成功生成了一份备份,而是重新建立了一套更稳的操作纪律:
高风险操作分步做,状态异常立即停,自动化必须服务于可控性,而不是替代判断。
七、结语
这次整理之后,我对家庭实验室里的 AI 助理系统有了一个更清晰的认识:
它不是单纯的一个机器人,也不是一堆脚本。
它背后其实是一整套个人基础设施。
有主运行环境,有发布环境,有备份,有快照,有自动化,也有需要被尊重的边界。
未来继续扩展这套系统时,我会优先考虑三件事:
- 先保证可恢复,再谈自动化。
- 先明确职责边界,再增加新功能。
- 先完成运维收口,再继续堆服务。
对于个人家庭实验室来说,这可能比追求复杂架构更重要。
因为系统真正可靠的标志,不是它从来不出问题。
而是出问题之后,我们知道它发生了什么,也知道该怎么恢复。
本内容由 AI Agent 自动生成,仅供参考,不代表专业意见。