12345678910111213141516171819202122232425262728293031323334 |
- #!/bin/bash
- # Usage: ./docker_volume_backup.sh $SAVE_DIR
- # Or: curl -s https://git.immiles.com/miles/scripts/raw/master/docker_volume_backup.sh | bash -s $SAVE_DIR
- #set -ex
- SAVE_DIR=$1
- LOG_FILE=$HOME/logs/docker_volume_backup.log
- DATE=`date +"%Y%m%d_%H%M%S"`
- RETENTION=$((14*24*60)) # 2 weeks
- KEEP=7
- mkdir -p $HOME/logs
- echo "--------------------------$DATE------------------------" >> $LOG_FILE
- echo "[BEGIN] Backup docker volume" >> $LOG_FILE
- # list and iterate volume
- volumes=( `docker volume ls | awk '{print $2}' | tail -n +2` )
- for x in "${volumes[@]}"; do
- cmd="docker run --rm -v $x:/src -v $SAVE_DIR:/backup ubuntu tar --ignore-failed-read -jpcf /backup/${x}_${DATE}.tar.bz2 /src"
- echo $cmd >> $LOG_FILE
- eval $cmd >> $LOG_FILE 2>&1
- done
- # Clean up
- find $SAVE_DIR -name "*.tar.bz2" -type f -printf '%T@ %p\n' -mmin +$RETENTION | sort -nr | tail -n +$KEEP | awk '{ print $2 }' | xargs -r rm >> $LOG_FILE 2>&1
- echo "[Finish] Backup docker volume" >> $LOG_FILE
- echo "--------------------------$DATE------------------------" >> $LOG_FILE
- exit 0
|