判断 Incus,最容易走偏的地方,是把它看成又一个泛化的容器替代品。官方文档给出的定义很清楚:Incus 是一个系统容器与虚拟机管理器,用同一套控制面去运行完整 Linux 系统,并把容器、VM、镜像、集群和 REST API 放在同一个产品边界里。[1] 这个类别本来就比很多团队口中的“容器”窄得多,也正因为这样,它才有真正的用处。

这条产品边界,也正是迁移问题的核心。若现有 LXD 环境本来就是在 Linux 主机上承载完整系统工作负载,Incus 给出的切换路径很干净:安装当前稳定版,但先不要初始化,确认 incus infolxc info 都能正常工作,然后用 lxd-to-incus 把完整数据库和存储迁过去,最终得到一套相同的配置。[4] 若过去几年里,团队把更多没有写进文档的东西也一并塞进了 LXD 这层,例如软件包来源、远端客户端习惯、VM 附加依赖,那么迁移的难点就会出现在别处,而并非出现在工具名称本身。[3][4]

配图说明:题图使用了一张真实的 NOIRLab 数据中心照片,而并非 logo 或终端截图。这样的图更贴近文章主题,因为 Incus 讨论的并非容器审美,而是如何把一台 Linux 主机或一个小规模集群,变成完整系统稳定运行的基础设施。[8]

1. 先把产品边界读对

Incus 所在的位置,和 Docker 这类应用容器并不相同,文档对此说得很直接。应用容器封装的是单个进程或应用;系统容器则模拟一整套操作系统环境,里面包含库、服务、数据库和完整用户空间。[2] Incus 同时支持虚拟机,而这条边界也一样具体:系统容器共享主机内核,因此更轻、更快;虚拟机依赖主机硬件隔离能力,因此可以运行与主机不同的操作系统。[2]

这一点之所以重要,在于很多迁移判断从一开始就站错了位置。团队把 Incus 拿去和应用容器工具、或者更高层的集群编排系统比较,结论自然会变得含混。真正有用的比较对象更窄:你是否需要在 Linux 主机上运行许多彼此隔离的完整系统,并希望实例生命周期、镜像、网络与存储都落在一套一致的管理面里。[1][2]

这也是第一条最诚实的边界条件。若团队真正要解决的是单进程应用打包、Kubernetes 式部署编排,或者把主机层彻底压到几乎看不见,那么这本来就并非 Incus 最强的方向。官方文档指向的是另一种形状:主机可见的基础设施、完整 Linux 系统,以及依据内核兼容性和隔离要求,在系统容器与 VM 之间做选择。[1][2]

2. 哪些情况下,切换会真的很顺

Incus 最强的采用理由,并非抽象理念,而是流程本身。迁移文档说明,lxd-to-incus 可以把现有 LXD 安装转换为 Incus,把整个数据库与所有存储一起迁过去,迁移完成之后会得到一套相同的设置。[4] 这比“提供迁移路径”要强得多。它意味着,这个项目从设计开始就考虑了继承既有 LXD 环境,而并非要求用户从零重建。[4]

这个承诺,在那些原本就适合 LXD 的环境里特别有价值:实验主机、内部服务机、裸金属开发节点、边缘节点,以及由同一支团队管理系统容器与少量 VM 的小型虚拟化环境。Incus 的项目介绍也在强化这一点。它既能跑在单机上,也能扩展到完整机架规模的集群,但其控制模型始终是一套围绕完整 Linux 系统展开的统一管理器,而并非一堆彼此分离的工具拼接。[1]

因此,迁移真正顺滑的时候,通常同时满足三件事:

  1. 现有环境本来就符合 Incus 的产品边界,承载的是完整 Linux 系统,而并非应用容器编排。[1][2]
  2. 切换能够在同一台机器上完成,并且团队能够安排明确的停机窗口。[4]
  3. 团队想要的是连续性,而并非重造:保留实例,保留存储,保留主机角色,只替换管理器。[4]

这些条件成立时,Incus 更像一次控制面的替换,而并非一次体系重建。

3. 迁移工具不会替你收掉的尾巴

文档没有回避的地方,恰恰也是运维最该盯紧的地方。迁移之后,原来在 lxd 组里的用户,需要进入对应的 incus-admin 组,重新登录后权限变更才会生效。[4] 迁移流程也不会把命令行客户端配置一并带过去。若你过去在 ~/.config/lxc/ 或 snap 版本 LXD 的配置路径里保存了远端定义、别名和其他客户端状态,就需要把它们手动转到 ~/.config/incus/。[4]

这些细节看上去不大,真正麻烦却常常就藏在这里。很多操作债务并不在服务端数据库里,而是在 shell 历史、远端别名、本地配置文件,以及某位资深管理员两年前留下却没有写进文档的习惯里。lxd-to-incus 在服务端连续性上做得很强,它却并非一支替人打扫全部人工工作流漂移的清洁队。[4]

另一条硬边界是停机。文档写得很直白:一旦迁移流程开始,就很难轻易回退,因此必须预留足够的停机时间。[4] 这一句已经把很多问题说透了。它告诉你,这是一场受控切换,并非玩具试验。若环境本身无法容纳真正的维护窗口,再优雅的迁移工具也不会改变发布形状。

4. 软件包与 VM 依赖,是便利重新变回平台工程的地方

