[VirtualBox] 使用 VirtualBox 命令列建立虛擬機器的 snapshot
平常建立 VirtualBox VM 的快照 (snapshot) 通常是透過 UI 來進行,簡單方便,
不過偶爾會有沒辦法使用遠端桌面連回 Linux 的狀況,
這時候就只能用 VirtualBox 的命令列模式來操作了~
以今天的例子來說,因為我已經將機器的環境設定好了,
想要建立一個快照來保存環境~
1. 查一下 VBoxManage 的使用說明
VirtualBox 的命令列模式主要使用的程式是 VBoxManage,
如果是用 RPM/yum 裝起來的話,應該都會在預設路徑中找得到,
直接執行 VBoxManage 就可以看到指令的說明,
或是也可以直接參閱 VBoxManage 的網頁說明~
testuser@localhost ~ $ VBoxManage Oracle VM VirtualBox Command Line Management Interface Version 4.3.14 (C) 2005-2014 Oracle Corporation All rights reserved. Usage: VBoxManage [<general option>] <command> General Options: [-v|--version] print version number and exit [-q|--nologo] suppress the logo [--settingspw <pw>] provide the settings password [--settingspwfile <file>] provide a file containing the settings password Commands: list [--long|-l] vms|runningvms|ostypes|hostdvds|hostfloppies| intnets|bridgedifs|hostonlyifs|natnets|dhcpservers| hostinfo|hostcpuids|hddbackends|hdds|dvds|floppies| usbhost|usbfilters|systemproperties|extpacks| groups|webcams ........
跟 snapshot 有關的指令就是叫 snapshot:
snapshot <uuid|vmname> take <name> [--description <desc>] [--live] | delete <uuid|snapname> | restore <uuid|snapname> | restorecurrent | edit <uuid|snapname>|--current [--name <name>] [--description <desc>] | list [--details|--machinereadable] showvminfo <uuid|snapname>
2. 列出目前所有的虛擬機器
用命令列模式一個比較麻煩的地方就是要給虛擬機器的名稱或 UUID,
而不像 UI 模式直接選了虛擬機器操作就好了…
因此常常需要列出目前所有的虛擬機器名稱,方便複製下來後使用~
用 VBoxManage list vms 就能列出目前所有的 VM 了:
testuser@localhost ~ $ VBoxManage list vms "CentOS_7" {9d165780-30e2-42d7-87e0-c67b01699bf6} "VirtualBox Build CentOS 5.4" {f20e59e6-95ca-4020-bbe3-04afdbbd00ea} "VirtualBox Build CentOS 6.2" {3d7dd42e-f8a3-47a7-b77d-18d6b5e90bde} "VirtualBox Build CentOS 7.0" {c8b3765e-6246-4847-a7fa-931de397917d}
像我想要操作的虛擬機器是 CentOS_7 這台,
所以之後要指定 VM 的部分可以用 CentOS_7,或是它的 UUID {9d165780-30e2-42d7-87e0-c67b01699bf6} 來表示~
用 UUID 表示法的話,有沒有加前後的大括號 {} 都可以~
3. 列出目前所有的 snapshot
執行一下 VBoxManage snapshot <VM> list,就可以列出該 VM 目前的 snapshot 了,
以本例來說只有 “Just installed” 一個:
testuser@localhost ~ $ VBoxManage snapshot "CentOS_7" list Name: Just installed (UUID: c5d6369b-523b-49f0-b8aa-464f8d601702) *
如果使用 –machinereadable 的參數的話,
可以秀出比較容易 parse 的輸出結果,方便作自動化處理~
testuser@localhost ~ $ VBoxManage snapshot "CentOS_7" list --machinereadable SnapshotName="Just installed" SnapshotUUID="c5d6369b-523b-49f0-b8aa-464f8d601702" CurrentSnapshotName="Just installed" CurrentSnapshotUUID="c5d6369b-523b-49f0-b8aa-464f8d601702" CurrentSnapshotNode="SnapshotName"
4. 建立新的 snapshot
使用 VBoxManage snapshot <VM> take <snapshot name> 就能建立新的 snapshot~
也可以在開機的狀況下,多加上 –live 的選項,
不過我通常是建立關機時的 snapshot,製作速度會比開機狀態下快非常多,
而且使用的磁碟空間較小 (因為不用存開機的狀態,例如 RAM 的資料)~
testuser@localhost ~ $ VBoxManage snapshot "CentOS_7" take "Build env ready" 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
以上面關機狀態下建立 snapshot 的例子來說,大約一到兩秒就可以建好 snapshot 了~
可以再用 VBoxManage snapshot <VM> list 的指令確認 snapshot 確實有被建立起來了:
testuser@localhost ~ $ VBoxManage snapshot "CentOS_7" list Name: Just installed (UUID: c5d6369b-523b-49f0-b8aa-464f8d601702) Name: Build env ready (UUID: 2e6d6c90-53e4-4abc-93c1-7e8a161e615c) *
5. 還原至 snapshot 的狀態
若是要還原至之前建立的 snapshot 狀態,用 VBoxManage snapshot <VM> restore <snapshot name> 就可以了,
這邊的 snapshot name 也同樣可以用名字或是它的 UUID:
testuser@localhost ~ $ VBoxManage snapshot "CentOS_7" restore 2e6d6c90-53e4-4abc-93c1-7e8a161e615c Restoring snapshot 2e6d6c90-53e4-4abc-93c1-7e8a161e615c 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
以上就是簡單的使用 VBoxManage 指令,來做虛擬機器的 snapshot 建立與回復囉~^^
//
//