【问题标题】:Bash script to delete and create snapshots with virtualbox使用 virtualbox 删除和创建快照的 Bash 脚本
【发布时间】:2018-05-09 21:54:32
【问题描述】:

我正在尝试编写一个尽可能简单的 bash 脚本,以从“父”虚拟机(称为 peer00)克隆虚拟机。为了克隆这些机器,我首先需要一个快照。

vboxmanage snapshot peer00 delete "MySnapShot"
vboxmanage snapshot peer00 take "MySnapShot"

# for loop to create several machines

现在,如果我在没有 MySnapShot 快照的情况下运行此脚本,我会收到以下错误(显然):

VBoxManage:错误:找不到名为“MySnapShot”的快照 VBoxManage:错误:详细信息:代码 VBOX_E_OBJECT_NOT_FOUND (0x80bb0001),组件 SessionMachine,接口 IMachine,被调用者 nsISupports VBoxManage:错误:上下文:“FindSnapshot(Bstr(a->argv[2]).raw(), pSnapshot.asOutParam())”在文件 VBoxManageSnapshot.cpp 的第 514 行

另一方面,如果我在快照已经存在时运行它,我会得到另一个输出:

0%... 进度状态:NS_ERROR_FAILURE VBoxManage:错误:快照操作失败 VBoxManage:错误:硬盘'/home/pietro/VirtualBox VMs/peer00/Snapshots/{0183ad41-71b6-41bf-af74-38db828b2d82}.vdi'有多个子硬盘(7) VBoxManage:错误:详细信息:代码 NS_ERROR_FAILURE (0x80004005),组件 SessionMachine,接口 IMachine VBoxManage:错误:上下文:“RTEXITCODE handleSnapshot(HandlerArg*)”在文件 VBoxManageSnapshot.cpp 的第 532 行

如何编写一种“if 语句”来检查快照是否已经存在,然后再尝试删除它?此外,为什么我会收到第二个错误?我真的不明白

【问题讨论】:

  • 有一个 --uniquename 参数(支持 Number,Timestamp,Space,Force 值)。检查它的行为可能是值得的。

标签: bash virtualbox


【解决方案1】:

您可以使用 list 子命令检查是否有快照:

vboxmanage snapshot peer00 list |\ grep "MySnapshot" &&\ vboxmanage snapshot peer00 delete "MySnapShot" ||\ echo "No snapshot"

另一种方法是忽略 delete 失败:

vboxmanage snapshot peer00 delete "My Snapshot" ||\ echo "No snapshot"

【讨论】:

    猜你喜欢
    • 2022-09-23
    • 2015-05-05
    • 2019-04-07
    • 1970-01-01
    • 2019-07-21
    • 2011-05-25
    • 1970-01-01
    • 1970-01-01
    • 2020-10-24
    相关资源
    最近更新 更多