add support for qcow2 vm images
This commit is contained in:
parent
6c214a2330
commit
8fa36ec049
1 changed files with 44 additions and 1 deletions
|
|
@ -20,6 +20,11 @@ set -euo pipefail
|
||||||
SNAPSHOT="/dev/$VG/backup-$DEVICE"
|
SNAPSHOT="/dev/$VG/backup-$DEVICE"
|
||||||
lvremove -f "$SNAPSHOT" > /dev/null 2>&1 || true
|
lvremove -f "$SNAPSHOT" > /dev/null 2>&1 || true
|
||||||
done
|
done
|
||||||
|
for i in $DISKS_QCOW2; do
|
||||||
|
extract_lvm_qcow2
|
||||||
|
SNAPSHOT="/dev/$VG/backup-$DEVICE"
|
||||||
|
lvremove -f "$SNAPSHOT" > /dev/null 2>&1 || true
|
||||||
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
function cleanup_vmmount {
|
function cleanup_vmmount {
|
||||||
|
|
@ -35,6 +40,16 @@ set -euo pipefail
|
||||||
LV=`lvs --noheadings -o lv_name "$DISK" | tr -d ' '`
|
LV=`lvs --noheadings -o lv_name "$DISK" | tr -d ' '`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function extract_lvm_qcow2 {
|
||||||
|
DISK=`echo $i | awk -F, '{print $1}'`
|
||||||
|
DEVICE=`echo $i | awk -F, '{print $2}'`
|
||||||
|
DEVICEPATH=`df "$DISK" | awk '{print $1}' | tail -n1`
|
||||||
|
MOUNTPOINT=`df "$DISK" | awk '{print $6}' | tail -n1`
|
||||||
|
RELIMAGEPATH="${DISK#$MOUNTPOINT}"
|
||||||
|
VG=`lvs --noheadings -o vg_name "$DEVICEPATH" | tr -d ' '`
|
||||||
|
LV=`lvs --noheadings -o lv_name "$DEVICEPATH" | tr -d ' '`
|
||||||
|
}
|
||||||
|
|
||||||
function backup_vm {
|
function backup_vm {
|
||||||
# get a list of disks
|
# get a list of disks
|
||||||
DISKS=`virsh domblklist "$DOMAIN" --details \
|
DISKS=`virsh domblklist "$DOMAIN" --details \
|
||||||
|
|
@ -42,7 +57,13 @@ set -euo pipefail
|
||||||
| grep ^block \
|
| grep ^block \
|
||||||
| grep -v swap \
|
| grep -v swap \
|
||||||
| awk '{printf "%s,%s ",$4, $3}'`
|
| awk '{printf "%s,%s ",$4, $3}'`
|
||||||
echo "backing up $DOMAIN: $DISKS"
|
DISKS_QCOW2=`virsh domblklist "$DOMAIN" --details \
|
||||||
|
| sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' \
|
||||||
|
| grep ^file \
|
||||||
|
| grep -v swap \
|
||||||
|
| grep '.qcow2' \
|
||||||
|
| awk '{printf "%s,%s ",$4, $3}'`
|
||||||
|
echo "backing up $DOMAIN: $DISKS $DISKS_QCOW2"
|
||||||
|
|
||||||
trap "unfreeze_vm || true; delete_snapshots" INT TERM EXIT
|
trap "unfreeze_vm || true; delete_snapshots" INT TERM EXIT
|
||||||
|
|
||||||
|
|
@ -58,6 +79,12 @@ set -euo pipefail
|
||||||
lvcreate -L16G -s -n "backup-$DEVICE" "$DISK" > /dev/null
|
lvcreate -L16G -s -n "backup-$DEVICE" "$DISK" > /dev/null
|
||||||
done
|
done
|
||||||
|
|
||||||
|
# create snapshots of all volumes containing qcow2 images
|
||||||
|
for i in $DISKS_QCOW2; do
|
||||||
|
extract_lvm_qcow2
|
||||||
|
lvcreate -L16G -s -n "backup-$DEVICE" "$DEVICEPATH" > /dev/null
|
||||||
|
done
|
||||||
|
|
||||||
# dump vm config
|
# dump vm config
|
||||||
virsh dumpxml "$DOMAIN" > "$DOMAIN_MOUNTBASE/config.xml"
|
virsh dumpxml "$DOMAIN" > "$DOMAIN_MOUNTBASE/config.xml"
|
||||||
|
|
||||||
|
|
@ -76,6 +103,21 @@ set -euo pipefail
|
||||||
) 2> /dev/null
|
) 2> /dev/null
|
||||||
done
|
done
|
||||||
|
|
||||||
|
# mount qcow2 disk images backing storage
|
||||||
|
for i in $DISKS_QCOW2; do
|
||||||
|
extract_lvm_qcow2
|
||||||
|
SNAPSHOT="/dev/$VG/backup-$DEVICE"
|
||||||
|
fsck -y "$SNAPSHOT" > /dev/null 2> /dev/null
|
||||||
|
(
|
||||||
|
mkdir "$DOMAIN_MOUNTBASE/IMAGECONTAINER_$DEVICE"
|
||||||
|
# to be able to run fsck inside the vm we have to mount the containers r/w
|
||||||
|
mount -o rw "$SNAPSHOT" "$DOMAIN_MOUNTBASE/IMAGECONTAINER_$DEVICE"
|
||||||
|
|
||||||
|
mkdir "$DOMAIN_MOUNTBASE/$DEVICE"
|
||||||
|
guestmount -m /dev/sda -a "$DOMAIN_MOUNTBASE/IMAGECONTAINER_$DEVICE/$RELIMAGEPATH" "$DOMAIN_MOUNTBASE/$DEVICE"
|
||||||
|
) 2> /dev/null
|
||||||
|
done
|
||||||
|
|
||||||
{% if backup_backend == 'restic' %}
|
{% if backup_backend == 'restic' %}
|
||||||
# restic backend
|
# restic backend
|
||||||
source /etc/backup-client/restic.env
|
source /etc/backup-client/restic.env
|
||||||
|
|
@ -83,6 +125,7 @@ set -euo pipefail
|
||||||
--verbose \
|
--verbose \
|
||||||
--host "$DOMAIN" \
|
--host "$DOMAIN" \
|
||||||
--exclude-file "/etc/backup-client/vms/$DOMAIN/exclude_files" \
|
--exclude-file "/etc/backup-client/vms/$DOMAIN/exclude_files" \
|
||||||
|
--exclude="$DOMAIN_MOUNTBASE/IMAGECONTAINER_*" \
|
||||||
"$DOMAIN_MOUNTBASE"
|
"$DOMAIN_MOUNTBASE"
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue