52 lines
1.2 KiB
Bash
Executable File
52 lines
1.2 KiB
Bash
Executable File
#!/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
|