Skip to content

Commit 3638205

Browse files
Use a random temp directory for mounting
This allows using the script multiple times in parallel on different disks. To prevent all these directories littering the filesystem, an exit handler is registered to remove them again when the script exits (also unmounting any mounted filesystems just in case).
1 parent 5294c9b commit 3638205

File tree

1 file changed

+16
-8
lines changed

1 file changed

+16
-8
lines changed

rpi-clone

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,6 @@ then
8585
apt-get install -y --no-install-recommends $need_packages
8686
fi
8787

88-
export clone=/mnt/clone
89-
export clone_src=/mnt/clone-src
9088
export clone_log=/var/log/$PGM.log
9189

9290
HOSTNAME=`hostname`
@@ -993,15 +991,25 @@ then
993991
exit 0
994992
fi
995993

996-
if [ ! -d $clone ]
997-
then
998-
mkdir $clone
999-
fi
1000-
if [ ! -d $clone_src ]
994+
export clone=$(mktemp --tmpdir --directory rpi-clone-dst.XXXXXX)
995+
export clone_src=$(mktemp --tmpdir --directory rpi-clone-src.XXXXXX)
996+
997+
if ! [ -n "$clone" -a -d "$clone" -a -n "$clone_src" -a -d "$clone_src" ]
1001998
then
1002-
mkdir $clone_src
999+
echo "Failed to create temporary mount directories"
1000+
echo "Aborting!"
1001+
exit 1
10031002
fi
10041003

1004+
# Make sure we cleanup on exit, regardless of how we exit
1005+
cleanup() {
1006+
umount "$clone" 2> /dev/null
1007+
umount "$clone_src" 2> /dev/null
1008+
rmdir "$clone"
1009+
rmdir "$clone_src"
1010+
}
1011+
trap cleanup EXIT
1012+
10051013
# dst_mount_flag enumerations:
10061014
live=1
10071015
temp=2

0 commit comments

Comments
 (0)