Last active
October 24, 2022 06:07
-
-
Save sinamics/2dce8bf46e2de3f3fb642bc342d9f5a2 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# | |
# This is a vzbackup hook script that backups up your proxmox vms, containers and pve configs to remote storage | |
# such as google drive using proxmox's native vzbackup tool and rclone. | |
# https://github.com/TheRealAlexV/proxmox-vzbackup-rclone | |
# | |
# ./vzbackup-rclone.sh rehydrate YYYY/MM/DD file_name_encrypted.bin | |
############ /START CONFIG | |
dumpdir="/var/lib/vz/dump" # Set this to where your vzdump files are stored | |
MAX_AGE=2 # This is the age in days to keep local backup copies. Local backups older than this are deleted. | |
############ /END CONFIG | |
_bdir="$dumpdir" | |
rcloneroot="$dumpdir/rclone" | |
timepath="$(date +%Y)/$(date +%m)/$(date +%d)" | |
rclonedir="$rcloneroot/$timepath" | |
backup_crypt="gdrive:backups/proxmox_backup" | |
COMMAND=${1} | |
rehydrate=${2} #enter the date you want to rehydrate in the following format: YYYY/MM/DD | |
if [ ! -z "${3}" ];then | |
CMDARCHIVE=$(echo "/${3}" | sed -e 's/\(.bin\)*$//g') | |
fi | |
tarfile=${TARGET} | |
exten=${tarfile#*.} | |
filename=${tarfile%.*.*} | |
if [[ ${COMMAND} == 'rehydrate' ]]; then | |
#echo "Please enter the date you want to rehydrate in the following format: YYYY/MM/DD" | |
#echo "For example, today would be: $timepath" | |
#read -p 'Rehydrate Date => ' rehydrate | |
rclone --config /root/.config/rclone/rclone.conf \ | |
--drive-chunk-size=32M copy $backup_crypt/$rehydrate$CMDARCHIVE $dumpdir \ | |
-v --stats=60s --transfers=16 --checkers=16 | |
fi | |
if [[ ${COMMAND} == 'job-start' ]]; then | |
echo "Deleting backups older than $MAX_AGE days." | |
find $dumpdir -type f -mtime +$MAX_AGE -exec /bin/rm -f {} \; | |
fi | |
if [[ ${COMMAND} == 'backup-end' ]]; then | |
echo "Backing up $tarfile to remote storage" | |
#mkdir -p $rclonedir | |
#cp -v $tarfile $rclonedir | |
echo "rcloning $rclonedir" | |
#ls $rclonedir | |
rclone --config /root/.config/rclone/rclone.conf \ | |
--drive-chunk-size=32M copy $tarfile $backup_crypt/$timepath \ | |
-v --stats=60s --transfers=16 --checkers=16 | |
fi | |
if [[ ${COMMAND} == 'job-end' || ${COMMAND} == 'job-abort' ]]; then | |
echo "Backing up main PVE configs" | |
_tdir=${TMP_DIR:-/var/tmp} | |
_tdir=$(mktemp -d $_tdir/proxmox-XXXXXXXX) | |
function clean_up { | |
echo "Cleaning up" | |
rm -rf $_tdir | |
} | |
trap clean_up EXIT | |
_now=$(date +%Y-%m-%d.%H.%M.%S) | |
_HOSTNAME=$(hostname -f) | |
_filename1="$_tdir/proxmoxetc.$_now.tar" | |
_filename2="$_tdir/proxmoxpve.$_now.tar" | |
_filename3="$_tdir/proxmoxroot.$_now.tar" | |
_filename4="$_tdir/proxmox_backup_"$_HOSTNAME"_"$_now".tar.gz" | |
echo "Tar files" | |
# copy key system files | |
tar --warning='no-file-ignored' -cPf "$_filename1" /etc/. | |
tar --warning='no-file-ignored' -cPf "$_filename2" /var/lib/pve-cluster/. | |
tar --warning='no-file-ignored' -cPf "$_filename3" /root/. | |
echo "Compressing files" | |
# archive the copied system files | |
tar -cvzPf "$_filename4" $_tdir/*.tar | |
# copy config archive to backup folder | |
#mkdir -p $rclonedir | |
cp -v $_filename4 $_bdir/ | |
#cp -v $_filename4 $rclonedir/ | |
echo "rcloning $_filename4" | |
#ls $rclonedir | |
rclone --config /root/.config/rclone/rclone.conf \ | |
--drive-chunk-size=32M move $_filename4 $backup_crypt/$timepath \ | |
-v --stats=60s --transfers=16 --checkers=16 | |
#rm -rfv $rcloneroot | |
fi |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment