Improve backup even more

This commit is contained in:
Kasra Bigdeli
2019-04-08 21:55:05 -07:00
parent a6a74a0c53
commit 3192178cd2

View File

@@ -1,12 +1,58 @@
#!/bin/bash #!/bin/bash
# curl -sSL https://raw.githubusercontent.com/caprover/caprover/master/dev-scripts/backup-vols.sh | sudo bash # curl -sSL https://raw.githubusercontent.com/caprover/caprover/master/dev-scripts/backup-vols.sh | bash -s -- backup
usage() {
>&2 echo "Usage: backup-vols.sh <backup|restore>"
exit 1
}
backup() {
backup_directory=/backup-vols/$(date +%Y_%m_%d_%H_%M_%S)
mkdir -p $backup_directory
vols=$(docker volume ls --quiet)
for VOL_NAME_TO_BACKUP in $vols
do
echo "Volume: $VOL_NAME_TO_BACKUP"
docker run -it --rm -v $VOL_NAME_TO_BACKUP:/volume -v $backup_directory:/backup alpine \
tar -cf /backup/$VOL_NAME_TO_BACKUP.tar -C /volume ./
echo ================================
done
}
restore() {
restore_dir=/restore-vols
if [ -z "$(ls -A /$restore_dir)" ]; then
>&2 echo "$restore_dir is empty or missing, check if you specified a correct name"
exit 1
fi
vols=$(docker volume ls --quiet)
for VOL_NAME_TO_BACKUP in $vols
do
echo "Volume: $VOL_NAME_TO_BACKUP"
docker run -it --rm -v $VOL_NAME_TO_BACKUP:/volume -v $restore_dir:/backup alpine \
sh -c "rm -rf /volume/* /volume/..?* /volume/.[!.]* ; tar -C /volume/ -xf /backup/$VOL_NAME_TO_BACKUP.tar.gz"
echo ================================
done
}
if [ $# -ne 1 ]; then
usage
fi
# https://stackoverflow.com/questions/36273665/what-does-set-x-do # https://stackoverflow.com/questions/36273665/what-does-set-x-do
set -x set -x
### STEP 1: turning off all services to avoid data corruption ### STEP 1: turning off all services to avoid data corruption
all_services=$(docker volume ls --quiet) all_services=$(docker volume ls --quiet)
@@ -22,25 +68,20 @@ sleep 10
### STEP 2: Creating the backup or restoring from the backup
OPERATION=$1
### STEP 2: Creating the backup case "$OPERATION" in
"backup" )
backup_directory=/backup-vols/$(date +%Y_%m_%d_%H_%M_%S) backup
;;
mkdir -p $backup_directory "restore" )
restore
vols=$(docker volume ls --quiet) ;;
* )
for VOL_NAME_TO_BACKUP in $vols usage
do ;;
echo "Volume: $VOL_NAME_TO_BACKUP" esac
docker run -it --rm -v $VOL_NAME_TO_BACKUP:/volume -v $backup_directory:/backup alpine \
tar -cf /backup/$VOL_NAME_TO_BACKUP.tar -C /volume ./
echo ================================
done