#!/bin/sh MOUNTDIR=/media/tmp_snapshot loop=/dev/loop1 usage() { echo "Usage : $0 start|stop LV_PATH PART_NUMBER" } ## @brief mount an lvm snapshot # @param $1 lvpath (like /dev/vg0/lv0 ) # @param $2 partition number snap_mount() { # Cleaning old killed mount or failed backup umount $MOUNTDIR/* 2>/dev/null losetup --detach $loop 2>/dev/null # Proc start name=$(basename $1) vgpath=$(dirname $1) snap="${name}-snap" lvcreate --snapshot --size 500M --name $vgpath/$snap $1 losetup --partscan $loop $vgpath/$snap part="${loop}p$2" mkdir -v -p $MOUNTDIR/$name 2>/dev/null mount $part $MOUNTDIR/$name #echo $part mounted on $MOUNTDIR/$name } ##@brief umount a previously created snapshot and removes it snap_umount() { name=$(basename $1) vgpath=$(dirname $1) snap="${name}-snap" umount $MOUNTDIR/$name losetup --detach $loop lvremove -y $vgpath/$snap } case $1 in start) snap_mount $2 $3 ;; stop) snap_umount $2 $3 ;; *) usage exit 1 ;; esac