Adapt snapshot_fns to work with ZFS
This commit is contained in:
parent
6cef6c9b0e
commit
b1462d6c6a
|
@ -1,23 +1,51 @@
|
|||
# vim syntax=sh
|
||||
lvm_snapshot() {
|
||||
STATE_PATH="/vms/state"
|
||||
|
||||
zfs_snapshot() {
|
||||
local volume=$1 snapname=$2
|
||||
sudo lvcreate -sn $volume-$snapname -l 100%ORIGIN vms/$volume
|
||||
sudo zfs snapshot vms/$volume@$snapname
|
||||
sudo zfs clone vms/$volume@$snapname vms/$volume-$snapname
|
||||
sudo zfs promote vms/$volume-$snapname
|
||||
}
|
||||
|
||||
lvm_revert() {
|
||||
zfs_revert() {
|
||||
local volume=$1 snapname=$2
|
||||
sudo lvconvert --merge vms/$volume-$snapname -i 5
|
||||
sudo lvcreate -sn $volume-$snapname -l 100%ORIGIN vms/$volume # keep snapshot around
|
||||
sudo zfs destroy vms/$volume
|
||||
sudo zfs clone vms/$volume-$snapname@$snapname vms/$volume
|
||||
}
|
||||
|
||||
zfs_discard() {
|
||||
local volume=$1 snapname=$2
|
||||
clones="$(sudo zfs get -H clones vms/$volume-$snapname@$snapname | cut -f3)"
|
||||
case $clones in
|
||||
"" )
|
||||
sudo zfs destroy vms/$volume-$snapname@$snapname
|
||||
sudo zfs destroy vms/$volume-$snapname
|
||||
;;
|
||||
vms/$volume )
|
||||
sudo zfs promote vms/$volume
|
||||
sudo zfs destroy vms/$volume-$snapname
|
||||
sudo zfs destroy vms/$volume@$snapname
|
||||
;;
|
||||
* )
|
||||
echo "Can't remove snapshot vms/$volume-$snapname@$snapname since it has clones: $clones"
|
||||
esac
|
||||
}
|
||||
|
||||
virsh_all() {
|
||||
local action=$1
|
||||
shift
|
||||
echo "$@" | xargs -P0 -n1 virsh $action | sed -n '/./p'
|
||||
}
|
||||
|
||||
snapshot_vms() {
|
||||
local snapname=$1 domain snap_arg
|
||||
shift
|
||||
sudo mkdir -p "$STATE_PATH"
|
||||
sudo chown libvirt-qemu:kvm "$STATE_PATH"
|
||||
virsh_all suspend "$@"
|
||||
for domain; do
|
||||
virsh suspend $domain
|
||||
done
|
||||
for domain; do
|
||||
lvm_snapshot $domain $snapname
|
||||
zfs_snapshot $domain $snapname
|
||||
snap_arg=""
|
||||
case $domain in
|
||||
fuel )
|
||||
|
@ -25,47 +53,40 @@ snapshot_vms() {
|
|||
;;
|
||||
compute-* )
|
||||
snap_arg="--diskspec hdb,snapshot=no"
|
||||
lvm_snapshot $domain-ceph $snapname
|
||||
zfs_snapshot $domain-ceph $snapname
|
||||
;;
|
||||
esac
|
||||
virsh snapshot-create-as $domain $domain-$snapname --atomic --memspec /var/lib/libvirt/qemu/save/$domain-$snapname --diskspec hda,snapshot=no $snap_arg
|
||||
done
|
||||
for domain; do
|
||||
virsh resume $domain
|
||||
virsh snapshot-create-as $domain $domain-$snapname --atomic --memspec "$STATE_PATH/$domain-$snapname" --diskspec hda,snapshot=no $snap_arg
|
||||
done
|
||||
virsh_all resume "$@"
|
||||
}
|
||||
|
||||
revert_vms() {
|
||||
local snapname=$1 domain
|
||||
shift
|
||||
virsh_all destroy "$@"
|
||||
for domain; do
|
||||
virsh destroy $domain
|
||||
done
|
||||
for domain; do
|
||||
lvm_revert $domain $snapname
|
||||
zfs_revert $domain $snapname
|
||||
case $domain in
|
||||
compute-* )
|
||||
lvm_revert $domain-ceph $snapname
|
||||
zfs_revert $domain-ceph $snapname
|
||||
;;
|
||||
esac
|
||||
virsh restore /var/lib/libvirt/qemu/save/$domain-$snapname --paused
|
||||
done
|
||||
for domain; do
|
||||
virsh resume $domain
|
||||
virsh restore "$STATE_PATH/$domain-$snapname" --paused
|
||||
done
|
||||
virsh_all resume "$@"
|
||||
}
|
||||
|
||||
discard_snapshots() {
|
||||
local snapname=$1 domain
|
||||
shift
|
||||
for domain; do
|
||||
sudo lvremove -f vms/$domain-$snapname
|
||||
rm -f "$STATE_PATH/$domain-$snapname"
|
||||
zfs_discard $domain $snapname
|
||||
case $domain in
|
||||
compute-* )
|
||||
sudo lvremove -f vms/$domain-ceph-$snapname
|
||||
zfs_discard $domain-ceph $snapname
|
||||
;;
|
||||
esac
|
||||
virsh snapshot-delete $domain $domain-$snapname --metadata
|
||||
sudo rm -f /var/lib/libvirt/qemu/save/$domain-$snapname
|
||||
done
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue