This commit is contained in:
Andrew Hurley 2022-10-26 23:03:59 +11:00
parent 4a2eb7588d
commit 72ad582b17
1 changed files with 37 additions and 61 deletions

92
v2b.sh
View File

@ -1,51 +1,22 @@
#!/bin/bash #!/bin/bash
#set -o xtrace set -o xtrace
set -u set -u
set -o pipefail set -o pipefail
UMASK="$(umask)" UMASK="$(umask)"
final-local () {
if [[ -z "$(ls -A ${TEMPF})" ]]; then
rmdir "${TEMPF}"
else
if [[ $KEEP == "true" ]]; then
mv "${FOLDER}" "${NEWFL}"
else
rm -rf "${FOLDER}"
fi
mv "${TEMPF}" "${FOLDER}"
fi
}
final-remote () {
if [[ -z "$(ls ${TEMPF})" ]]; then
rmdir "${TEMPF}"
else
sudo scp -r "${TEMPF}" "${ADDR}:/srv/backup/${TEMPF}" || exit 1
if [[ $KEEP == "true" ]]; then
sudo ssh "${ADDR}" "cd /srv/backup; mv \"${FOLDER}\" \"${NEWFL}\""
else
sudo ssh "${ADDR}" "cd /srv/backup; rm -rf \"${FOLDER}\""
fi
sudo scp -r "${TEMPF}" "${ADDR}:/srv/backup" && rm -rf "${TEMPF}"
sudo ssh "${ADDR}" "cd /srv/backup; mv \"${TEMPF}\" \"${FOLDER}\""
fi
}
cprompt () { cprompt () {
if [[ $UNATTENDED == "true" ]]; then return; fi if [[ $UNATTENDED == "true" ]]; then
read -r -s -N 1 -p "Continue [Enter]?" return;
fi
read -r -s -N 1 -p "Press 'Enter' to continue "
if [[ $REPLY != $'\n' ]]; then if [[ $REPLY != $'\n' ]]; then
printf "\n" printf "\n"
printf " Script stopped!\n" printf " Backup stopped!\n"
if [[ $SEND == "true" ]]; then return 1
final-remote
else else
final-local printf "\n"
fi
exit
fi fi
} }
@ -76,11 +47,7 @@ while getopts ':s:pku' OPT; do
done done
shift $((OPTIND -1)) shift $((OPTIND -1))
if [[ $SEND == "true" ]]; then FOLDER="_vols_"
FOLDER="_$(hostname -f)_"
else
FOLDER="_vols_"
fi
if [[ $# > 0 ]]; then if [[ $# > 0 ]]; then
VOLUMES="$(sudo docker volume ls -q |grep "${1}")" VOLUMES="$(sudo docker volume ls -q |grep "${1}")"
@ -93,23 +60,15 @@ if [[ -z $VOLUMES ]]; then
exit 1 exit 1
fi fi
if [[ $SEND == "true" ]]; then if [[ -d ${FOLDER} ]]; then
if sudo ssh "${ADDR}" test -d "/srv/backup/${FOLDER}"; then
LASTF="$(sudo ssh "${ADDR}" ls -d --format=single-column ${FOLDER}* |tail -n1)"
else
LASTF="${FOLDER}"
fi
else
if [[ -d ${FOLDER} ]]; then
LASTF="$(ls -d --format=single-column ${FOLDER}* |tail -n1)" LASTF="$(ls -d --format=single-column ${FOLDER}* |tail -n1)"
else else
LASTF="${FOLDER}" LASTF="${FOLDER}"
fi
fi fi
INDEX="$((( ${LASTF#${FOLDER}} + 0 )))" INDEX="$((( ${LASTF#${FOLDER}} + 0 )))"
NEWFL="${FOLDER}$(printf "%05d" $((( ${INDEX} + 1 ))))" NEWFL="${FOLDER}$(printf "%05d" $((( ${INDEX} + 1 ))))"
TEMPF="$(mktemp -dt -p $PWD XXXXXXXXXXXXXXX)" TEMPF="$(mktemp -dt -p $PWD _XXXXXXXXXXXXXXX_)"
for VOL in ${VOLUMES}; do for VOL in ${VOLUMES}; do
if [[ $REMOVE == "true" ]]; then if [[ $REMOVE == "true" ]]; then
@ -118,18 +77,35 @@ for VOL in ${VOLUMES}; do
TAR="${VOL}.tar.bz2" TAR="${VOL}.tar.bz2"
fi fi
printf "${VOL} --> ${TEMPF}/${TAR}\n" printf "${VOL} --> ${TEMPF}/${TAR}\n"
cprompt cprompt || break
sudo docker run --rm --log-driver none \ sudo docker run --rm --log-driver none \
-v "${VOL}:/volume" \ -v "${VOL}:/volume" \
-v "${TEMPF}:/backup" \ -v "${TEMPF}:/backup" \
loomchild/volume-backup backup -v "${TAR}" loomchild/volume-backup backup -v "${TAR}"
sudo chmod 400 "${TEMPF}/${TAR}" sudo chmod 600 "${TEMPF}/${TAR}"
done done
if [[ $SEND == "true" ]]; then if [[ -z "$(ls -A ${TEMPF})" ]]; then
final-remote rmdir "${TEMPF}"
else else
final-local if [[ $KEEP == "true" ]]; then
mv "${FOLDER}" "${NEWFL}"
else
rm -rf "${FOLDER}"
fi
if mv "${TEMPF}" "${FOLDER}"; then
if [[ $SEND == "true" ]]; then
if [[ $ADDR =~ ":" ]]; then
if sudo ssh "${ADDR%:*}" "mkdir -p ${ADDR#*:}"; then
sudo scp "${FOLDER}"/* "${ADDR}"
fi
else
if sudo ssh "${ADDR}" "mkdir -p ${PWD}/_$(hostname -f)_"; then
sudo scp "${FOLDER}"/* "${ADDR}:${PWD}/_$(hostname -f)_"
fi
fi
fi
fi
fi fi
set +o xtrace set +o xtrace