[VMware] 使用 vim-cmd 在 ESXi 上建立虛擬機器的 snapshot

[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 直接連進去:

 

如果連不進去… 很有可能是 ESXi 上的 SSH service 沒有開~

用 vSphere Client 先連進去把它打開吧,

到 ESXi > Configuration > Properties > SSH > Options,

選成 Start and stop with host,這樣 SSH 就會開了…

如果擔心安全性問題,也可以就手動 Start service,用完後再關掉。

2014-08-11 14_16_01-10.1.116.132 - vSphere Client  

 

 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 就行了~

大家可以自行發揮囉~^^

 

(本頁面已被瀏覽過 2,020 次)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料