Barn 0.9.3 变更
5 分钟阅读
本页记录 Barn 0.9.3(2026-10-31)中已经发布的用户可见变更。路径、共享与工作流调整始于源码提交 27f17bb,其余恢复与资源变更在后续提交中完成。核对其他构建时请使用 barn version。
升级摘要与完整双语说明见 Barn 0.9.3 发布说明。
资源调整与中断恢复
修改 vm_cpu 或 vm_mem 后执行 barn resize [node...]。运行中的虚拟机有预留容量且 QEMU 后端支持时,增加的资源会热插拔;减少资源、旧虚拟机或不支持的后端会自动停机再启动。虚拟机身份、磁盘与 SSH 密钥保持不变。resize 会拒绝镜像、磁盘、网络、共享目录、创建、删除和部署级变更,应根据 next: 字段使用 recreate、up、destroy 或完整的选择操作。
Linux 与 macOS 的生命周期、持久盘及替换操作会记录转换状态。进程被中断或收到 SIGINT、SIGTERM 后,下一次生命周期命令可以继续恢复;取消的命令返回结构化的 cancelled 结果。在 macOS 上,barn mac up --no-wait 在虚拟机进程启动后返回,首次启动的 SSH 与 sudo 初始化可能仍在进行;请再次执行 barn mac up NAME 等待就绪。
路径
barn init 与 setup 支持通过目录符号链接工作,init -o ./lab/config/barn.yml 还会自动创建缺失的父目录。覆盖已有文件仍需 --force,写入不会跟随或替换输出文件本身的符号链接。
用户传入的路径支持常见开发目录布局:
| 输入 | 解析方式 |
|---|---|
BARN_HOME |
支持相对路径、~/ 与目录符号链接,也可以是当前工作目录 |
清单与 provision --script |
支持指向普通文件的符号链接;每个文件仍有 4 MiB 上限 |
Linux vm_shares.host |
相对于清单真实文件所在目录,也接受绝对路径、~/ 与目录符号链接 |
本地镜像仓库与 image import |
支持相对路径、~/ 与符号链接输入 |
catalogexport 输出 |
支持相对路径、~/、父目录符号链接及自动创建父目录;目标文件须不存在 |
BARN_MAC_RUNNER 与本地 socket_vmnet 归档 |
支持相对路径与 ~/;归档输入可为符号链接,仍需通过摘要校验 |
命令行相对路径以当前工作目录为基准,相对 BARN_HOME 也遵循这条规则。跨目录操作同一部署时,请使用绝对 BARN_HOME。Barn 仍拒绝将 / 或用户主目录作为数据根目录,并校验受管状态的属主与结构。归当前用户所有的 ~/.ssh 目录可以通过目录符号链接访问;若 ~/.ssh/config 本身是链接,仍需手动添加 Include。
共享目录与挂载路径
Linux 客机使用 QEMU Virtio-9p,现已支持 macOS 与 Linux 宿主,但 QEMU 和客机内核均须支持 9p。原生 macOS 客机继续通过 barn mac --share 使用 VirtioFS。
- Linux 共享源按当前用户的实际文件系统权限访问,可归其他用户所有、与其他源重叠,或由多个客机同时读写。并发写入由用户协调,与多个宿主进程共用目录相同。
- 宿主源路径支持空格、Unicode 与逗号。Linux 客机挂载路径会自动规范化,并正确转义 Shell 命令与
fstab中的空格、Unicode 和 Shell 标点。 - Mac 共享名称支持空格与中文,须为 1–255 字节的有效 UTF-8,不能是
.、..,也不能含/或 ASCII 控制字符;共享源支持目录符号链接。 - 移除 8 个共享的固定上限,实际仍受后端设备与宿主资源约束。Linux 共享源不能与
BARN_HOME重叠,客机挂载目标不能与其他目标、系统目录、数据盘挂载点或客机 SSH 目录重叠。
Linux 共享示例见存储与访问,原生 macOS 共享见 Mac 命令。Barn 不会为了让共享可写而修改宿主文件属主。
仅应用选定节点的变更
显式选择节点执行 plan、up、reload 或 recreate 时,其余节点保留已应用定义,即使当前清单已修改或省略它们。未创建且未选中的节点不要求解析镜像,因此可以一次编辑多个节点,再分批应用:
整份清单仍须通过语法解析。与已应用节点的地址、别名、控制节点角色或部署公共设置发生冲突时,Barn 会在停机删盘前报错。不传选择器时仍检查整份清单,删除 YAML 条目不会自动删除虚拟机。操作流程见日常管理。
生成模板时选择镜像
barn init [模板] --image <引用> 会把显式的 vm_image 写入 all.vars,让所有生成节点继承该镜像。准备生成模板时,barn setup [模板] --image <引用> 也采用同样的行为。引用可以是镜像别名、频道或版本选择器;该参数不会下载镜像。通过 -f 指定或自动发现的已有清单不会被此参数改写。
镜像与开发工作流限制
| 项目 | 新行为 |
|---|---|
| Linux 节点数 | 不再另设 20 节点上限;节点须使用部署 /24 中互不重复的可用地址,且宿主资源充足 |
| 外部清单主机 | vm_skip: true 可使用主机名或 IPv6 键;托管虚拟机仍使用 IPv4,清单至少保留一个托管节点 |
| Linux 容量字符串 | 单位大小写不敏感;K/M/G/T 与 KiB/MiB/GiB/TiB 为二进制,KB/MB/GB/TB 仍为十进制 |
| Provisioning | --parallel 接受正整数,最多启动与所选节点数相同的工作线程;--timeout 接受任意正时长,移除原有 4 并发与 24 小时上限 |
| 镜像大小 | 本地导入及声明了大小的目录产物不再限于 8 GiB;未声明大小的旧协议下载仍保留 8 GiB 边界 |
| 镜像导入 | 源文件可任意命名;新缓存使用 local/<sha256>.qcow2,同名不同内容可共存,相同内容复用缓存 |
| 本地别名 | 移除 256 个别名上限;注册表元数据超过 1 MiB 时在写入前报错,重新导入已有别名时保留原缓存路径 |
| 本地仓库 | 支持相对根目录、目录链接与共享可写目录,repo.yaml 可以是指向普通文件的符号链接 |
| Mac 日志 | --lines 接受任意正整数,不再按 1 MiB 或 10000 行静默截断请求的日志 |
| 备用端口 | 按 首选端口 + n × 10000 尝试至 65535,不再仅尝试前五个候选值 |
Provisioning 仍默认串行、超时一小时,每个节点分别最多捕获 1 MiB 的 stdout 与 stderr。这些用户参数与内部虚拟机启动调度并发是不同的设置。镜像摘要、声明大小、qcow2 结构、持久盘兼容性及进程身份仍需通过校验;贡献者镜像流水线也保留自身的配方边界。