--- /dev/null
+#!/bin/bash
+# invoked by backup scripts as
+# remountrocp snap $vardir $device $mountpoint
+# remounts $mountpoint readonly
+# copies data to $vardir/snap-mount
+# remounts $mountpoint readwrite
+# remountrocp drop $vardir
+# deletes $vardir/snap-mount
+
+set -e
+snapkind=remountrocp
+: ${lvm_vg:=}
+remountrocp_fs=ext2
+. ${CHIARK_BACKUP_SHAREDIR:-/usr/share/chiark-backup}/snap-common
+
+#---------- clean up anything
+
+vgroup=$lvm_vg
+lvmdropcore
+
+lastsettings="$vardir/remountrocp-settings"
+test ! -f $lastsettings || . $lastsettings
+
+if test "$opmode" = drop; then
+ test -z "$last_mountpoint" || mount -o remount,rw $last_mountpoint
+ rm -f $lastsettings
+ echo 'remountrocp snap dropped'
+ exit 0
+fi
+
+#---------- create snapshot
+
+if [ -z "$lvm_lvsize_opts" ]; then
+ lvmextentscore1
+
+ df_out="$(really df -P --block-size=$extsize $mountpoint)"
+ extents2="$(printf "%s" "$df_out" | awk '/^\// {print $3}')"
+ extents2=$(( ($extents2*150+99)/100 + 4 ))
+
+ lvmextentscore2
+fi
+
+lvmcreatecore1
+
+cat >$lastsettings.new <<END
+last_mountpoint=$mountpoint
+END
+mv -f $lastsettings.new $lastsettings
+
+lvcreate \
+ $lvm_lvtools_opts \
+ $lvm_lvsize_opts \
+ -n $lvm_lv \
+ $lvm_lvcreate_opts \
+ $vgroup \
+ $lvm_lvcreate_args
+
+mkfs -t $remountrocp_fs "$lvpath"
+mkdir -- "$snmnt"
+mount -t $remountrocp_fs $lvm_mount_opts "$lvpath" "$snmnt"
+
+mount -o remount,ro "$mountpoint"
+trap "mount -o remount,rw $mountpoint; exit 12" 0
+cp -a -- "$mountpoint/." "$snmnt/."
+mount -o remount,rw "$mountpoint"
+trap '' 0
+mount -o remount,ro "$lvpath"
+
+echo 'remountrocp snap activated'