告别 Proxmox,迁移至 NixOS + Incus:体验声明式管理的高效与可重现性!

全面转向 Nix:从 Proxmox 到 NixOS + Incus

为何用声明式文本文件取代了可点击操作的虚拟机管理程序?

最后更新于 2025 年 12 月 01 日,阅读时长 9 分钟 软件开发,DevOps,家庭实验室

已正式停用了 Proxmox 集群。多年来,家庭实验室一直运行在 Proxmox 上,从最初的一台 NUC 扩展到多节点集群,如今已将所有内容迁移到了运行 Incus 的 NixOS 上。

从怀疑者到信徒

并非一开始就是 Nix 的拥护者。实际上,最初十分讨厌 Nix 语言及其语法,完全搞不懂它的工作原理,而且已有自己设置 dotfiles 的特定方式。使用 Dotbot 进行符号链接,还用自己编写的名为 dotbins 的工具来管理二进制文件。觉得大多数工具并不需要 Nix。在 Mac 上使用 nix - darwin 很长时间,但也只是用它来指定 Homebrew 软件包和应用程序设置。

真正让态度转变的是购买游戏电脑的时候,正如在本地大语言模型文章中所描述的那样。起初,安装了 Pop!_OS,因为想玩游戏,同时又坚决不想用 Windows。虽然有些游戏能运行,但不断遇到 NVIDIA 驱动问题,需要运行一些随机的命令式命令来解决。觉得这不是个好办法,因为之后根本无法重现这些调试步骤。后来,做了件蠢事,更新了 NVIDIA 驱动,却没意识到命令式地管理驱动版本和存储库会带来灾难,结果陷入了 GRUB 启动循环。沮丧之下,安装了 NixOS,希望它承诺的原子更新能解决这个问题。结果令人惊喜。在将系统迁移到新磁盘之前,从未真正相信一切能做到字节级的完全一致。没有克隆磁盘,只是将 Nix 配置应用到全新安装中。系统顺利启动,复制了数据,一切都和原来一模一样。那一刻,彻底信服了。

命令式系统的弊端

Proxmox 是一款很棒的软件。它降低了入门门槛,教会了几乎所有关于虚拟化、LXC 容器和 ZFS 的知识。但从根本上说,Proxmox 是围绕“点击按钮”构建的,是一种以图形用户界面(GUI)优先的模式。虽然可以使用 Terraform 或 Ansible 来自动化操作,但这往往感觉像是在和工具较劲。状态漂移是真实存在的问题。在界面中更改某个设置来调试问题,之后就忘了,六个月后,“基础设施即代码”就与实际情况不一致了。对于手动维护系统的人来说,这很烦人。但当引入 AI 代理时,这对操作者来说就成了灾难。以“大胆模式”运行的代理可能会执行数百条命令式命令来解决问题。它可能会成功,但会让系统处于一种未定义、不可重现的状态,甚至连代理自己都无法完全理解或复制。

这种弊端在硬件管理方面也有所体现。在 HP EliteDesk 上,Intel I219 - LM 网卡有个已知的 bug,开启硬件卸载时会挂起。隐约记得几年前在 Proxmox 上解决过这个问题,但具体细节已经忘了。当安装 NixOS 时,又遇到了同样的问题:网络会随机断开。不过这次,解决办法不是在 root shell 历史记录中遗忘的命令,而是配置中有文档记录的 systemd 服务。添加了注释,详细解释了为什么需要 `tso off gso off`,还引用了相关论坛帖子。如果重新安装这台机器,问题会自动解决。而在 Proxmox 上,又得重新经历一遍痛苦的排查过程。

另一个例子是 Intel NUC。由于家庭实验室设备放在电视后面,就想能不能把它也用作家庭影院电脑(HTPC)。在 Proxmox 上,这需要将 GPU 直通到虚拟机才能获得视频输出。但这样做意味着 Proxmox 主机将完全无法访问 GPU,一旦出现问题就无法使用本地控制台。这是一个严格的二选一:要么是媒体播放器,要么是可调试的虚拟机管理程序。试过,但太麻烦了,很快就放弃了。有了 NixOS,就不用做选择了。主机操作系统直接运行 Kodi,提供原生硬件加速和视频输出。同时,`incus` 在后台运行,托管容器。在同一台设备上既能拥有 HTPC,又能拥有服务器,还没有虚拟化开销或“无头主机”的限制。

