日常管理
本教程描述 Barn 0.9.0 发布候选。发布与验收边界见当前状态。
检查与访问
应用状态默认位于 ~/.barn(可由 BARN_HOME 覆盖),这些命令可在任意目录执行。
切换工作目录不会创建另一套 deployment。
Status 默认显示镜像和资源;--verbose 显示架构、加速器、SSH 端口和 PID,
TCG 在普通输出中也明确标记。异常节点不会隐藏其他节点的状态。
barn up 会在选中 VM 启动后,根据完整 applied deployment 重建默认 SSH 别名;因此
局部 up 不会删除未选中节点,可直接运行 ssh meta;如需手工重写,使用
barn ssh-config --install。
plan、up、reload、recreate 依次优先使用 -f、当前目录发现的 Inventory,
两者都没有时才回退到已应用规格;validate 始终需要文件。
再次执行 up 会重试未完成的客机初始化、原位更新旧脚本,健康 VM 无需重启。结果会列出
可选功能限制,JSON/YAML 提供 nodes[].warnings 与 nodes[].repairs。不可用的测试
数据文件系统可能被清空重建,包括持久盘,详见数据盘说明。
停止与启动
start 启动已停止的 VM 并复查运行中 VM 的就绪状态;start 与 restart 都使用已应用
状态,并刷新 SSH 别名,包括重新分配的自动端口。reload 先读取 Inventory、检查配置变化与启动依赖,再停止选中节点
并执行完整的 up 路径。
up、start、restart、reload、recreate 还会刷新运行中 guest 的 Barn hosts
和控制节点 SSH 条目。--no-wait 跳过就绪检查、客机恢复与 guest 刷新,后续运行 up 补齐。
变更 deployment
plan 规划 Catalog 镜像时无需先准备宿主,展示镜像、资源总量、变更原因与磁盘影响;
规划导入的 local-* 镜像还会校验缓存,需要 qemu-img。CPU/内存等定义
变化仍通过 recreate 应用,会替换根盘与非持久数据盘,持久盘保留。若多个节点同时
变化,局部重建受未选节点影响时会提前拒绝,并列出所需节点。
recreate 与 destroy 在终端上展示磁盘范围并要求输入确认词;--force 跳过提示,
无终端时必须显式传入。
| 字段 | 含义 | 操作 |
|---|---|---|
create |
配置有、状态无 | barn up |
recreate |
VM 定义改变 | barn recreate <node> |
missing |
状态有、配置无 | 恢复配置,或显式 destroy |
删除 YAML 永远不会删除 VM。未消费的 Pigsty 变更得到 action:none;命名与
node-admin 字段虽然不以 vm_ 开头,仍会被消费。成功的 recreate 也会刷新完整 SSH
fragment。
并发命令(0.9 候选版)
修改 deployment 的命令会等待其他 Barn 操作释放锁,最长十分钟,同时受命令自身
超时限制。等待信息会显示持锁命令、PID 与开始时间。等待超时返回退出码 4,JSON
为 error: conflict、reason: deployment_busy;持锁操作完成后再重试。
持锁进程退出时锁自动释放;不要通过删除锁文件打断仍在运行的操作。
status、ssh、exec、ssh-config,以及 hosts 读取部署状态的步骤不会排队等待
这把锁,而是读取已写入的状态。其他命令持锁时,status 会附带 note,并且不会
收敛该命令正在进行的状态转换。因此尚在启动中的 VM 可能暂时无法 SSH。
销毁
--delete-persistent 与 --purge 只适用于整体销毁,不能和节点选择器一起使用。
--purge 删除持久盘、密钥和 deployment 状态,但保留镜像。节点级 destroy 会刷新
剩余节点的 SSH fragment,整体 destroy 会移除默认 Barn SSH 集成。宿主网络单独卸载,
仍有 VM 挂接时会拒绝。
barn purge 是一次性实验室的简洁路径,等价于
对已有部署执行 destroy --force --purge。它不接受节点选择器,没有 Deployment 时
幂等成功,保留镜像缓存与
宿主网络,同时不会绕过进程身份、属主和路径完整性检查。
**0.9 候选版:**没有 deployment 时,普通 destroy 直接成功。状态已删除但还有
归属明确的持久盘时,使用 purge;destroy --delete-persistent 或 destroy --purge
会提示改用该命令。旧的 rm 别名已移除,必须写出 purge。
镜像选择、镜像站与缓存清理见镜像仓库;彻底移除宿主状态见 卸载与清理环境。