summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xlx-trainer-vm/dd-multi.sh64
1 files changed, 45 insertions, 19 deletions
diff --git a/lx-trainer-vm/dd-multi.sh b/lx-trainer-vm/dd-multi.sh
index 78740f1..4dbaac7 100755
--- a/lx-trainer-vm/dd-multi.sh
+++ b/lx-trainer-vm/dd-multi.sh
@@ -13,6 +13,9 @@ usage_exit()
echo "example: copying image to devices: sde, sdf, sdg"
echo "$0 lx-trainer.img /dev/sde /dev/sdf /dev/sdg"
echo
+ echo " use --keep-files to speed up multiple calls"
+ echo " (so that vmdk and img can be re-used later)"
+ echo
exit 1
}
@@ -48,11 +51,15 @@ SRC=""
LAYERS=""
DESTS=""
+KEEP_FILES=0
for arg in $@; do
case $arg in
--layer=*)
LAYERS="$LAYERS `echo $arg | sed -e 's/^--layer=//'`"
;;
+ --keep-files)
+ KEEP_FILES=1
+ ;;
--*)
echo "error: unknown option: $arg"
usage_exit
@@ -97,10 +104,7 @@ if [ "`env - /sbin/parted --script $SRC print | \
fi
SRC_FILE="${SRC}_copy.img"
-VMDK_FILE="${SRC}.vmdk"
-
-echo 'creating a sparse copy of the image'
-cp -a --sparse=always $SRC $SRC_FILE
+VMDK_FILE="${SRC_FILE}.vmdk"
# setup temp directory for mountpoints
TMP_ROOT="/tmp/dd-multi-`date +%s`.$$"
@@ -108,26 +112,41 @@ rm -rf $TMP_ROOT
mkdir -p $TMP_ROOT
echo "using directory $TMP_ROOT for mount points"
-if [ -n "$LAYERS" ]; then
- LOOPDEV=`losetup --show -P -f $SRC_FILE`
- LOOPPT="${LOOPDEV}p${ROOTPT}"
+if [ $KEEP_FILES -eq 1 -a -f $SRC_FILE ]; then
+ echo 'using existing prepared copy of the image'
+ if [ -n "$LAYERS" ]; then
+ echo '(SPECIFIED LAYERS WILL NOT BE RE-UNPACKED)'
+ fi
+else
+ echo 'creating a sparse copy of the image'
+ cp -a --sparse=always $SRC $SRC_FILE
- mkdir -p ${TMP_ROOT}${LOOPPT}
- mount $LOOPPT ${TMP_ROOT}${LOOPPT}
+ if [ -n "$LAYERS" ]; then
+ LOOPDEV=`losetup --show -P -f $SRC_FILE`
+ LOOPPT="${LOOPDEV}p${ROOTPT}"
- for tarball in $LAYERS; do
- echo "unpacking layer: $tarball"
- tar -x -f $tarball --numeric-owner -C ${TMP_ROOT}${LOOPPT}
- done
+ mkdir -p ${TMP_ROOT}${LOOPPT}
+ mount $LOOPPT ${TMP_ROOT}${LOOPPT}
- sync
- umount ${LOOPPT}
+ for tarball in $LAYERS; do
+ echo "unpacking layer: $tarball"
+ tar -x -f $tarball --numeric-owner \
+ -C ${TMP_ROOT}${LOOPPT}
+ done
- losetup -d $LOOPDEV
+ sync
+ umount ${LOOPPT}
+
+ losetup -d $LOOPDEV
+ fi
fi
-echo 'creating vmdk file'
-qemu-img convert -O vmdk $SRC_FILE $VMDK_FILE
+if [ $KEEP_FILES -eq 1 -a -f $VMDK_FILE ]; then
+ echo 'using existing prepared vmdk file'
+else
+ echo 'creating vmdk file'
+ qemu-img convert -O vmdk $SRC_FILE $VMDK_FILE
+fi
# delete mbr's
dd if=/dev/zero bs=10M count=1 2> /dev/null | tee $DESTS > /dev/null
@@ -181,6 +200,13 @@ for dest in $DESTS; do
done
# cleanup temp directory
-rm -rf $TMP_ROOT $VMDK_FILE $SRC_FILE
+rm -rf $TMP_ROOT
+if [ $KEEP_FILES -ne 1 ]; then
+ rm -f $VMDK_FILE $SRC_FILE
+else
+ echo "as requested, not removing:"
+ echo " $VMDK_FILE"
+ echo " $SRC_FILE"
+fi
echo 'done, no errors'