最后活跃于 6 months ago

修订 7d4c17a9240fa4272458fa4759ac7fe66988e3f4

backuppc-achive-rclone.sh 原始文件
1#!/bin/bash
2
3if [ -r /opt/etc/default/backuppc-achive-rclone ]; then
4 source /opt/etc/default/backuppc-achive-rclone
5else
6 source /etc/default/backuppc-achive-rclone
7fi
8
9if [ -r /opt/etc/backuppc-achive-rclone.conf ]; then
10 source /opt/etc/backuppc-achive-rclone.conf
11else
12 source /etc/backuppc-achive-rclone.conf
13fi
14
15BACKUPPC_HOSTS="${BACKUPPC_HOSTS:=/etc/backuppc/hosts}"
16BACKUPPC_ARCHIVESTART="${BACKUPPC_ARCHIVESTART:=/usr/share/backuppc/bin/BackupPC_archiveStart}"
17BACKUPPC_ARCHIVE_RENTENTION="${BACKUPPC_ARCHIVE_RENTENTION:=2}"
18RCLONE_BIN="${RCLONE_BIN:=rclone}"
19RCLONE_BUCKET="${RCLONE_BUCKET:=backuppc-archive}"
20RCLONE_BWLIMIT="${RCLONE_BWLIMIT:=--bwlimit '06:00,512 22:00,1M'}"
21HEAD="$(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
27get_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
41get_archived_hosts() {
42 for FILE in ${BACKUPPC_ARCHIVE_PATCH}/*; do
43 basename $FILE .tar.bz2 | sed 's/\.[[:digit:]]\+.*//g';
44 done | uniq
45}
46
47get_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
55case ${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
76esac
77