从 Windows 使用 Barn
Barn 当前的宿主配置与发布二进制覆盖 macOS、Linux 上的 amd64 和 arm64,没有原生 Windows 发行版。Windows 用户可以通过 Linux 宿主操作 Barn;WSL2 和嵌套 Linux VM 是把这层宿主放到 Windows 本机上的候选方式。
本评估复核于 2026-11-08。下述 WSL2 与 Hyper-V 路径仍需完成 Barn 全生命周期实测,才能成为受支持的安装指南。当前平台契约见平台与限制和 internal/platform。
选择 Barn 实际运行的位置
| 宿主环境 | 可复用的部分 | 需要确认的条件 |
|---|---|---|
| 远程 Linux/KVM 宿主 | 现有 Linux Barn 二进制与宿主集成 | SSH 访问、足够资源及常规 Linux 宿主检查 |
| WSL2 发行版 | Linux 二进制、QEMU、OpenSSH 与 Linux 文件系统 | 嵌套 KVM、systemd、bridge helper、私网和 Windows 到客机的访问 |
| Hyper-V 中的完整 Linux VM | 常规 Linux 安装与网络管理器 | 嵌套虚拟化、/dev/kvm、两层 VM 的资源和 Windows 访问路径 |
| 原生 Windows/QEMU | QEMU 的 WHPX 加速器 | 新的 Barn 宿主后端、网络集成、安装器与验收矩阵 |
本地实验可以先评估 WSL2,因为它能复用 Linux 实现。嵌套虚拟化不可用或需要可靠性能时,可直接使用远程 Linux/KVM 宿主。Docker Desktop 会在 Barn 所需的宿主功能外再加一层 VM/容器边界,不纳入这条安装方案。
WSL2 的两种配置作用域
WSL2 全局虚拟机选项位于 Windows 的 %UserProfile%\.wslconfig;各发行版的启动配置,包括 systemd,位于 Linux 内的 /etc/wsl.conf。微软的配置参考说明了这一区别与 nestedVirtualization 选项。写入配置后,仍需在实际机器上确认 KVM 设备可用并能启动客机。
BARN_HOME、缓存镜像和客机磁盘应放在 WSL Linux 文件系统中,例如默认的 ~/.barn。微软的文件系统建议也要求 Linux 工作负载优先使用 Linux 文件系统。外层 WSL 虚拟磁盘承载 Linux 文件系统,内部的 qcow2 则是 Barn 单独管理的客机磁盘。
PowerShell 可以通过 wsl.exe 调用 Linux CLI,但状态、SSH 配置、宿主共享目录和私网桥仍属于这个 Linux 环境。
先验收,再形成安装建议
WSL2 或 Hyper-V Linux 候选环境应依次通过以下检查:
- 确认 Linux init/网络管理器正常,当前用户能访问
/dev/kvm;用 KVM 启动一个小型 QEMU 探针,仅检查设备路径还不够。 - 执行
barn setup --dry-run查看依赖与网络变更,再按 Barn 的 Linux 检查核对已安装的qemu-bridge-helper、发行版包归属、权限和barn0网桥。 - 在可丢弃实验环境中启动同架构客机并达到 SSH 就绪,验证出站流量、宿主访问和两台客机在私网中的互通。
- 测试 Windows 实际使用的访问路径,将管理端点、所需服务和私网路由分别检查。
- 启停客机、重启外层 Linux 环境,验证恢复、持久盘和 Barn 所属网络资源的清理。
Windows 到 WSL 的 localhost 转发或镜像网络模式,本身不能证明嵌套客机子网已有可达路由。测试记录应说明选用的路由或隧道及防火墙要求。完整 Hyper-V Linux VM 的嵌套虚拟化同样依赖外层宿主配置。
Barn 只为跨架构客机和特定镜像兼容情况选择 TCG;普通原生 KVM 启动失败时,不会静默切换到 TCG。因此,没有可用原生加速的 WSL 环境不能按普通 Linux Barn 宿主宣传。
原生 Windows 后端需要独立实现
QEMU 可以通过 WHPX使用硬件加速,Barn 仍需实现加速器周围的宿主契约:
| 领域 | 当前依赖 | Windows 所需工作 |
|---|---|---|
| 平台与打包 | Darwin/Linux 配置与发布目标 | Windows 配置、依赖检测、二进制与安装器 |
| 进程身份与恢复 | POSIX 进程证据和信号 | Windows 进程句柄、身份核验、取消与恢复 |
| 状态与锁 | Unix 文件系统元数据与 flock |
等价的锁、权限和原子状态更新 |
| QMP 与宿主共享 | Unix socket、继承的目录描述符、Virtio-9p | 可用的传输方式与经过验证的共享语义 |
| 私网 | barn0、bridge helper 与 Linux 网络管理器 |
明确管理特权和防火墙归属的 Windows 后端 |
这些实现边界可从 internal/process、internal/lock、internal/hostshare和 internal/network核对。为现有二进制包一层调用脚本无法提供这些契约。
Vagrant 展示了为什么必须明确 provider 的差异:其 Hyper-V 限制说明 Vagrantfile 网络配置会被忽略,由用户选择现有虚拟交换机。Barn 的固定地址实验环境需要先建立自己的网络保证,再把 Windows 加入受支持的宿主矩阵。