kopia lustrzana https://github.com/loomchild/volume-backup
132 wiersze
2.4 KiB
Bash
Executable File
132 wiersze
2.4 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
usage() {
|
|
>&2 echo "Usage: volume-backup <backup|restore> [options] <archive or - for stdin/stdout>"
|
|
>&2 echo ""
|
|
>&2 echo "Options:"
|
|
>&2 echo " -c <algorithm> chooose compression algorithm: bz2 (default), gz, xz, zstd and 0 (none)"
|
|
>&2 echo " -e <glob> exclude files or directories (only for backup operation)"
|
|
>&2 echo " -v verbose"
|
|
}
|
|
|
|
backup() {
|
|
if [ -z "$(ls -A /volume)" ]; then
|
|
>&2 echo "Volume is empty or missing, check if you specified a correct name"
|
|
exit 1
|
|
fi
|
|
|
|
if ! [ "$ARCHIVE" == "-" ]; then
|
|
mkdir -p `dirname /backup/$ARCHIVE`
|
|
fi
|
|
|
|
tar -C /volume $TAROPTS -cf $ARCHIVE_PATH ./
|
|
}
|
|
|
|
restore() {
|
|
if ! [ "$ARCHIVE" == "-" ]; then
|
|
if ! [ -e $ARCHIVE_PATH ]; then
|
|
>&2 echo "Archive file $ARCHIVE does not exist"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
rm -rf /volume/* /volume/..?* /volume/.[!.]*
|
|
tar -C /volume/ $TAROPTS -xf $ARCHIVE_PATH
|
|
}
|
|
|
|
# Needed because sometimes pty is not ready when executing docker-compose run
|
|
# See https://github.com/docker/compose/pull/4738 for more details
|
|
# TODO: remove after above pull request or equivalent is merged
|
|
sleep 1
|
|
|
|
OPERATION=$1
|
|
|
|
TAROPTS=""
|
|
COMPRESSION="bz2"
|
|
|
|
OPTIND=2
|
|
|
|
while getopts "h?vc:e:" OPTION; do
|
|
case "$OPTION" in
|
|
h|\?)
|
|
usage
|
|
exit 0
|
|
;;
|
|
c)
|
|
if [ -z "$OPTARG" ]; then
|
|
usage
|
|
exit 1
|
|
fi
|
|
COMPRESSION=$OPTARG
|
|
;;
|
|
e)
|
|
if [ -z "$OPTARG" -o "$OPERATION" != "backup" ]; then
|
|
usage
|
|
exit 1
|
|
fi
|
|
TAROPTS="$TAROPTS --exclude $OPTARG"
|
|
;;
|
|
v)
|
|
TAROPTS="$TAROPTS --checkpoint=.1000"
|
|
EOLN=1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
shift $((OPTIND - 1))
|
|
|
|
if [ $# -lt 1 ]; then
|
|
usage
|
|
exit 1
|
|
fi
|
|
|
|
case "$COMPRESSION" in
|
|
xz)
|
|
TAROPTS="$TAROPTS -J"
|
|
EXTENSION=.tar.xz
|
|
;;
|
|
bz2)
|
|
TAROPTS="$TAROPTS -j"
|
|
EXTENSION=.tar.bz2
|
|
;;
|
|
gz)
|
|
TAROPTS="$TAROPTS -z"
|
|
EXTENSION=.tar.gz
|
|
;;
|
|
zstd)
|
|
TAROPTS="$TAROPTS -I zstd"
|
|
EXTENSION=.tar.zstd
|
|
;;
|
|
none|0)
|
|
EXTENSION=.tar
|
|
;;
|
|
*)
|
|
usage
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
if [ "$1" == "-" ]; then
|
|
ARCHIVE=$1
|
|
ARCHIVE_PATH=$ARCHIVE
|
|
else
|
|
ARCHIVE=${1%%$EXTENSION}$EXTENSION
|
|
ARCHIVE_PATH=/backup/$ARCHIVE
|
|
fi
|
|
|
|
case "$OPERATION" in
|
|
"backup" )
|
|
backup
|
|
;;
|
|
"restore" )
|
|
restore
|
|
;;
|
|
* )
|
|
usage
|
|
;;
|
|
esac
|
|
|
|
if ! [ -z "$EOLN" ]; then
|
|
>&2 echo
|
|
fi
|