虚拟机包
一台机器是一个文件夹。里面有什么、什么可以安全复制、什么应提交版本控制。
1VMTool 机器不是数据库行或 opaque blob — 而是带 .vm 扩展名的目录,可查看、复制、移动。
dev.vm/
config.json 定义 — 应提交
disk.asif 主磁盘,稀疏
snapshots/
index.json
a1c2/disk.asif
默认机器位于主目录下的库文件夹。将 ONEVM_HOME 指到其他位置 — 如外置 SSD — 整个库随之移动。
config.json
机器定义:来宾类型、引擎、CPU、内存、磁盘、网络、共享文件夹、输入与图形设置。纯 JSON,若要在版本控制中保存机器定义 alongside 项目,提交此文件。
1vm config dev # 打印
1vm get dev # 列出所有 dotted key
定义与磁盘分离,与同事共享机器形态只需几 KB。他们据此 1vm create 并安装自己的来宾。
磁盘
稀疏,随来宾写入增长而非预先分配 — 256 GiB 磁盘若只写了 9 GiB 约占 9 GiB。文件名因引擎而异(两种磁盘格式);1vm du 报告库内真实数字。
快照
snapshots/ 保存树。每个快照是 APFS 克隆,与 live 磁盘共享块直到分叉 — 新快照几乎不占空间,du 区分 allocated、on disk、reclaimable。
复制机器
因为是文件夹,复制可行 — 但优先 1vm clone,同一克隆原语瞬时完成而非复制字节:
1vm clone dev test # 链接克隆,共享块
1vm clone dev test --full # 独立副本
1vm archive dev # 压缩已停止机器;再运行恢复
不要编辑运行中机器的文件
设置变更经 1vm set,校验并在引擎支持处即时应用。在运行中机器下编辑 config.json 是让主机与来宾对机器认知不一致的唯一方式。