[VMware] 使用 vim-cmd 在 ESXi 上建立虛擬機器的 snapshot
在上一篇文章:在 Linux 上使用 VMware vSphere CLI 列出 ESXi 上所有的虛擬機器中,
我用了 vmware-cmd 這個指令來列出所有的 vm,
不過其實我想要做的是幫虛擬機器建立 snapshot,移除不要的 snapshot,
但是 vmware-cmd 這個命令並沒有辦法列出所有的 snapshot (殘念)…
在網路上查了一下,原來這件事情應該要用 ESXi 內部的 vim-cmd 來達成~
(參考 VMware knowledge base: Committing snapshots on ESXi host from command line)
1. 使用 ssh 連進 ESXi 機器
像我的 ESXi 機器 IP 是 10.1.116.132 的話,就是用 ssh 直接連進去:
ssh root@10.1.116.132
如果連不進去… 很有可能是 ESXi 上的 SSH service 沒有開~
用 vSphere Client 先連進去把它打開吧,
到 ESXi > Configuration > Properties > SSH > Options,
選成 Start and stop with host,這樣 SSH 就會開了…
如果擔心安全性問題,也可以就手動 Start service,用完後再關掉。
2. 使用 vim-cmd 列出所有的 vm
連進 ESXi 之後,直接執行 vim-cmd 就可以看到下一步的命令提示,
像是執行 vim-cmd vmsvc 的話,就可以再看到更進一步的命令提示:
~ # vim-cmd Commands available under /: hbrsvc/ internalsvc/ solo/ vmsvc/ hostsvc/ proxysvc/ vimsvc/ help ~ # vim-cmd vmsvc Commands available under vmsvc/: acquiremksticket get.snapshotinfo acquireticket get.spaceNeededForConsolidation connect get.summary convert.toTemplate get.tasklist convert.toVm getallvms createdummyvm gethostconstraints destroy login device.connection logout device.connusbdev message device.disconnusbdev power.getstate device.diskadd power.hibernate device.diskaddexisting power.off device.diskremove power.on device.getdevices power.reboot device.toolsSyncSet power.reset device.vmiadd power.shutdown device.vmiremove power.suspend devices.createnic power.suspendResume disconnect queryftcompat get.capability reload get.config setscreenres get.config.cpuidmask snapshot.create get.configoption snapshot.dumpoption get.datastores snapshot.get get.disabledmethods snapshot.remove get.environment snapshot.removeall get.filelayout snapshot.revert get.filelayoutex snapshot.setoption get.guest tools.cancelinstall get.guestheartbeatStatus tools.install get.managedentitystatus tools.upgrade get.networks unregister get.runtime upgrade
當然如果想知道每個命令究竟是在做什麼的話,網路上有很多的 tutorial 或說明,
(像是 VMware ESXi vim-cmd Command: A Quick Tutorial),這邊就不多說了,
想列出所有 vm 的話就是用 vmsvc/getallvms 這個指令:
~ # vim-cmd vmsvc/getallvms Vmid Name File Guest OS Version 1 Windows 7 Enterprise [datastore1] Windows 7 Enterprise/Windows 7 Enterprise.vmx windows7_64Guest vmx-08 10 Wiki [datastore1] Wiki/Wiki.vmx ubuntu64Guest vmx-09 4 Ubuntu Server 12.04 LTS [datastore1] Ubuntu Server 12.04 LTS/Ubuntu Server 12.04 LTS.vmx ubuntu64Guest vmx-08
3. 使用 vim-cmd 列出某個 vm 所有的 snapshot
要列出 snapshot 的話,需要用到 vmsvc/get.snapshotinfo 這個指令,
同時要加上 vm 的 vmid,vmid 從上面步驟 2 的輸出就可以得到了 ,
例如 Wiki 這台機器的 vmid 就是 10,執行後的結果如下:
~ # vim-cmd vmsvc/get.snapshotinfo 10 (vim.vm.SnapshotInfo) { dynamicType = <unset>, currentSnapshot = 'vim.vm.Snapshot:10-snapshot-3', rootSnapshotList = (vim.vm.SnapshotTree) [ (vim.vm.SnapshotTree) { dynamicType = <unset>, snapshot = 'vim.vm.Snapshot:10-snapshot-1', vm = 'vim.VirtualMachine:10', name = "Installed Ubuntu & VMware tools", description = "", id = 1, createTime = "2013-07-01T11:28:35.603163Z", state = "poweredOff", quiesced = false, backupManifest = <unset>, childSnapshotList = (vim.vm.SnapshotTree) [ (vim.vm.SnapshotTree) { dynamicType = <unset>, snapshot = 'vim.vm.Snapshot:10-snapshot-2', vm = 'vim.VirtualMachine:10', name = "Installed MoinMoin", description = "", id = 2, createTime = "2013-07-01T13:23:51.080274Z", state = "poweredOff", quiesced = false, backupManifest = <unset>, childSnapshotList = (vim.vm.SnapshotTree) [ (vim.vm.SnapshotTree) { dynamicType = <unset>, snapshot = 'vim.vm.Snapshot:10-snapshot-3', vm = 'vim.VirtualMachine:10', name = "backup_20130730", description = "", id = 3, createTime = "2013-07-30T22:11:16.798749Z", state = "poweredOn", quiesced = false, backupManifest = <unset>, replaySupported = false, } ], replaySupported = false, } ], replaySupported = false, } ], }
name 的部分就是 snapshot 的名字~
4. 使用 vim-cmd 建立新的 snapshot
建立 snapshot 的話,只要用 vmsvc/snapshot.create 指令就行了,
像是我想要建立一個今天的 snapshot 做備份,將 snapshot 命名為 backup_20140811 的話,
就像下面這樣執行:
~ # vim-cmd vmsvc/snapshot.create 10 backup_20140811
Create Snapshot:
完成後再列出 snapshot 或用 vSphere Client 可以確認新的 snapshot 有建立完成~
利用 vim-cmd 的話,就可以達成更複雜的命令,
像是我想要每天都執行一次備份,但是最多保留兩星期的分量,
就可以用 script 的方式列出 14 天前的 snapshot,先移掉後,再做今天的 snapshot 就行了~
大家可以自行發揮囉~^^