跳转到内容

该用虚拟机还是容器

在 NAS 上跑一个额外的服务时,先决定用哪种方式。选错了不是不能用,而是会一直别扭。

本质差别

容器共用 NAS 的操作系统内核,只打包应用和它的依赖。启动以秒计,内存开销通常几十到几百 MB。

虚拟机模拟一整台计算机,跑自己完整的操作系统。启动要一两分钟,内存按分配量实打实占用,还要额外划一块磁盘空间。

怎么选

需求选择理由
跑一个 Linux 服务(笔记、相册、下载)容器有现成镜像,开销小
需要跑 Windows 软件虚拟机容器做不到
需要完整的桌面环境虚拟机
想试试别的 Linux 发行版虚拟机内核不同
需要严格隔离(跑不太信任的东西)虚拟机隔离更彻底
软路由虚拟机需要独占网卡和内核网络栈
需要直通显卡或 USB 设备虚拟机直通是虚拟化的能力

一句话版本:能用容器就用容器,只有容器做不到时才上虚拟机。

虚拟机的真实成本

决定跑虚拟机之前,把这些算进去:

  • 内存是硬成本。 分配给虚拟机的内存,NAS 本身就用不到了。一个 Windows 虚拟机通常要 4 GB 起。
  • CPU 要分核心。 虚拟机满负载时会和 NAS 的其他服务抢资源,影视转码可能因此卡顿。
  • 磁盘空间。 虚拟磁盘文件动辄几十 GB,而且随使用增长。
  • 它也需要维护。 虚拟机里的系统同样要打补丁、要备份。很多人跑起来就忘了,半年后它成了一个没人管、还开着端口的隐患。
  • 写入模式不友好。 虚拟磁盘是随机写入密集的大文件,放在 Btrfs 的写时复制目录上容易产生碎片,见文件系统选择

什么时候干脆别在 NAS 上跑

  • 需要长期稳定运行的软路由:跑在 NAS 里意味着 NAS 重启时全家断网。独立设备更省心。
  • 高负载的游戏服务器或编译任务:会持续抢占 NAS 资源,影响它的本职工作。
  • 只是偶尔用一次的 Windows 软件:用你自己的电脑。

检查结果

明确写下:这个需求为什么容器满足不了、虚拟机要分配多少内存和磁盘、它由谁维护和备份。三个问题都有答案再动手。

延伸阅读

fnOS 非官方中文使用指南,与飞牛官方无隶属关系。