我过度使用 VirtualBox 快照(用于 CI 构建器),因此通常在单个 VM 上会有很多快照。我经常会从现有快照中“分叉”出新快照,例如用于更新系统:
base
└── A
└── A1
更新完成后,我只需删除即可用子快照替换父快照A
,VirtualBox 将合并变更集base->A
和A->A1
:
base
└── A1
凉爽的。
但是,有时我想创建一个新的快照子树,起初一些快照的分叉,并且有了自己的生命:
例如
base
└── A
├── A1
└── B
└── B1
现在:这很快就会变得很难看(因为我一直在更新子树),最终我想清理快照树,所以它变成:
base
├── A1
└── B1
不幸的是,VirtualBox 不允许我删除快照,A
并出现以下错误:
Snapshot 'A' of the machine 'vagrantbox' cannot be deleted, because it has 2 child snapshots, which is more than the one snapshot allowed for deletion.
理论上,我认为删除快照不会有什么问题A
:VirtualBox 只需执行两次快照合并(base->A->A1
和base->A->B
)。这可能会增加快照大小,但我很乐意接受(希望通过减少 FS 层来获得更好的性能)
那么:如何才能将快照重新定位到父级,同时保持兄弟快照完好无损?
答案1
您可以基于快照创建完整的 VM 克隆。新 VM 将没有任何快照。唯一的其他方法是取消注册 VM,然后通过使用vboxmanage
磁盘映像并编辑 VM 的 XML 文件自己完成所有工作。