Add scripts for making snapshots of LVs with dm-snapshot even when those LVs reside...
[invirt/scripts/pv-fixup.git] / cheap-snapshot.sh
1 #!/bin/sh
2
3 set -e
4 set -x
5
6 BASE="$1"
7 BASEDUP="basedup"
8 ORIGIN="origin"
9 TOP="top"
10 COWFILE="/tmp/cowfile"
11
12 [ -e "/dev/mapper/$BASE" ] || exit 1
13
14 [ -e "$COWFILE" ] || exit 1
15
16 COWDEVICE="$(losetup -sf $COWFILE)"
17
18 echo 3 > /proc/sys/vm/drop_caches
19
20 # Copy the base's table onto basedup
21 dmsetup table $BASE | dmsetup create $BASEDUP
22
23 # Prepare COW image
24 CHUNK=8
25 dd if=/dev/zero of=$COWDEVICE bs=512 count=$CHUNK
26
27 # Create a snapshot
28 echo 0 $(blockdev --getsize /dev/mapper/$BASEDUP) \
29         snapshot /dev/mapper/$BASEDUP $COWDEVICE p 8 | \
30         dmsetup create $TOP
31
32 # Suspend I/O to base
33 dmsetup suspend $BASE
34 echo "Snapshot as of"
35 date
36
37 echo 0 $(blockdev --getsize /dev/mapper/$BASEDUP) \
38         snapshot-origin /dev/mapper/$BASEDUP | \
39         dmsetup create $ORIGIN
40
41 dmsetup table $ORIGIN | dmsetup load $BASE
42
43 dmsetup resume $BASE