如何使用 virsh 覆盖现有快照?
如果我尝试使用现有名称,则会收到此错误消息:
> virsh -c qemu+tls://virtserv5/system snapshot-create-as myvm --name snapshot-foo
error: internal error: unexpected domain snapshot snapshot-foo already exists
答案1
扩展@anon 对问题的回答和@slm 的评论。
如何使用 virsh 覆盖现有快照?
对于这个问题,我能想到两个解决方案。
- 删除旧快照并用新快照“覆盖”。这基本上意味着制作当前状态的新快照。由于您无论如何都打算覆盖它,我认为保留旧快照没有必要或没有用处,除了节省步骤,如 Anon 所述。步骤如下。
- 到 ”重命名/克隆“快照。
为了第一个选项(删除),如果您使用内部快照,您可以尝试:
sudo virsh snapshot-delete $VM_ID $SNAPSHOT_NAME
sudo virsh snapshot-create-as $VM_ID $SNAPSHOT_NAME
从记录来看,这似乎与覆盖相差无几,您甚至可以使用&&
. 不知道要求覆盖的原因(指定它可能有助于获得更好的答案或替代方案)。
为了第二个选项(重命名),你应该记住这手册页对于 virsh 警告设置如下:
如果指定了 --rename,则编辑可以更改快照名称。如果指定了 --clone,则更改快照名称将创建快照元数据的克隆。如果两者都未指定,则编辑不得更改快照名称。请注意,更改快照名称必须小心进行,因为某些快照的内容(例如单个 qcow2 文件中的内部快照)只能从原始名称访问。
你可以尝试:
snapshot-edit domain [snapshotname] [--current] {[--rename] | [--clone]}
另一方面,如果您正在使用外部快照,您也可以尝试--reuse-external
选项snapshot-create-as
。请记住有关现有文件的警告。如果没有更多关于您使用该功能的原因的信息,我不确定它是否会按您的意愿工作,因此,以下是手册页中有关此选项的信息:
如果指定了 --reuse-external,并且域 XML 或 diskspec 选项请求以现有文件为目标的外部快照,则目标必须存在并且使用正确的格式和元数据预先创建。然后重新使用该文件;否则,拒绝快照以避免丢失现有文件的内容。
任何状况之下:我建议你克隆虚拟机并在副本中玩,不要在生产系统上尝试。
答案2
如何使用 virsh 覆盖现有快照?
你可能不能。
您所要求的与虚拟机快照的实现语义不匹配。这是因为快照通常具有某种父级和一组与父级不同的内容。如果您要用一个快照替换另一个快照,如果它们的父级不同会发生什么?如果您要替换的快照更改了后代快照中使用的块,该怎么办?这些事情已经通过组合不同的操作来处理。
实现您所描述的内容的典型方法是删除旧快照并创建一个新的快照,该快照恰好与已删除的快照具有相同的名称。