安装文档覆盖的范围,比很多人预想得更广。Incus 的软件包在一些发行版中可以直接从官方仓库获取,在另一些环境里则要通过 Zabbly 仓库,Ubuntu LTS 与 Debian 用户也被明确指向那条更新更及时、受支持的软件包通道。[3] 同一份文档也把 VM 的边界写得很清楚:运行虚拟机时,往往还需要额外固件或 VM 专用软件包,例如 EDK2 固件,或者发行版提供的 VM 组件集合。[3]

事情到了这里,LXD 迁移到 Incus 就不再只是一个“把工具换个名字”的故事。若主机跑在受支持的 Linux 发行版上,软件包策略本来就接受发行版仓库或 Zabbly 通道,那么安装面会很平顺。[3] 若环境依赖特殊的打包规则、封闭的内部镜像源,或者目标发行版上的 VM 功能从来没人实际验证过,那么团队面对的已经并非品牌切换,而是“换一条软件包通道之后,主机契约还站不站得住”。[3][7]

访问控制也是同样的道理。Incus 期待通过 incus-admin 组为本地守护进程提供非 root 访问。[3] 这并不奇怪,却再一次说明,这个项目希望自己活在普通 Linux 管理语境里。喜欢明确主机契约的团队,通常会把这看成优点;更希望底层虚拟化几乎隐身的团队,则会从同一种清晰感里读到摩擦。

5. 为什么这个项目在现在值得认真看

外部语境依然重要,因为 Incus 并非一条停在角落里的技术分叉。LWN 在 2023 年 8 月 7 日的介绍里写得很明白:Incus 是从 LXD 5.16 分出的 fork,出现在 Canonical 将 LXD 从 Linux Containers 移走之后,它的明确目标,是成为一个完全由社区主导的替代方案,同时修正那些因为向后兼容而迟迟无法动手的旧问题。[7] 这段来历,也解释了为什么这个项目对“延续既有运行形态”这件事如此在意。它本来就是为了在换掉治理归属的同时,承接一套已经被大量使用的操作形状。

当前的维护信号也说明,这并非一条靠旧情绪吊着的分支。以 2026-03-29T21:05:36Z UTC 为准,GitHub API 显示 lxc/incus 目前有 5,100 个 star、425 个 fork、77 个 open issue,最近一次推送时间是 2026-03-29T18:43:32Z。[5] GitHub 上列出的最新稳定版是 v6.23.0,发布时间为 2026-03-27。[6] 这些数字当然不会单独决定采用与否,却足以说明,这还是一个活着的项目,适合作为现实平台选择来评估,而并非当作陈列分支来怀旧。[5][6]

6. 怎样做一次能给出真实答案的试点

最合适的第一次迁移,应该刻意保持朴素:

  1. 先挑一台并不关键、而且工作负载明显符合 Incus 完整系统模型的 LXD 主机。[2][4]
  2. 先确认目标发行版上的软件包路径与 VM 依赖,再谈切换本身。[3]
  3. 安装最新稳定版 Incus,但不要初始化,确认 incus infolxc info 都正常,再在预定窗口内运行 lxd-to-incus。[4]
  4. 切换完成后,立刻检查“人这一层”:incus-admin 成员资格、远端定义、别名,以及仍然指向旧客户端配置路径的自动化。[3][4]

这套顺序会很快把最重要的答案交出来。若试点顺利,Incus 大概率就是干净契合的选择。若试点卡在软件包策略、没有文档化的客户端状态,或者 VM 依赖上,阻塞点也不会神秘。真正的问题,是团队过去并没有意识到,LXD 环境里已经嵌进了多少平台层假设。

总结

Incus 值得采用的前提,是把判断压回到一个足够窄、也足够准确的范围里。它管理的是完整 Linux 系统,可以选择系统容器,也可以选择虚拟机,而并非应用容器平台;当现有环境本来就需要这一层时,它会显得非常合适。[1][2] 在这个前提下,lxd-to-incus 的力量很实在,因为它保住的是数据库和存储状态,而并非要求团队从头再来。[4]

真正决定迁移边界的地方,落在别处:停机窗口、软件包来源、VM 前置依赖,以及那些一直活在服务端数据库之外的客户端使用习惯。[3][4] 这些边界若能够接受,Incus 看起来就不太像一条高风险 fork,而更像一次治理中心改变之后,仍然保住操作连续性的务实切换。[5][6][7]

来源

  1. Incus 文档总览:项目定义、统一的容器/VM 控制面、镜像支持、REST API,以及从单机到整机架的扩展范围。
  2. Incus 文档《Containers and VMs》:系统容器与应用容器的差异,以及 VM 与系统容器的边界。
  3. Incus 文档《How to install Incus》:软件包通道、incus-admin 组,以及与 VM 相关的软件包和固件要求。
  4. Incus 文档《Migrating from LXD》:lxd-to-incus、数据库与存储的完整迁移、客户端配置注意事项、用户组变更与停机要求。
  5. GitHub API 中 lxc/incus 仓库元数据快照。
  6. Incus v6.23.0 的 GitHub 发布页。
  7. Jake Edge,《Introducing Incus》;LWN.net,2023 年 8 月 7 日。
  8. NOIRLab,《Data Center Fish Eye View (noirlab-racks-155)》;本文配图来源。