想把多项服务塞进同一台家用服务器时,直觉会把你推向虚拟机。建几个虚拟机分分工,一切相安无事——至少表面看是这样。直到某天你发现,闲置的虚拟机仍在默默啃掉主机的内存和CPU周期,就像房间里一堆没有关的灯。于是我把大部分服务迁移到了Linux容器(LXC),服务器才真正松绑。
这并不是说容器能包办一切,但跑起Immich、Jellyfin这类自托管服务时,它们大概率已经舒舒服服待在一个LXC里,而不是一台笨重的虚拟机。LXC之所以在家用场景里开始抢虚拟机的地盘,和它那句“近乎原生性能”有很大的关系。
先弄清两种技术栈在底层做了什么。虚拟机完整地虚拟出一套硬件,客户操作系统得自己启动一个内核,堆叠在虚拟硬件上运行。你给Home Assistant配置一台虚拟机,基本等于在软件里又造了一台物理机,它要跑完整的初始化系统、后台服务,还要维护自己的内核。而LXC走的是另一条路:它直接利用宿主机的内核,为每个实例隔离出一个用户空间。没有客体内核,没有模拟芯片组,没有一整套启动流程。它像是把一栋楼隔成几个房间,而不是在楼里又盖了几栋小楼。
这也解释了为什么LXC被相当一部分玩家视为家庭实验室的更好选择。当不再需要为每个实例重复加载一套操作系统,资源开销自然断崖式下降。KVM虚拟机技术确实已经非常精进,但它依然会持续占用相当的系统资源。在一台Linux宿主机上,LXC几乎能以裸机性能运行,反过来让宿主能把省下的CPU周期和内存用来多跑几个服务——这对于喜欢在一台机器上东拼西凑自建环境的玩家来说,是一个无法忽视的甜头。
我还是在Proxmox上试过跑Android虚拟机的。选对操作系统后,Proxmox虚拟化Android的完成度其实挺让人意外。但回头看看资源占用,我才真正意识到那些长期被虚拟机咬住不放的主机资源有多可惜。哪怕服务几乎空转,一台满载初始化进程和后台任务的虚拟机依然在宿主机里标出自己的地盘,而同样跑着相同服务的LXC,安静闲置时几乎不向宿主索取什么。不引导一个完整的操作系统,让同时维护多个服务实例这件事不再充满浪费感。
容器与虚拟机的边界也值得再明确一下。常说的Docker是一种容器形态,它从镜像运行服务,天然可重建、可替换、可丢弃。LXC却不跑在任何类似Docker的软件之上,而是直接依托系统本身。这种极简骨架意味着每个服务实例共享同一台主机的同时,各自的空间依然保持隔离。两者都算容器,但LXC是更接近裸系统级别的那一个,它省掉的那层软件栈,恰好把性能开销压到最低。
把大部分服务从虚拟机挪进LXC之后,服务器并没有获得什么魔法般的加成,但原本被虚拟机群体啃噬的那部分资源被解放了。我可以让更多服务同时运行,而不用被迫在管理界面里纠结该关掉哪一个虚拟机来腾出空间。正是这种“同一台宿主,能装进更多应用”的体感转变,让我头也不回地走上了容器的路线。
热门跟贴