Skip to content

Instantly share code, notes, and snippets.

@skl
Created January 31, 2013 01:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save skl/4679224 to your computer and use it in GitHub Desktop.
Save skl/4679224 to your computer and use it in GitHub Desktop.
Basic LVM snapshot to file for Xen domU.
#!/bin/bash
[ $# -ne 2 ] && { echo "Usage: ./snap <lvm group> <domU>"; exit 1; }
##
# Export an LVM device to file
#
# @param string $1 LVM_GROUP The logical volume manager group (e.g. vg0)
# @param string $2 DOMU The guest domain to snap (e.g. w01)
#
function snaplvm() {
local LVM_GROUP=$1
local DOMU=$2
DEVICE=/dev/${LVM_GROUP}/${DOMU}-disk
SNAP_DEVICE=/dev/${LVM_GROUP}/${DOMU}-snap
SNAP_FILE=${HOME}/${DOMU}.snap
# Test block device exists
[ -b ${DEVICE} ] || {
echo "${DEVICE} does not exist!"
return 1
}
# Delete old snap
[ -f ${SNAP_FILE} ] && {
read -p "Delete previous snapshot? [y/n]" REPLY
[[ $REPLY == "y" ]] && rm ${SNAP_FILE} || {
echo "Aborting..."
return 1
}
}
echo "Creating snapshot volume..."
lvcreate -L 1G -s -n ${DOMU}-snap ${DEVICE} && {
echo "Taking snapshot of ${DEVICE}..."
dd if=${SNAP_DEVICE} of=${SNAP_FILE} && {
echo "Deleting snapshot volume..."
lvremove ${SNAP_DEVICE}
echo "Completed ${SNAP_FILE}"
return 0
}
}
}
snaplvm $@ && echo "Success!" || echo "Failed!"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment