Trước khi cài đặt, config hoặc nâng cấp máy ảo, mình muốn snapshot để nếu khi có sự cố xảy ra trong quá trình triển khai chúng ta có thể trả trạng thái của máy ảo về thời điểm chưa gặp lỗi khi triển khai. KVM (Kernel Virtual Machine) hỗ trợ cả live snapshot và shutdown máy ảo. Snapshot phải chạy trên định dạng đĩa qcow2.
Cú pháp tạo snapshot trong Linux cho KVM.
Lệnh virsh có thể tạo ảnh chụp nhanh từ file XML bằng cách sử dụng virsh snapshot-create hoặc trực tiếp từ một tập hợp các tùy chọn bằng cách sử dụng virsh snapshot-create-as.
virsh snapshot-create-as --domain {VM-NAME} --name "{SNAPSHOT-NAME}"
Where,
- –domain {VM-NAME}: Tên của máy ảo
- –name “{SNAPSHOT-NAME}”:Tên của snapshot
Ví dụ
Hãy list danh sách máy ảo hiện có và mình chọn máy ảo có tên kvm-test1 làm ví dụ.
$ virsh list --all
Id Name State
---------------------------
1 kvm-test1 running
2 kvm-test2 running
3 kvm-test3 running
4 kvm-test4 running
5 kvm-test5 running
Để xem các snapshot hiện có (nếu có) cho máy ảo có tên kvm-test1, hãy nhập:
$ virsh snapshot-list --domain kvm-test1
Hiện tại mình chưa tạo snapshot cho kvm-test1 nên danh sách snapshot của máy ảo này trống rỗng.
Name Creation Time State
-------------------------------
Bây giờ mình sẽ tiến hành quy trình snapshot cho máy ảo kvm-test1. Trước tiên, hãy đảm bảo máy ảp kvm-test1 sử dụng disk qcow2.
virsh dumpxml kvm-test1 | grep -i qemu
Kết quả sẽ có nội dụng như dưới, máy ảo kvm-test1 đang chạy disk với type là qcow2.
<driver name='qemu' type='raw'/>
<driver name='qemu' type='qcow2'/>
Đầu tiên hãy shutdown máy ảo.
virsh shutdown kvm-test1
Sử dụng lệnh dưới để tạo snapshot đầu tiên.
virsh snapshot-create-as --domain kvm-test1 \
--name "14Dec2022_S1" \
--description "My First Snapshpot"
Sau khi snapshot xong, bạn có thể start lại máy ảo để tiếp tục sử dụng.
virsh start kvm-test1
Để xem các bản snapshot đã được chụp thành công, sử dụng lệnh dưới.
$ virsh snapshot-list --domain kvm-test1
Name Creation Time State
-----------------------------------------------------
14Dec2022_S1 2022-12-14 13:57:11 +0000 running
Hoặc để xem thông tin 1 bản snapshot, bạn hãy sử dụng lệnh dưới.
$ virsh snapshot-info --domain kvm-test1 --snapshotname 14Dec2022_S1
Name: 14Dec2022_S1
Domain: kvm-test1
Current: yes
State: running
Location: internal
Parent: -
Children: 0
Descendants: 0
Metadata: yes
Cú pháp restore snapshot cho KVM.
Đầu tiên hãy shutdown máy ảo cần restorage.
virsh shutdown --domain kvm-test1
Sử dụng lệnh dưới để tiến hành restore bản snapshot 14Dec2022_S1 cho máy ảo kvm-test1.
virsh snapshot-revert --domain kvm-test1 --snapshotname 14Dec2022_S1 --running
Cú pháp xoá snapshot cho KVM.
Để xoá snapshot, bạn sử dụng lệnh dưới.
virsh snapshot-delete --domain kvm-test1 --snapshotname 14Dec2022_S1
Cách snapshot trạng thái disk, không phải trạng thái máy ảo cho KVM.
virsh snapshot-create-as --name "snap01" \
--description "RHEL 7.6 snapshot" \
--disk-only \
--domain kvm-test1
Để xoá bản snapshot disk sử dụng command sau.
virsh snapshot-delete --domain kvm-test1 --metadata 14Dec2022
Xử lý 1 số lỗi trong quá trình tạo snapshot.
Trong quá trình tạo snapshot, bạn có thể gặp lỗi như sau:
error: Operation not supported: live snapshot creation is supported only during full system snapshots
Trong trường hợp như vậy, trước tiên hãy liệt kê tất cả các máy ảo.
virsh list
Kiểm tra các disk.
virsh dumpxml kvm-test1 | grep disk
virsh domblklist kvm-test1
Và sau đó chúng ta có thể tạo snapshot nhanh như sau.
$ virsh snapshot-create-as kvm-test1 --name 14Dec2022 --disk-only
Domain snapshot 14Dec2022 created
Để nhận các hướng dẫn tóm tắt về các lệnh snapshot-create-as, hãy sử dụng lệnh dưới.
$ virsh help snapshot-create-as
NAME
snapshot-create-as - Create a snapshot from a set of args
SYNOPSIS
snapshot-create-as <domain> [--name <string>] [--description <string>] [--print-xml] [--no-metadata] [--halt] [--disk-only] [--reuse-external] [--quiesce] [--atomic] [--live] [--memspec <string>] [[--diskspec] <string>]...
DESCRIPTION
Create a snapshot (disk and RAM) from arguments
OPTIONS
[--domain] <string> domain name, id or uuid
--name <string> name of snapshot
--description <string> description of snapshot
--print-xml print XML document rather than create
--no-metadata take snapshot but create no metadata
--halt halt domain after snapshot is created
--disk-only capture disk state but not vm state
--reuse-external reuse any existing external files
--quiesce quiesce guest's file systems
--atomic require atomic operation
--live take a live snapshot
--memspec <string> memory attributes: [file=]name[,snapshot=type]
[--diskspec] <string> disk attributes: disk[,snapshot=type][,driver=type][,stype=type][,file=name]
Như vậy bài viết này đã cho biết cách tạo snapshot bằng lệnh virsh cli. Xem tài liệu tham khảo lệnh virsh tại đây để biết thêm thông tin.