diff options
| -rwxr-xr-x | lx-trainer-vm/dd-multi.sh | 64 |
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' |
