diff --git a/proxmox/backup.pve.content.sh b/proxmox/backup.pve.content.sh index b200a98..13a7403 100755 --- a/proxmox/backup.pve.content.sh +++ b/proxmox/backup.pve.content.sh @@ -3,8 +3,11 @@ # This script will backup /etc/pve content : # 1. Make an archive to a first directory (default: /etc/proxmox.pve/backup/). # 2. Hard link a fix archive name (pve.latest.tar.gz) to new archive -# Easy to monitor (this path can be expected). -# 3. Clean backups older than retention time (default: 7). +# Easy to monitor (eg. this path can be expected). +# 3. Limit permissions to backup directory (backup:adm). +# 4. Clean backups older than retention time (default: 7). +# 5. (optionnal) Copy backup to a second directory (nfs mountpoint, other hdd,…). +# # This script can be call by a cronjob (eg. daily). @@ -29,7 +32,7 @@ readonly COLOR_DEBUG="${PURPLE}" usage() { # {{{ cat <<- EOF -usage: $PROGNAME [-d|-f|-h|-r] +usage: $PROGNAME [-d|-f|-h|-r|-s] Backup /etc/pve content. @@ -38,11 +41,14 @@ EXAMPLES : ${PROGNAME} - Backup /etc/pve content to /var/backups/pve directory - ${PROGNAME} --first /var/backups/pve + ${PROGNAME} --first-directory /var/backups/pve - Backup to default path and keep backups for 14 days ${PROGNAME} --retention 14 + - Duplicate backups to a second directory (/mnt/nfs/pve) + ${PROGNAME} --second-directory /mnt/nfs/pve + OPTIONS : -d,--debug Enable debug messages. @@ -58,6 +64,9 @@ OPTIONS : Backups older than retention time (default: ${DEFAULT_RETENTION_TIME}) will be delete. + -s,--second,--second-directory + Path to a second directory to duplicate backups (default: not set). + EOF } @@ -124,10 +133,10 @@ main() { # {{{ && printf '%b\n' "${RED}/etc/pve directory doesn't seems available. Are you sure you run this script on a Proxmox host?${RESET}" \ && exit 1 ## }}} - ## Verify if the local destination directory is absent {{{ + ## Verify if the first destination directory is absent {{{ ### AND create it is_directory_absent "${first_bkp_dir}" \ - && mkdir -p -- ${first_bkp_dir} + && mkdir -p -- "${first_bkp_dir}" ## }}} ## Create an archive of /etc/pve to $first_bkp_dir {{{ @@ -151,6 +160,20 @@ main() { # {{{ || exit 4 ## }}} + ## If second directory is defined {{{ + if [ -n "${second_bkp_dir}" ]; then + ### Verify if the second destination directory is absent {{{ + #### AND create it + is_directory_absent "${second_bkp_dir}" \ + && mkdir -p -- "${second_bkp_dir}" + ### }}} + ### Synchronize first directory to second {{{ + #### OR exit with error code 12 if it fails + rsync -a -- "${first_bkp_dir}/" "${second_bkp_dir}/" \ + || exit 12 + ### }}} + fi + ## }}} } # }}} @@ -179,7 +202,7 @@ if [ ! "${NBARGS}" -eq "0" ]; then -d|--debug ) ## debug DEBUG=0 ;; - -f|--first,--first-directory ) ## first directory to store backup + -f|--first|--first-directory ) ## first directory to store backup ## Move to the next argument shift ## Define first_bkp_dir @@ -196,6 +219,12 @@ if [ ! "${NBARGS}" -eq "0" ]; then ## Define retention_time retention_time="${1}" ;; + -s|--second|--second-directory ) ## second directory to duplicate backup + ## Move to the next argument + shift + ## Define second_bkp_dir + second_bkp_dir="${1}" + ;; * ) ## unknow option printf '%b\n' "${RED}Invalid option: ${1}${RESET}" printf '%b\n' "---"