On Mon, 15 May 2006, Alan Brown wrote:
Has anyone used LVM/EVMS snapshots to get a stable image to backup?
If so, how do you do it?
I do it under CentOS-4 with xfs and ext3 filesystems using the
ClientRunBefore and ClientRunAfter directives in the job file. I mount
the snapshots under /mnt and have those mountpoints in the fileset. It
would be nice to be able to strip a path-prefix and and I believe that
this is on the list of features to be implimented.
For creating and deleting the snapshots I use a script that I install
in /usr/local/sbin on the clients. It could certainly be improved and
may have some things specific to RedHat-deerived distros. I am
appending my script. Comments are welcome.
In job directive:
# Create a snapshot with a 4G for COW space
ClientRunBeforeJob = \
"/usr/local/sbin/snapshot -L 4G /export/home /mnt/home"
FileSet = "mnt_home"
# Delete the snapshot
ClientRunAfterJob = \
"/usr/local/sbin/snapshot -d /mnt/home"
On the client as /usr/local/sbin/snapshot:
#!/bin/bash
# Create or delete a snapshot using LVM
# The logical-volume name has SS_ prependend to the target.
# e.g. A snapshot of /dev/vg0/home is created as /dev/vg0/SS_home
set -o errexit
PATH="/sbin:/bin:/usr/sbin:/usr/bin"
function GetLogVol()
{
local LOGVOL
# Determine the logical-volume path from the mount point
LOGVOL=$(mount | awk -v p=$1 '$3 == p {print $1}')
if [[ -z "$LOGVOL" ]]; then
echo "${0}: $1 not a mount point" 1>&2
exit 1
fi
if [[ $(dirname $LOGVOL) == "/dev/mapper" ]]; then
LOGVOL=$( find /dev -lname $LOGVOL )
fi
# Check that this is a LV
if ! lvs $LOGVOL > /dev/null 2>&1; then
echo "${0}: $LOGVOL is not a logical volume" 1>&2
exit 1
fi
echo "$LOGVOL"
}
# Default snapshot size of 2GB
SSSZ="2G"
CREATE_SNAP=true
if getopts L:d option
then
case $option in
L) SSSZ="$OPTARG"
shift 2
;;
d) CREATE_SNAP=false
;;
?) exit 1
;;
esac
fi
if (( $# != 2 )); then
echo "Usage: $0 [-L size] FileSystemPath SnapshotPath" 1>&2
echo "___or: $0 -d SnapshotPath" 1>&2
exit 1
fi
SSPATH="$2"
if $CREATE_SNAP ; then
FSPATH="$1"
FSLV=$(GetLogVol $FSPATH)
FSTY=$(mount | awk -v p=$FSPATH '$3 == p {print $5}')
[[ "$FSTY" == xfs ]] && FSTY="xfs -o nouuid"
SSNM=SS_$(basename $FSLV)
SSLV=$(dirname $FSLV)/$SSNM
modprobe dm-snapshot
lvcreate --size "$SSSZ" --snapshot --name $SSNM $FSLV
mkdir -p $SSPATH
mount -v -r -t $FSTY $SSLV $SSPATH
else
SSLV=$(GetLogVol $SSPATH)
# Check that this LV is a snapshot
SSLV_ATTR=$(lvs --noheadings -o lv_attr $SSLV)
if [[ "$SSLV_ATTR" != *s* ]]; then
echo "${0}: $SSPATH is not a snapshot" 1>&2
exit 1
fi
umount -v $SSPATH
lvremove -f $SSLV
rmdir --ignore-fail-on-non-empty $SSPATH
fi
-------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
Bacula-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bacula-users