虛擬機最迷人之處大概就是快照功能了,花個幾秒建個快照,有問題馬上就可以還原,可以省下無數的時間。KVM 同樣也支援快照的功能,不過它有兩種不同的建立方式,Internal Snapshot 與 External Snapshot,這邊先介紹比較簡單的 internal snapshot
internal snapshot 是 libvirt 預設使用的快照模式,用 virsh 指令就可以建立與還原,算是最簡便的方式,不過 internal snapshot 比起 external snapshot 的劣勢在於建立快照的時間較久,且只支援 qcow2 的 image 格式,不過所有操作都可在 virsh 下完成(用 virt-manager 的預設模式也是 internal)因此在系統不是特別複雜或只是稍微想測試個小東西時很適合使用。
建立 internal snapshot
sudo virsh snapshot-create-as \
--domain [VM_Name] \
--name [Snapshot_Name] \
--description "first snapshot" \
--atomic
- –domain:虛擬機的名稱
- –name:snapshot 的命名
- –description:snapshot 的描述
- –atomic:加上 atomic 參數,libvirt 會確保 snapshot 可以建立成功,如果不成功的話,就不會對 images 有所變更,可以讓 images 不至於因為 snapshot 建立失敗而損毀
查看虛擬機的 snapshot 列表
sudo virsh snapshot-list --domain [VM_Name]
# 執行結果:
Name Creation Time State
------------------------------------------------------------
take-1 2020-06-29 21:35:46 +0800 shutoff
take-2 2020-06-29 21:38:34 +0800 shutoff
查看 snapshots 的樹狀關係圖
sudo virsh snapshot-list --domain [VM_Name] --tree
# 執行結果:
take-1
|
+- take-2
查看 snapshots 的相依關係
sudo virsh snapshot-list --domain [VM_Name] --parent
# 執行結果:
Name Creation Time State Parent
------------------------------------------------------------
take-1 2020-06-29 21:35:46 +0800 shutoff (null)
take-2 2020-06-29 21:46:03 +0800 running take-1
# 可以看出 take-2 是以 take-1 為底所建立的
透過 snapshot 還原虛擬機
sudo virsh snapshot-revert --domain [VM_Name] --snapshotname [SnapShot_Name]
刪除 Internal snapshot
sudo virsh snapshot-delete --domain [VM_Name] --snapshotname [SnapShot_Name]
# 執行結果:
Domain snapshot take-2 deleted
# 把 take-2 刪掉