By default, virsh
creates internal snapshots, which means base data and snapshot data is stored in the same disk file. With external snapshots, base data and snapshot data is stored separately: base disk file is left intact, and all changes are written into a separate snapshot overlay file. For me, this is the way 😄 Unfortunately, external snapshots support in virsh
is limited, virt-manager
GUI can't create / use them, and reverting external snapshots involves manual editing config xml
to change disk file path.
The manual xml
editing part was what irritated me most, so I figured I'd just save VM config with virsh dumpxml
before creating a snapshot, and then restore it with virsh define
if / when I'd need to revert. Then I decided to wrap this and other routine commands needed to work with external snapshots into a script, virsh-snap.sh.
Installation
- Download script:
wget -P ~/.local/bin https://github.com/shvchk/virsh-external-snapshots/raw/main/virsh-snap.sh
- Make it executable:
chmod +x ~/.local/bin/virsh-snap.sh
Usage
- Create snapshot named
snapshot-1
ofvm-42
:Snapshot name is optional, by default current date and time is used as a name, e.g.virsh-snap.sh create vm-42 snapshot-1
2022.07.29_23.55.12
.
- List snapshots of
vm-42
:Note that this is not the same asvirsh-snap.sh list vm-42
virsh snapshot-list
. Snapshots are created without metadata and won't be shown withvirsh snapshot-list
.
- Revert and delete
snapshot-1
ofvm-42
:virsh-snap.sh revert vm-42 snapshot-1
- Revert, but don't delete
snapshot-1
ofvm-42
:This allows to use this snapshot later withvirsh-snap.sh soft-revert vm-42 snapshot-1
unrevert
.
- Undo revert of a
snapshot-1
ofvm-42
, i.e. make it active again:virsh-snap.sh unrevert vm-42 snapshot-1
- Delete snapshot
snapshot-1
ofvm-42
:Might be useful if you change your mind aftervirsh-snap.sh delete vm-42 snapshot-1
soft-revert
.
- Show help:
virsh-snap.sh help
virsh-snap.sh: easy to use external snapshots Usage: virsh-snap.sh <action> <domain> [snapshot name] Actions: -------- create, c Create snapshot If no snapshot name is provided, current date and time is used list, ls, l List snapshots disk Show active disk revert, rev, r Revert snapshot and delete it (same as soft-revert + delete) soft-revert, srev, sr Revert snapshot without deleting it (allows unrevert) unrevert, unrev, ur Unrevert snapshot, i.e. make soft-reverted snapshot active again delete, del, rm Delete snapshot help, h This message Snapshots are created without metadata, so they won't be shown with `virsh snapshot-list`