-
Notifications
You must be signed in to change notification settings - Fork 0
/
snapshot_revert.sh
72 lines (54 loc) · 2.39 KB
/
snapshot_revert.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#!/bin/bash
date "+%Y%m%d%H%M"
# name of domain, snapshot, and target disk device
thedomain="win10"
snapshotname="win10_bak_`date '+%Y%m%d%H%M'`"
targetdisk="vda"
pool="vmStorage"
# notice path to hda has now changed to snapshot file
echo "--- virsh domblklist $thedomain"
virsh domblklist $thedomain
snapshotname=$(virsh domblklist $thedomain | grep vda | sed -r 's/\s+vda\s+//g')
echo "--- snapshotname : $snapshotname"
# <source> has changed to snapshot file
echo "--- virsh dumpxml $thedomain | grep '<disk' -A5"
virsh dumpxml $thedomain | grep '<disk' -A5
# pull default pool path from xml
pooldir=$(virsh pool-dumpxml $pool | grep -Po "(?<=path\>)[^<]+")
echo "--- contents of default pool dir: $pooldir"
# should see two files starting with $thedomain
# the one named $thedomain.$snapshotname is the snapshot
cd $pooldir
ls -latr $thedomain*
echo "--- sudo qemu-img info $snapshotname -U --backing-chain"
# snapshot points to backing file, which is original disk
#sudo qemu-img info $thedomain.$snapshotname -U --backing-chain
sudo qemu-img info $snapshotname -U --backing-chain
# capture original backing file name so we can revert
backingfile=$(qemu-img info $snapshotname -U | grep -Po 'backing file:\s\K(.*)')
echo "snapshotname: $snapshotname"
echo "backing file: $backingfile"
if [ "$backingfile" == "" ]; then
echo "no backingfile, so do nothing."
else
echo "--- stopping the vm"
# stop VM
virsh destroy $thedomain
# edit hda path back to original qcow2 disk
echo "--- revert xml: virt-xml $thedomain --edit target=$targetdisk --disk path=$backingfile --update"
virt-xml $thedomain --edit target=$targetdisk --disk path=$backingfile --update
# validate that we are now pointing back at original qcow2 disk
echo "-- validate xml: virsh domblklist $thedomain"
virsh domblklist $thedomain
#snapshotfilename=$(echo $snapshotname | sed -n 's/^\(.*\/\)*\(.*\)/\2/p')
snapshotfilename=$(echo $snapshotname | sed -n 's/\(.*\)\/\(.*\)\.\(.*\)$/\3/p')
# delete snapshot metadata
echo "--- delete snapshot metadata : virsh snapshot-delete --metadata $thedomain $snapshotfilename"
virsh snapshot-delete --metadata $thedomain $snapshotfilename
# delete snapshot qcow2 file
#sudo rm $pooldir/$thedomain.$snapshotname
echo "--- delete snapshot qcow2 file : sudo rm $snapshotname"
sudo rm $snapshotname
# start guest domain
#virsh start $thedomain
fi