How to use virsh to create snapshots for Debian 11

In this article, I'd like to discuss how to use virsh to create snapshots for a Debian 11 VM created with KVM or WebConsole.


Let's take a look at syntax for available snapshot commands with virsh

$ virsh help | grep snapshot-
    snapshot-create                Create a snapshot from XML
    snapshot-create-as             Create a snapshot from a set of args
    snapshot-current               Get or set the current snapshot
    snapshot-delete                Delete a domain snapshot
    snapshot-dumpxml               Dump XML for a domain snapshot
    snapshot-edit                  edit XML for a snapshot
    snapshot-info                  snapshot information
    snapshot-list                  List snapshots for a domain
    snapshot-parent                Get the name of the parent of a snapshot
    snapshot-revert                Revert a domain to a snapshot


I recommend using snapshot-create-as which allows me to specify --name (name of snapshot), --description (some note for myself)

Here is Debian 11 vm I created earlier.

$ virsh list | egrep 'Name|d11vm'
 Id   Name         State
 21   d11vm        running

To create our first snapshot from d11vm:

$ virsh snapshot-create-as d11vm --name d11snap01 --description "First Snapshot"
Domain snapshot d11snap01 created

I used d11snap01 for the name of snapshot and some note for myself.


To see a list of snapshots from our d11vm:

$ virsh snapshot-list d11vm
 Name        Creation Time               State
 d11snap01   2021-08-22 16:59:32 -0700   running


To see more information on snapshot we're just created:

$ virsh snapshot-info d11vm --snapshotname d11snap01
Name:           d11snap01
Domain:         d11vm
Current:        yes
State:          running
Location:       internal
Parent:         -
Children:       0
Descendants:    0
Metadata:       yes

Did you notice that there is no description in the info? Well, I had to use following command to see the description

$ virsh snapshot-dumpxml d11vm --snapshotname d11snap01 | grep description
  <description>First Snapshot</description>

Now, let's make some changes on our vm (d11vm) then roll-back (revert) to our first snapshot

How about we install "curl" in the vm (d11vm) ?

$ ssh d11vm
$ sudo apt update && sudo apt -y install curl
$ which curl


To rollback (revert) our vm (d11vm) to our first snapshot (d11snap01):

$ virsh snapshot-revert d11vm --snapshotname d11snap01

I did not see any message but we can check by log back into the vm (d11vm) and check if curl is installed.

$ ssh d11vm
$ which curl

That's what we expected. So roll-back (revert) was success!


So how do we delete a snapshot? Well, let's make another snapshot (d11snap02) before we delete one.

$ virsh snapshot-create-as d11vm --name d11snap02 --description "2nd Snapshot"
Domain snapshot d11snap02 created

$ virsh snapshot-list d11vm
 Name        Creation Time               State
 d11snap01   2021-08-22 16:59:32 -0700   running
 d11snap02   2021-08-22 17:17:51 -0700   running

To delete the 2nd snapshot (d11snap02):

$ virsh snapshot-delete d11vm --snapshotname d11snap02
Domain snapshot d11snap02 deleted

$ virsh snapshot-list d11vm
 Name        Creation Time               State
 d11snap01   2021-08-22 16:59:32 -0700   running

That's it! I hope this was useful introduction to virsh snapshot commands.

CategoryVirtualization | CategorySystemAdministration