diff options
author | Michael Brown | 2010-09-22 17:14:09 +0200 |
---|---|---|
committer | Michael Brown | 2010-09-22 17:26:18 +0200 |
commit | 45d066d4cd8bbb28aff7ce47202c7b494eedd5bd (patch) | |
tree | 9dcb68272d13683cf64a04df86af8e6cc4797f3e /contrib | |
parent | [contrib] Add contrib/vm, containing utilities from old contrib/bochs (diff) | |
download | ipxe-45d066d4cd8bbb28aff7ce47202c7b494eedd5bd.tar.gz ipxe-45d066d4cd8bbb28aff7ce47202c7b494eedd5bd.tar.xz ipxe-45d066d4cd8bbb28aff7ce47202c7b494eedd5bd.zip |
[contrib] Add script to easily create copy-on-write SAN images
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'contrib')
-rwxr-xr-x | contrib/vm/cow | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/contrib/vm/cow b/contrib/vm/cow new file mode 100755 index 00000000..4abb8b82 --- /dev/null +++ b/contrib/vm/cow @@ -0,0 +1,48 @@ +#!/bin/sh + +set -e + +imgloop= +tmpfile= +tmploop= +dmname= +cowlink= + +function cleanup () { + set +e + [ -n "$cowlink" ] && rm $cowlink + [ -n "$dmname" ] && dmsetup remove $dmname + [ -n "$tmploop" ] && losetup -d $tmploop + [ -n "$tmpfile" ] && rm $tmpfile + [ -n "$imgloop" ] && losetup -d $imgloop +} + +trap cleanup EXIT + +imgfile=$1 +if [ -z "$imgfile" ] ; then + echo Syntax: $0 /path/to/image/file + exit 1 +fi + +# Set up image loop device +x=`losetup -f` ; losetup -r $x $imgfile ; imgloop=$x + +# Create temporary file and set up temporary loop device +tmpfile=`mktemp $imgfile.XXXXXXXXXX` +truncate -r $imgfile $tmpfile +x=`losetup -f` ; losetup $x $tmpfile ; tmploop=$x + +# Create snapshot device +imgsize=`blockdev --getsz $imgloop` +x=`basename $imgfile` ; echo 0 $imgsize snapshot $imgloop $tmploop N 16 | \ + dmsetup create $x ; dmname=$x +chown --reference=$imgfile /dev/mapper/$dmname +chmod --reference=$imgfile /dev/mapper/$dmname + +# Create symlink +x=$imgfile.cow ; ln -s /dev/mapper/$dmname $x ; cowlink=$x + +# Wait until killed +echo "Created $cowlink" +while : ; do sleep 2147483647 ; done |