English日本語

文章

keelOS: NAS, 无缝集成到keelOS中,simple但是powerful

keelNAS 是我们给 keelOS 做的 NAS:一台从市场一键装好的小虚拟机,管理界面直接长在 keelOS 的网页里,同一个登录。它只做两件事,共享文件和保管文件,但这两件事做得很深:ZFS、快照、SMART 告警、iSCSI、统一账号、升级失败自动回滚。

先用两段话交代 keelOS。keelOS 是给家里或小办公室那一台服务器用的虚拟化系统,基于 FreeBSD 和 bhyve。UEFI 先加载一个约 100 KB 的 keel hypervisor,它保管虚拟机的内存、vCPU 状态和 IOMMU;FreeBSD 宿主跑在它上面,是一个只读镜像,可以升级、重启。

宿主重启时虚拟机只暂停约 25 秒,然后原地继续,不关机,TCP 连接不断。所以在 keelOS 上,NAS、路由器、Windows 桌面各在一台虚拟机里,宿主更新时谁也不用停。这台机器上最需要一直在线的,往往就是 NAS。

为什么要自己做一个 NAS

在 keelOS 上本来就能装飞牛 fnOS 和 TrueNAS,新建虚拟机的向导里都有模板。但拿一个完整的 NAS 系统当虚拟机用,有几处别扭:

  • 两套网页、两套登录。 宿主一个,NAS 一个,用户、权限、审计各管各的。
  • 网络一设错就失联。 NAS 的网页只在局域网地址上,IP 改错了就只能开控制台去救。
  • 功能都按“自己是宿主”设计。 应用商店、Docker、虚拟机,装进虚拟机里都是多余的;内存要求也高,TrueNAS 要 8 GB,在 8 GB 的小主机上就没法用。
  • 升级是一件要操心的事。 NAS 自己升级、自己回滚,宿主帮不上忙。

我们想要的是另一种体验:买一台 8 GB 内存的小主机,一块 SSD 加一两块硬盘,装上 keelOS,点一下就有一个 NAS,在同一个网页里管。先插一两块盘用起来,不够了再加。

别家怎么做

市面上的做法大致两类:要么 NAS 就是宿主,虚拟机是它的附属功能;要么虚拟化平台当宿主,NAS 是一台普通虚拟机,两边互不相识。

方案 NAS 在哪 管理界面 宿主升级时
TrueNAS SCALE、Unraid、飞牛 fnOS 就是宿主,虚拟机和应用是附属功能 一套 NAS 和上面的虚拟机一起停
Proxmox VE 加一台 TrueNAS 虚拟机 一台普通虚拟机,硬盘控制器直通进去 两套,各自登录 虚拟机关机再开,直通设备的虚拟机不能挂起
keelOS 加 keelNAS 一台小虚拟机,由 keelOS 建、管、升级 一套,NAS 是 keelOS 网页里的一个标签页 暂停约 25 秒后继续,共享不断

还有一个值得一提的例子:HexOS 没有自己写存储,只在 TrueNAS 的 API 上做了一个简单的界面,就有人愿意付费。可见“简单、可靠的 ZFS NAS”本身就是需求。另一方面,没有哪个 NAS 系统是为“当虚拟机”设计的,这是 keelNAS 的空位。

表里各家的说法是我们调研时的理解,没有逐条实测。

Simple:只做两件事,全都长在 keelOS 里

只做共享和文件安全。 keelNAS 是一个小的 FreeBSD 15 系统,核心是 Samba、ZFS 和 FreeBSD 的 iSCSI 服务。每一项功能都要能归到“共享服务”或“文件安全”之一,归不进去的不做:没有应用、相册、影音、容器、远程访问。想要这些,飞牛和 TrueNAS 的模板还在,keelNAS 可以把文件共享给它们。

从市场一键装。 keelNAS 是一个签过名的 .kimg 包:清单、ed25519 签名、压缩过的系统盘。keel 只收它信任的密钥签过的包,下载完先核对签名和 SHA-256,没有关掉检查的开关。在网页的“市场”页点下载、点安装,选网络和数据盘大小,就完了。

管理界面就是 keelOS 的一个标签页。 keelNAS 没有自己的登录。keelOS 顶部导航多一个“keelNAS”,里面是概览、存储、共享、用户、iSCSI、网络六个子标签,中英日三种语言。页面上说的是存储、共享和用户,pool、vdev、ACL 这些词不出现。每个子标签只有列表和一个“新建”按钮,新建和编辑都在弹窗里。

一条只属于宿主的内部链路。 keel 建 keelNAS 时给它第二块网卡,接在宿主内部一个没有物理口的网桥上(169.254.77.x)。keel 经这条链路管 keelNAS:局域网地址设错了,在 keelOS 的网页上照样能改回来。也不用输任何密码:建的时候,keel 把密钥、自己的地址和证书指纹写进一块种子盘,keelNAS 起来后拿它登记。

系统和数据分开。 系统盘是包里那块盘的 ZFS 克隆,文件和设置在单独的数据盘上。升级就是换一块系统盘,数据盘不动。

