diff options
| author | John Ogness <john.ogness@linutronix.de> | 2017-09-18 16:31:17 +0200 |
|---|---|---|
| committer | John Ogness <john.ogness@linutronix.de> | 2017-09-18 16:31:17 +0200 |
| commit | 5c876f80b9a3328b33520eb51e044cbec2ebc208 (patch) | |
| tree | 56b977f8c83b84c585ee31ac528f16640062a68f /lx-trainer-vm/dd-multi.sh | |
| parent | 0151fc2ba3bbe33484599df6ef3c49c2b152ffad (diff) | |
update scripts and README
- removed extra dd-variation scripts
- updated script for general usage (src/dest as arguments)
- adjusted script to support modifying new image
- moves /home/* from part1 to part2
- adds /home entry to /etc/fstab
- moved manut's update-home.sh to "extra" directory
(may still be in use? until a general replacement exists)
Signed-off-by: John Ogness <john.ogness@linutronix.de>
Diffstat (limited to 'lx-trainer-vm/dd-multi.sh')
| -rwxr-xr-x | lx-trainer-vm/dd-multi.sh | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/lx-trainer-vm/dd-multi.sh b/lx-trainer-vm/dd-multi.sh new file mode 100755 index 0000000..b715681 --- /dev/null +++ b/lx-trainer-vm/dd-multi.sh @@ -0,0 +1,99 @@ +#!/bin/sh +set -e + +usage_exit() +{ + echo + echo "usage: $0 src dest [dest]..." + echo + echo "example: copying image to devs sde, sdf, sdg" + echo "$0 lx-trainer.img /dev/sde /dev/sdf /dev/sdg" + echo + exit 1 +} + +# minimum 2 arguments +if [ $# -lt 2 ]; then + echo "error: invalid arguments" + usage_exit +fi + +SRC="$1" +shift +DESTS="$@" + +# source must be file or block device +if [ ! -f "$SRC" -a ! -b "$SRC" ]; then + echo "error: invalid src" + usage_exit +fi + +# destination must be block device +for dest in $DESTS; do + if [ ! -b $dest ]; then + echo "error: invalid dest: $dest" + usage_exit + fi +done + +# check if we are root (but keep going) +if [ `id -u` -ne 0 ]; then + echo "warning: not root, may not work" +fi + +# delete mbr +for dest in $DESTS; do + dd if=/dev/zero of=$dest bs=1M count=1 & +done +wait + +partprobe + +# efficiently copy source to all destinations +cat $SRC | tee $DESTS > /dev/null + +partprobe + +# add 2nd partition +for dest in $DESTS; do + /bin/echo -e "n\np\n\n\n\nw" | fdisk $dest & +done +wait + +partprobe + +# create ext4 on 2nd partition +for dest in $DESTS; do + mkfs.ext4 -L lxhome ${dest}2 & +done +wait + +# setup temp directory for mountpoints +TMP_ROOT="/tmp/dd-multi-`date +%s`.$$" +rm -rf $TMP_ROOT +mkdir -p $TMP_ROOT +echo "using temp directory $TMP_ROOT" + +for dest in $DESTS; do + # create mountpoints + mkdir -p ${TMP_ROOT}${dest}1 + mkdir -p ${TMP_ROOT}${dest}2 + + # mount partitions + mount ${dest}1 ${TMP_ROOT}${dest}1 + mount ${dest}2 ${TMP_ROOT}${dest}2 + + # move home directories to 2nd partition + mv ${TMP_ROOT}${dest}1/home/* ${TMP_ROOT}${dest}2/ + + # setup 2nd partition to be mounted as /home + echo 'LABEL=lxhome /home ext4 defaults 0 0' | \ + tee -a ${TMP_ROOT}${dest}1/etc/fstab + + # unmount partitions + umount ${TMP_ROOT}${dest}1 + umount ${TMP_ROOT}${dest}2 +done + +# cleanup temp directory +rm -rf $TMP_ROOT |