还有更深层次的哲学差异。像 Proxmox 或 TrueNAS 这样的系统被设计成设备形式。不建议在主机上运行任意命令,安装软件包或调整配置文件也不受鼓励,因为这样可能会破坏中间件,或者在升级时丢失更改。实际上,无法充分发挥自己硬件的全部潜力。而在 NixOS 上,主机完全由自己掌控。可以随意折腾它,比如安装 Kodi、调整网络驱动、运行本地大语言模型,而不用担心出问题。因为状态是声明式的,一切都清晰明了且可重现。即使主机配置出现问题,即使机器正在运行重要服务,也能在几秒钟内恢复到正常状态。

代理式编程的优势

之前写过关于向代理式编程转变的文章。在 AI 代理执行任务的时代,以命令行界面(CLI)优先和声明式的系统才是王道。AI 代理无法可靠地在网页界面中“点击按钮”来配置 VLAN 标签或调整磁盘大小。它需要文本,需要确定性。

迁移到 NixOS 后,整个基础设施都用文本文件定义。这意味着 AI 代理可以读取、理解甚至安全地修改基础设施。Proxmox 不透明的数据库和以界面驱动的工作流程对代理来说就像一个黑匣子,而 NixOS 则是一本打开的书。如果让代理“在 9000 端口部署一个 Faster Whisper API 服务器并将其暴露到局域网”,它不需要在“服务”菜单、“网络”菜单和“防火墙”菜单中来回导航。它只需编写一个 systemd 服务定义,并在同一文件中添加 `networking.firewall.allowedTCPPorts = [ 9000 ];` 即可。代理甚至可以通过检查 git 差异或活动配置来验证更改是否成功。这就是所经历的“代理式编程”革命在基础设施方面的体现。

一位使用 NixOS 多年的朋友最近称赞配置结构非常好,尤其是在管理 8 台不同机器方面。有趣的是,配置几乎不是自己写的。是在多次会话中通过代理式 AI 完成的。对配置进行了多次重构,从管理一台机器到两台,最终扩展到九台。AI 承担了重构的繁重工作,确保 PC、NUC 和 HP 既能共享通用模块,又能保持各自的特点。

架构:Incus 与模拟

仍然希望有一种纯粹的“Nix”方式来管理持久、有状态的 LXC 容器和虚拟机。虽然有 `nixos - containers` 或 `microvm.nix` 等项目,但它们往往缺乏成熟的操作能力或实时迁移功能,不如强大的虚拟机管理程序。Incus(LXD 的社区分支)完美地填补了这个空白。它让能像管理 NixOS 主机一样管理“批量”资源,同时允许在稳定、可管理的环境中运行“特殊”的遗留工作负载(比如旧 Ubuntu 容器或 Home Assistant 虚拟机)。关键是,Incus 完全可以通过简洁的命令行界面控制,使其成为代理式工作流程中的理想选择。

随着时间的推移,已经将大多数遗留的 LXC 容器(如 DNS 或媒体管理服务)迁移到了在虚拟机内运行的声明式 Docker Compose 文件中。但还有一个主要的难题:Home Assistant OS。一直没有找到合适的替代方案。原以为需要像 Proxmox 这样的专用设备操作系统才能可靠地运行它。后来才发现,在 NixOS 上使用 Incus 运行 Home Assistant 的完整虚拟机非常简单。它只是另一个 QEMU 进程,但管理起来和容器一样轻松。

做的一件很巧妙的事是创建了与物理机器配置完全相同的 Incus 虚拟机。在关闭最后一台 Proxmox 主机之前,就确信整个配置是可行的,因为有一台运行相同设置的虚拟机。只需要一个包含覆盖配置的小文件,然后就可以验证虚拟机是否正常工作。这消除了对“彻底更换”物理服务器的担忧。

迁移过程

由于有 `vzdump` 和 `qemu - img`,迁移过程出人意料地简单。以下是如何在不丢失数据的情况下迁移 7 年多的数字历史的方法。

还在 dotfiles 中保留了一些详细的迁移笔记。这些笔记应该足以帮助任何想进行相同迁移的人。如果不够,把它们交给 AI(用的是 Gemini 3 Pro)肯定能帮解决问题。

1. 迁移 LXC 容器