keelNAS 在 keelOS 里的位置:一个入口、一条内部链路
keelNAS 在 keelOS 里的位置:一个入口、一条内部链路

浏览器和 AI 助手只和 keel 打交道;keel 验过令牌、记下审计,再经内部链路去管 keelNAS 和 keelAuth。局域网里的电脑照常经 keelNAS 自己的网卡访问共享。

Powerful:两件事都做得很深

共享服务

  • SMB 共享:哪些用户能读写、哪些只能读,权限可以按组给。
  • iSCSI:给别的机器当块盘用的 LUN。
  • 本地用户和组,或者直接用 keelAuth 的账号(见下)。
  • 局域网地址可以是固定 IP 或 DHCP。

文件安全

  • 底下是 ZFS:校验和自愈。先用一块盘建存储,以后给它加一块做镜像,补上保护。
  • 每个共享各自的快照:手动拍,或者自动拍并设定保留几个。误删、改坏、勒索都能退回去。
  • 页面最上面是“需要处理”:SMART 报的盘健康、巡检结果、降级的存储,keelNAS 标签上直接显示有几条。

账号:接上 keelAuth

keelAuth 是市场里的另一个包,小办公室的账号服务器(基于 Kanidm)。把 keelNAS 接上它,办公室的用户和组就是 NAS 的用户。keel 在中间搬:每 10 秒问一次 keelAuth 的版本号,变了就同步,每 10 分钟再全量推一次。密码一起过去,因为 SMB 要用。断开时由你选:同步过来的用户留作本地用户,还是删掉。

和 keelOS 一体

  • 所有操作都经 keel 的 HTTPS API:受同一套令牌管,看要 host:read,改要管理员;每次改动进 keel 的审计日志。
  • 接上的 AI 助手经 MCP 也能做同样的事。
  • 升级:宿主上有了新版本的包,实例旁边显示“新版本 → 升级”。keel 换系统盘、启动、做健康检查,不健康就自己退回旧版本;旧版本留 7 天,也可以手动退。
  • keelNAS 在 keelOS 上是一台普通的 FreeBSD 虚拟机,宿主重启时和别的虚拟机走同一条路:暂停,然后继续。

实测结果

全部在我们的开发机上测,2026 年 10 月 3 日。SMB 用 Samba 自带的 smbclient(SMB3)验证。

测了什么 结果
从市场下载 1.2 GB 的包,验签名和 SHA-256 不到 20 秒(局域网内的目录)
虚拟机启动到 keelNAS 登记上来 10–18 秒;紧接着经 keel 建存储、用户、共享,smbclient 写入成功
升级(有存储、有共享、接着 keelAuth) 解包 29 秒,这期间不停机;停机 20 秒;地址、用户、共享都在
升级(还没建存储) 19 秒,设置和 Samba 密码都交接过来
在 keelAuth 里改密码(经 keel) 1.3 秒后 SMB 上新密码能用,旧密码被拒
在 keelAuth 里改密码(不经 keel,靠轮询) 5 秒后生效
在 keelAuth 里停用一个用户 9 秒后 SMB 返回 ACCOUNT_DISABLED,启用后又能用
局域网地址故意设错 经内部链路在 keelOS 网页上改回来

手动回退也测了。第一次回退发现 keelnasd 应答以后几秒 smbd 才起来,于是健康检查加了“设置已经落实、没有错误”这一条;改完再升级,完成时 SMB 马上就能用。

还没做完的

  • Windows 客户端没测。 SMB 只用 smbclient 测过,下一步是真的 Windows 电脑打开共享、用 iSCSI 发起程序连 LUN。
  • 宿主重启没有单独测。 FreeBSD 虚拟机跨宿主重启已经通过,但 keelNAS 带着 SMB 连接过一次宿主重启,还没有专门跑过。
  • 没做: NFS、复制到另一台机器、硬盘休眠、UPS。它们排在第二档,有人要再做。
  • 虚拟机备份到 keelNAS。 用户只做一个决定“要不要备份”,其余由 keelOS 和 keelNAS 做:有设计,还没做。
  • 整块盘交给 keelNAS 现在要到它的虚拟机页面上做,keelNAS 标签页里还没有。
  • 混合容量的盘(类似群晖 SHR 的分层 raidz)只在 QEMU 里试过。
  • 装好的 keelOS 主机上(用安装镜像装出来的)还没有从头走过一遍。
  • keelNAS 和 keelOS 一样还在开发中,会和它一起发布。

结语

keelNAS 的 simple,是把不属于 NAS 的东西都拿掉:没有第二套登录,没有第二套网页,没有应用商店,网络设错了也丢不了。它的 powerful,是把剩下的两件事做深:ZFS 和快照管住数据,keelAuth 管住账号,keel 的 API、令牌、审计和 MCP 管住操作,升级坏了自己退回去。

这些都因为它不是“装在虚拟机里的另一个系统”,而是 keelOS 的一部分。底下的 hypervisor 让宿主随时可以重启,上面的 keelNAS 让文件一直有人看着。等 Windows 客户端和虚拟机备份做完,我们再来更新这篇。

← 文章 · 为什么选 keelOS