过去十年里,搞家庭服务器(homelab)最贵的零件不是CPU就是显卡,内存和硬盘反而是可以随便加的东西。但风水轮流转,今天的情况完全反过来了。也正因为这个变化,我把自己整套自托管方案彻底推倒重来,其中最关键的一个动作,就是把Ubuntu换成了一个效率高得多的替代品。

这个替代品叫Alpine Linux。它把极简主义推到了极致:底层构建于musl、BusyBox和OpenRC之上,而不是我们熟悉的glibc、GNU coreutils和systemd。换句话说,它用一套轻量级的工具链换掉了传统Linux发行版里那些臃肿的必备组件,把通用系统里几乎无法避免的“赘肉”剔得干干净净。

打开网易新闻 查看精彩图片

这种手术刀式的减法带来的结果相当直观。Alpine的基础镜像只有5MB大小,一个安装好的完整系统通常落在50MB到150MB之间。作为对比,Ubuntu Server的镜像大约是3GB,而且安装还需要额外5GB的空余磁盘空间。就算你费心思去精简,能把Ubuntu压到1GB左右就算很不错了。这样算下来,Alpine的体积比Ubuntu小了不止一个数量级。

为什么我的机柜集体叛逃到了Alpine

驱动我做出这个选择的直接原因,是存储成本。我平时要在服务器上测试跑的服务多到数不清,常年保持同时运行十几个容器和虚拟机。Ubuntu最小的容器镜像差不多就是1GB,有些甚至更大。十二个、十五个,甚至二十个容器和虚拟机这样叠加起来,轻轻松松吃掉20GB以上的空间。现在一块1TB的固态硬盘大约230美元,折算下来,光这些容器的存储成本就接近5美元。况且我还没刻意去给Ubuntu做空间优化,如果虚拟机再多一点,这个数字翻一倍也不奇怪。

同样的场景在Alpine身上完全是另一个故事——单个体积只有50MB级别。这意味着20个LXC容器加在一起,也不过占用1GB空间,存储成本折合大约23美分。也就是说,Ubuntu集群20GB的存储开销,在Alpine这里只需要1GB。也许跑三五个容器时这点钱根本微不足道,可一旦服务器上的服务数量进入扩张期,差距就会迅速放大。我用原来容纳12到15个Ubuntu Server容器的存储空间,换成Alpine之后,可以轻松跑上几百个容器。

内存方面的节省同样夸张。一个Alpine基础容器在闲时只消耗不到10MB内存,我的大多数容器启动后甚至低于2MB。而在同样空跑的状态下,Ubuntu Server通常在100MB左右浮动。在我那台拥有32GB内存的主力服务器上,这个数字可能还不算什么,但把它搬到树莓派上就完全不一样了。比如我的Pi Zero 2 W只有512MB内存,对Ubuntu来说捉襟见肘。一旦把操作系统的内存占用砍掉90%,原本只能硬撑几个服务的树莓派,现在可以跑几十个服务。

还有一个容易被忽略的优势:Alpine非常擅长在内存里直接跑。因为轻小,它可以把整个系统加载到RAM中运行,速度极快不说,还避开了廉价的SD卡或者老旧的机械硬盘带来的I/O瓶颈。对于喜欢捡老硬件回来发挥余热的玩家而言(现在新硬件的价格实在是太高了),这相当于把老电脑最大的短板——读写速度——给绕了过去。

说到底,硬件市场变了。曾经不计较几分钱存储和内存差异的时代已经结束。当每一GB空间、每一MB内存都要精打细算时,Ubuntu这类通用发行版自带的厚重包袱,就会变成一笔持续叠加的隐形账单。而Alpine用一套完全不同的底层工具链证明了:你不需要为了兼容性和习惯,绑死在那3GB的镜像上。那个5MB的小东西,完全能撑起一整个机柜的日常运转。