对于 LXC 容器(运行 Docker、DNS 等),基本上是“瞬移”它们。将 Proxmox 上运行的容器导出为标准的 tar 包,复制到新环境,然后直接流式传输到一个全新的 Incus 容器中。

在 Proxmox 上:

# 将容器 101 导出到压缩存档
vzdump 101 --dumpdir /var/lib/vz/dump --mode suspend --compress zstd

在 NixOS 上(使用 `migrate - lxc.sh` 脚本):

# 将备份流式传输到新的 Incus 容器
./migrate - lxc.sh vzdump - lxc - 101 - *.tar.zst ubuntu - container

这个脚本会创建一个新容器,挂载其根文件系统,并用 Proxmox 的导出文件覆盖它。它会自动处理一些繁琐的事情,比如映射用户 ID 和修复 `machine - id`。

2. 迁移虚拟机

对于虚拟机(如 Home Assistant OS),只需要转换磁盘格式。Proxmox 使用 LVM - thin 或 ZFS zvols,而 Incus 支持 QCOW2 或原始 ZFS。

在 Proxmox 上:

# 将 ZFS 卷导出为 QCOW2 文件
qemu - img convert - p - O qcow2 /dev/zvol/rpool/data/vm - 100 - disk - 0 vm - 100.qcow2

在 NixOS 上(使用 `migrate - vm.sh`):

# 导入磁盘并创建虚拟机
./migrate - vm.sh vm - 100.qcow2 home - assistant

迁移结果

现在,可以从一个单一的 git 仓库管理整个设备群,包括主机操作系统、网络、存储和虚拟机管理程序配置。实现了两全其美:在需要的地方运行持久、有状态的服务,同时拥有一个可重现、坚如磐石的主机操作系统。可以擦除主机,重新安装 NixOS,运行恢复脚本,几分钟内就能恢复在线。最棒的是,再也不用记住三年前在网页界面中点击了哪个复选框。一切都在代码里,而且因为是代码,代理可以帮管理。

相关文章

- 使用本地缓存服务器自动化 NixOS 夜间构建以避免本地编译

- 无需云服务的 TrueNAS 朋友间备份

- 家庭实验室:从单个树莓派到 Proxmox 集群和专用 NAS 🔧

- 用手机编程 📱

- 3090 显卡如何演变成两个本地优先的 AI 项目 🎮

