backuppc-achive-rclone.sh
· 2.9 KiB · Bash
原始文件
#!/bin/bash
if [ -r /opt/etc/default/backuppc-achive-rclone ]; then
source /opt/etc/default/backuppc-achive-rclone
else
source /etc/default/backuppc-achive-rclone
fi
if [ -r /opt/etc/backuppc-achive-rclone.conf ]; then
source /opt/etc/backuppc-achive-rclone.conf
else
source /etc/backuppc-achive-rclone.conf
fi
BACKUPPC_HOSTS="${BACKUPPC_HOSTS:=/etc/backuppc/hosts}"
BACKUPPC_ARCHIVESTART="${BACKUPPC_ARCHIVESTART:=/usr/share/backuppc/bin/BackupPC_archiveStart}"
BACKUPPC_ARCHIVE_RENTENTION="${BACKUPPC_ARCHIVE_RENTENTION:=2}"
RCLONE_BIN="${RCLONE_BIN:=rclone}"
RCLONE_BUCKET="${RCLONE_BUCKET:=backuppc-archive}"
RCLONE_BWLIMIT="${RCLONE_BWLIMIT:=--bwlimit '06:00,512 22:00,1M'}"
HEAD="$(which /opt/bin/head || which head)"
[ -z ${RCLONE_REMOTE} ] && { echo "E: please set RCLONE_REMOTE in /opt/etc/backuppc-achive-rclone.conf or /etc/backuppc-achive-rclone.conf!"; exit 1; }
[ -z ${RCLONE_BUCKET} ] && { echo "E: please set RCLONE_BUCKET in /opt/etc/backuppc-achive-rclone.conf or /etc/backuppc-achive-rclone.conf!"; exit 1; }
[ -z ${BACKUPPC_ARCHIVE_PATCH} ] && { echo "E: please set BACKUPPC_ARCHIVE_PATCH in /opt/etc/backuppc-achive-rclone.conf or /etc/backuppc-achive-rclone.conf!"; exit 1; }
get_backup_hosts() {
# Taken from https://brb.epr.ch/blog/_export/code/blog:backuppc_script_archive_all_hosts?codeblock=0
HOSTS=""
while read -r LINE; do
# Skip comments
[[ "${LINE}" =~ ^#.*$ ]] && continue
HOST=`echo ${LINE} | cut -f 1 -d " "`
! [ "${HOST}" != "" -a "${HOST}" != "archive" -a "${HOST}" != "host" ] && continue
HOSTS="${HOSTS} ${HOST}"
done < "${BACKUPPC_HOSTS}"
}
get_archived_hosts() {
for FILE in ${BACKUPPC_ARCHIVE_PATCH}/*; do
basename $FILE .tar.bz2 | sed 's/\.[[:digit:]]\+.*//g';
done | uniq
}
get_archived_host_files() {
${HEAD} -n -1 /proc/cpuinfo > /dev/null 2>&1 || { echo "E: head command does not support '-n' option."; exit 1; }
ARCHIVED_HOSTS="$(get_archived_hosts)"
for FILEHOSTNAME in $(get_archived_hosts); do
ls -a /share/MD0_DATA/tmp/backuppc-archive/${FILEHOSTNAME}* | ${HEAD} -n -${BACKUPPC_ARCHIVE_RENTENTION}
done
}
case ${1} in
export)
get_backup_hosts
echo Backing up ${HOSTS}
if [ "$(whoami)" != "backuppc" ]; then
BACKUPPC_ARCHIVESTART="sudo -u backuppc ${BACKUPPC_ARCHIVESTART}"
fi
${BACKUPPC_ARCHIVESTART} archive backuppc ${HOSTS}
;;
sync)
${RCLONE_BIN} sync ${BACKUPPC_ARCHIVE_PATCH} ${RCLONE_REMOTE}:${RCLONE_BUCKET} --bwlimit '06:00,512 22:00,1M' # ${RCLONE_BWLIMIT}
;;
cleanup)
rm $(get_archived_host_files)
;;
*)
echo "ERROR: Use the following keywords:"
echo "'export' for queuing BackupPC archive export"
echo "'sync' to start rcloud sync"
echo "'cleanup' for removing unneeded archives"
exit 1
esac
| 1 | #!/bin/bash |
| 2 | |
| 3 | if [ -r /opt/etc/default/backuppc-achive-rclone ]; then |
| 4 | source /opt/etc/default/backuppc-achive-rclone |
| 5 | else |
| 6 | source /etc/default/backuppc-achive-rclone |
| 7 | fi |
| 8 | |
| 9 | if [ -r /opt/etc/backuppc-achive-rclone.conf ]; then |
| 10 | source /opt/etc/backuppc-achive-rclone.conf |
| 11 | else |
| 12 | source /etc/backuppc-achive-rclone.conf |
| 13 | fi |
| 14 | |
| 15 | BACKUPPC_HOSTS="${BACKUPPC_HOSTS:=/etc/backuppc/hosts}" |
| 16 | BACKUPPC_ARCHIVESTART="${BACKUPPC_ARCHIVESTART:=/usr/share/backuppc/bin/BackupPC_archiveStart}" |
| 17 | BACKUPPC_ARCHIVE_RENTENTION="${BACKUPPC_ARCHIVE_RENTENTION:=2}" |
| 18 | RCLONE_BIN="${RCLONE_BIN:=rclone}" |
| 19 | RCLONE_BUCKET="${RCLONE_BUCKET:=backuppc-archive}" |
| 20 | RCLONE_BWLIMIT="${RCLONE_BWLIMIT:=--bwlimit '06:00,512 22:00,1M'}" |
| 21 | HEAD="$(which /opt/bin/head || which head)" |
| 22 | |
| 23 | [ -z ${RCLONE_REMOTE} ] && { echo "E: please set RCLONE_REMOTE in /opt/etc/backuppc-achive-rclone.conf or /etc/backuppc-achive-rclone.conf!"; exit 1; } |
| 24 | [ -z ${RCLONE_BUCKET} ] && { echo "E: please set RCLONE_BUCKET in /opt/etc/backuppc-achive-rclone.conf or /etc/backuppc-achive-rclone.conf!"; exit 1; } |
| 25 | [ -z ${BACKUPPC_ARCHIVE_PATCH} ] && { echo "E: please set BACKUPPC_ARCHIVE_PATCH in /opt/etc/backuppc-achive-rclone.conf or /etc/backuppc-achive-rclone.conf!"; exit 1; } |
| 26 | |
| 27 | get_backup_hosts() { |
| 28 | # Taken from https://brb.epr.ch/blog/_export/code/blog:backuppc_script_archive_all_hosts?codeblock=0 |
| 29 | HOSTS="" |
| 30 | while read -r LINE; do |
| 31 | # Skip comments |
| 32 | [[ "${LINE}" =~ ^#.*$ ]] && continue |
| 33 | |
| 34 | HOST=`echo ${LINE} | cut -f 1 -d " "` |
| 35 | ! [ "${HOST}" != "" -a "${HOST}" != "archive" -a "${HOST}" != "host" ] && continue |
| 36 | |
| 37 | HOSTS="${HOSTS} ${HOST}" |
| 38 | done < "${BACKUPPC_HOSTS}" |
| 39 | } |
| 40 | |
| 41 | get_archived_hosts() { |
| 42 | for FILE in ${BACKUPPC_ARCHIVE_PATCH}/*; do |
| 43 | basename $FILE .tar.bz2 | sed 's/\.[[:digit:]]\+.*//g'; |
| 44 | done | uniq |
| 45 | } |
| 46 | |
| 47 | get_archived_host_files() { |
| 48 | ${HEAD} -n -1 /proc/cpuinfo > /dev/null 2>&1 || { echo "E: head command does not support '-n' option."; exit 1; } |
| 49 | ARCHIVED_HOSTS="$(get_archived_hosts)" |
| 50 | for FILEHOSTNAME in $(get_archived_hosts); do |
| 51 | ls -a /share/MD0_DATA/tmp/backuppc-archive/${FILEHOSTNAME}* | ${HEAD} -n -${BACKUPPC_ARCHIVE_RENTENTION} |
| 52 | done |
| 53 | } |
| 54 | |
| 55 | case ${1} in |
| 56 | export) |
| 57 | get_backup_hosts |
| 58 | echo Backing up ${HOSTS} |
| 59 | if [ "$(whoami)" != "backuppc" ]; then |
| 60 | BACKUPPC_ARCHIVESTART="sudo -u backuppc ${BACKUPPC_ARCHIVESTART}" |
| 61 | fi |
| 62 | ${BACKUPPC_ARCHIVESTART} archive backuppc ${HOSTS} |
| 63 | ;; |
| 64 | sync) |
| 65 | ${RCLONE_BIN} sync ${BACKUPPC_ARCHIVE_PATCH} ${RCLONE_REMOTE}:${RCLONE_BUCKET} --bwlimit '06:00,512 22:00,1M' # ${RCLONE_BWLIMIT} |
| 66 | ;; |
| 67 | cleanup) |
| 68 | rm $(get_archived_host_files) |
| 69 | ;; |
| 70 | *) |
| 71 | echo "ERROR: Use the following keywords:" |
| 72 | echo "'export' for queuing BackupPC archive export" |
| 73 | echo "'sync' to start rcloud sync" |
| 74 | echo "'cleanup' for removing unneeded archives" |
| 75 | exit 1 |
| 76 | esac |
| 77 |