--- /dev/null
+#!/bin/sh
+
+set -e
+set -x
+
+BASE="$1"
+BASEDUP="basedup"
+ORIGIN="origin"
+TOP="top"
+COWFILE="/tmp/cowfile"
+
+[ -e "/dev/mapper/$BASE" ] || exit 1
+
+[ -e "$COWFILE" ] || exit 1
+
+COWDEVICE="$(losetup -sf $COWFILE)"
+
+echo 3 > /proc/sys/vm/drop_caches
+
+# Copy the base's table onto basedup
+dmsetup table $BASE | dmsetup create $BASEDUP
+
+# Prepare COW image
+CHUNK=8
+dd if=/dev/zero of=$COWDEVICE bs=512 count=$CHUNK
+
+# Create a snapshot
+echo 0 $(blockdev --getsize /dev/mapper/$BASEDUP) \
+ snapshot /dev/mapper/$BASEDUP $COWDEVICE p 8 | \
+ dmsetup create $TOP
+
+# Suspend I/O to base
+dmsetup suspend $BASE
+echo "Snapshot as of"
+date
+
+echo 0 $(blockdev --getsize /dev/mapper/$BASEDUP) \
+ snapshot-origin /dev/mapper/$BASEDUP | \
+ dmsetup create $ORIGIN
+
+dmsetup table $ORIGIN | dmsetup load $BASE
+
+dmsetup resume $BASE