内容概要:本文研究了基于CNN-BiGRU-Attention混合神经网络模型的风电功率预测方法,旨在提升风力发电功率预测的准确。该模型融合卷积神经网络(CNN)以提取输入变量中的局部时空特征,结合双向门控循环单元(BiGRU)充分捕捉时间序列前后向的长期依赖关系,并引入注意力机制(Attention)动态加权关键时间步的特征信息,增强模型对重要时刻的敏感度。研究采用多变量输入进行单步预测,综合纳入风速、风向、温度等多种气象因素作为模型输入,全面反映环境变量对风电输出的影响。通过Matlab平台完成模型构建、训练仿真验证,实验结果表明该混合模型在预测精度稳定方面优于传统单一模型,有效提升了风电功率预测能。; 适合人群:具备一定机器学习深度学习理论基础,熟悉Matlab编程环境,从事新能源发电预测、电力系统调度、智能算法应用等相关领域的科研人员、工程技术人员及高校研究生。; 使用场景及目标:①应用于风电场实际运行中的短期功率预测,提高电网调度的安全可再生能源消纳效率;②为深度学习模型在复杂时序预测任务中的设计优化提供实践范例,推动AI技术在能源系统智能化中的深度融合;③支持学术研究复现、课程项目设计教学演示,帮助深入理解CNN、BiGRUAttention机制的协同建模范式实现细节。; 阅读建议:建议结合提供的Matlab代码进行动手实践,重点关注数据预处理流程、模型网络结构设计、超参数调优及训练收敛过程,鼓励尝试替换输入变量组合、调整网络层数或优化注意力结构,以进一步探究模型能边界并提升预测鲁棒
内容概要:本文研究了基于Benders分解算法输电网-配电网运营商(TSO-DSO)协调机制的双层优化模型,旨在有效应对新能源出力波动、负荷不确定等对现代电力系统运行带来的挑战。模型上层由输电网运营商(TSO)负责全局资源优化主网稳定调控,下层由多个配电网运营商(DSO)实现本地分布式能源的灵活调度,通过Benders分解实现上下层之间的迭代协调信息交互,从而在保障系统安全的前提下提升整体运行的经济鲁棒。研究提供了完整的Matlab代码实现,涵盖数学建模、算法求解、收敛分析及仿真结果可视化等环节,有助于深入理解双层优化架构在输配电网协同调度中的具体应用技术细节。; 适合人群:具备电力系统分析、优化理论基础及一定Matlab编程能力的研究生、科研人员,以及从事电网调度、能源系统规划等相关领域的工程技术人员。; 使用场景及目标:①掌握Benders分解在电力系统双层优化问题中的建模求解流程;②理解TSO-DSO协同机制下输配电网交互建模的核心思想实现方法;③复现并拓展高水平学术论文中的优化模型,服务于科研项目攻关或实际工程仿真需求。; 阅读建议:建议结合凸优化理论、电力系统经济调度Benders分解原理进行系统学习,优先运行并调试所提供的Matlab代码,调整关键参数以观察算法收敛行为模型能变化,从而深化对协调机制优化机理的理解。
内容概要:本文档是一份关于经济学期刊论文复现的研究资料,聚焦核心议题“数字化转型能否促进企业的高质量发展”。文档构建了一个完整的量化分析框架,基于中国上市公司数据,实证探讨数字化转型对企业全要素生产率(TFP)及高质量发展的实际影响。内容涵盖数字化转型指标的构建、企业高质量发展评价体系的设计、计量经济模型的选择应用(如固定效应模型、GMM方法),并提供Matlab代码实现全过程,包括数据处理、模型估计稳健检验。研究还系统梳理了OL、FE、LP、OP、GMM等多种全要素生产率的测算方法,为读者复现高水平经济学论文、深入理解数字经济时代的企业发展路径政策含义提供了详尽的技术支持理论指导。; 适合人群:具备扎实的经济学理论基础和较强的定量分析能力,熟悉Matlab或Python编程语言,正在从事经济管理、产业经济或数字经济等领域研究的研究生、高校教师及科研机构研究人员。; 使用场景及目标:①完整复现经济学顶刊论文的实证研究流程,掌握规范的学术研究范式;②学习并应用数字化转型企业绩效间的因果识别策略,提升独立开展实证研究的能力;③为撰写学位论文、申报科研课题或编制政策咨询报告中涉及数字经济效应的章节提供直接的方法论参考和代码支持; 阅读建议:建议读者务必结合文档提供的数据Matlab代码进行同步实操,重点钻研变量定义、模型设定、内生处理和稳健检验等关键环节,通过反复调试验证,深刻领会高水平实证研究的严谨逻辑技术细节,从而全面提升自身的科研素养论文写作水平。
内容概要:本文围绕“绿电直连型电氢氨园区优化运行”开展创新未发表研究,提出一种集成绿色电力直接供给、电解水制氢合成氨工艺的多能耦合系统优化模型,旨在实现园区能源系统的低碳化、高效经济化运行。研究采用MatlabPython编程语言,结合实际气象负荷数据,构建涵盖电-氢-氨能量转换、存储利用全过程的能量流、物质流及经济协同优化框架,重点解决可再生能源出力波动导致的供需失衡问题,并通过优化电解槽、储氢罐、合成氨反应器等关键设备的运行策略容量配置,提升系统对风光能源的就地消纳能力。文中配套提供完整的仿真代码、原始数据及Word格式论文,支持结果复现模型拓展,具有较高的科研参考价值工程应用潜力。; 适合人群:具备电力系统、能源工程、优化建模或新能源技术背景,从事综合能源系统、氢能利用、碳中和园区等相关领域研究的研发人员及硕士、博士研究生。; 使用场景及目标:①研究绿电直供模式下电-氢-氨多能系统协同运行机制优化调度策略;②探索高比例可再生能源就地转化为高附加值化工产品的技术路径;③为工业园区实现深度脱碳能源自洽提供决策支持;④作为学术论文撰写、课题申报或科研复现的高质量参考资料。; 阅读建议:建议结合MatlabPython代码逐模块解析模型实现过程,重点关注目标函数构建、约束条件设定(如设备动态特、能量平衡、安全边界)以及多场景仿真对比分析,宜在调试过程中调整权重系数参数设置,深入理解系统灵敏度优化机理,并尝试引入更多不确定因素进行鲁棒扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值