Docs · 参考

虚拟机包

一台机器是一个文件夹。里面有什么、什么可以安全复制、什么应提交版本控制。

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 是让主机与来宾对机器认知不一致的唯一方式。