Skip to content
Snippets Groups Projects
Commit 0d4b22a0 authored by Christian Elberfeld's avatar Christian Elberfeld
Browse files

borgbackup scripte aktualisiert

parent 1803647f
No related branches found
No related tags found
No related merge requests found
......@@ -9,24 +9,52 @@
- borgbackup
- logrotate
- moreutils
- openssl
- name: create directory
file:
path: "/srv/borgbackup/"
state: "directory"
- name: create directories
file:
path: "/srv/borgbackup/{{ item }}"
state: "directory"
with_items: "{{ borgbackup_repos }}"
- name: generate new repo_passphrase (check)
stat:
path: /srv/borgbackup/repo_passphrase
register: repo_passphrase
- name: generate new repo_passphrase (generate)
command: openssl rand -base64 -out /srv/borgbackup/repo_passphrase 24
when: repo_passphrase.stat.exists == False
- name: generate new repo_sshkey (check)
stat:
path: /srv/borgbackup/repo_sshkey
register: repo_sshkey
- name: generate new repo_sshkey (generate)
command: ssh-keygen -N '' -t ed25519 -f /srv/borgbackup/repo_sshkey
when: repo_sshkey.stat.exists == False
- name: get secrets from server 1
slurp: src={{ item }}
with_items:
- /srv/borgbackup/repo_passphrase
- /srv/borgbackup/repo_url
register: borgbackup_secrets
- name: get secrets from server 2
set_fact:
repo_passphrase: "{{ borgbackup_secrets.results | selectattr('item', 'equalto', '/srv/borgbackup/repo_passphrase') | map(attribute='content') | list | first | b64decode | regex_replace('\\s', '') }}"
repo_url: "{{ borgbackup_secrets.results | selectattr('item', 'equalto', '/srv/borgbackup/repo_url') | map(attribute='content') | list | first | b64decode | regex_replace('\\s', '') }}"
# BorgBackup Scripte erstellen
- name: BorgBackup Script erstellen
template: src={{ item }} dest=/opt/{{ item }} mode=o+x
- name: BorgBackup Scripte erstellen
template: src={{ item }} dest=/srv/borgbackup/{{ item }} mode=o+x
with_items:
- "borgbackup-check.sh"
- "borgbackup-create.sh"
......@@ -35,6 +63,7 @@
- "borgbackup-init.sh"
- "borgbackup-list.sh"
- "borgbackup-mount.sh"
- "borgbackup-prometheus.sh"
- name: BorgBackup log folder erstellen
file:
......@@ -42,7 +71,18 @@
state: "directory"
- name: BorgBackup LogRotate config erstellen
template: src=logrotate dest=/etc/logrotate.d/borgbackup
template:
src: logrotate
dest: /etc/logrotate.d/borgbackup
- name: Alten cronjob entfernen falls vorhanden
cron:
name: "borgbackup"
state: absent
- name: Cronjob für BorgBackup Backup
cron: name="borgbackup-create" weekday="{{borgbackup_weekday}}" hour="{{borgbackup_hour}}" minute="{{borgbackup_minute}}" job="/srv/borgbackup/borgbackup-create.sh 2>&1 | ts '[\\%Y-\\%m-\\%d \\%H:\\%M:\\%S]' >> /var/log/borgbackup/borgbackup.log"
- name: Cronjob für BorgBackup
cron: name="borgbackup" weekday="{{borgbackup_weekday}}" hour="{{borgbackup_hour}}" minute="{{borgbackup_minute}}" job="/opt/borgbackup-create.sh 2>&1 | ts '[%Y-%m-%d %H:%M:%S]' >> /var/log/borgbackup/borgbackup.log"
\ No newline at end of file
- name: Cronjob für BorgBackup Prometheus export
cron: name="borgbackup-prom" weekday="*" hour="*" minute="0" job="/srv/borgbackup/borgbackup-prometheus.sh 2>&1 | ts '[\\%Y-\\%m-\\%d \\%H:\%M:\\%S]' >> /var/log/borgbackup/borgbackup.log"
#!/bin/bash
# Überprüfung der Backup Archive
export BORG_PASSPHRASE="{{repo_passphrase}}"
export BORG_RSH="ssh -i /srv/borgbackup/repo_sshkey"
{% for repo_url in borgbackup_repos %}
echo "===[ Check Repo: {{repo_url}} ]============================================================"
borg check $1 $2 $3 --info --show-rc --remote-path borg1 {{repo_url}}
# Überprüfung des Archives
borg check $1 $2 $3 --info --show-rc {{repo_url}}
{% endfor %}
\ No newline at end of file
#!/bin/bash
export BORG_PASSPHRASE="{{repo_passphrase}}"
export BORG_RSH="ssh -i /srv/borgbackup/repo_sshkey"
export BACKUP_DATE=`date +%Y-%m-%d_%H_%M`
# Ausführung des Backups
# Ausführung der Backups
# anschließend Bereinigung
# abschließend Integritätscheck
borg create $1 $2 $3 --info --show-rc --stats --compression lzma,2 {{repo_url}}::`date +%Y-%m-%d_%H_%M` \
{% for repo_url in borgbackup_repos %}
echo "===[ Create Backup: {{repo_url}} ]============================================================"
borg create $1 $2 $3 --info --show-rc --remote-path borg1 --stats --compression lzma,2 {{repo_url}}::$BACKUP_DATE \
{% for directory in borgbackup_directories %}
{{ directory }} \
{% endfor %}
......@@ -17,3 +23,5 @@ borg prune $1 $2 $3 --info --show-rc --list {{repo_url}} \
{% endfor %}
&& \
borg check $1 $2 $3 --info --show-rc {{repo_url}}
{% endfor %}
#!/bin/bash
export BORG_PASSPHRASE="{{repo_passphrase}}"
export BORG_RSH="ssh -i /srv/borgbackup/repo_sshkey"
# Löschen eines Backups
borg list $1 $2 $3 --info --show-rc {{repo_url}}
echo "Available Repos: "
{% for repo_url in borgbackup_repos %}
echo "{{repo_url}}"
{% endfor %}
echo "RepoName, followed by [ENTER]:"
read repo_url
echo "Available Backups: "
borg list $1 $2 $3 --info --show-rc --remote-path borg1 $repo_url
echo "BackupName, followed by [ENTER]:"
read target
borg delete $1 $2 $3 --info --show-rc {{repo_url}}::$target
borg delete $1 $2 $3 --info --show-rc --remote-path borg1 $repo_url::$target
#!/bin/bash
export BORG_PASSPHRASE="{{repo_passphrase}}"
export BORG_RSH="ssh -i /srv/borgbackup/repo_sshkey"
# Anzeige des Inhaltes im Borg Backup Archiv
# Anzeige des Inhaltes in den Borg Backup Archiven
borg list $1 $2 $3 --info --show-rc {{repo_url}}
{% for repo_url in borgbackup_repos %}
echo "BackupName, followed by [ENTER]:"
read target
BACKUPS=$(borg list $1 $2 $3 --info --show-rc --remote-path borg1 {{repo_url}})
echo "============================================="
echo "Backups List "
echo "$BACKUPS"
BACKUPS_LIST=$(echo "$BACKUPS" | awk '{print $1}')
for BACKUP in $BACKUPS_LIST; do
echo "============================================="
borg info $1 $2 $3 --info --show-rc --remote-path borg1 {{repo_url}}::$BACKUP
done
echo "============================================="
{% endfor %}
borg info $1 $2 $3 --info --show-rc {{repo_url}}::$target
#!/bin/bash
# Initialisierung des Borg Backup Archives
# Initialisierung der Borg Backup Archives
# Der SSH key aus /srv/borgbackup/repo_sshkey muss vorher auf den Backupserver übertragen werden
export BORG_PASSPHRASE="{{repo_passphrase}}"
export BORG_RSH="ssh -i /srv/borgbackup/repo_sshkey"
borg init $1 $2 $3 --info --show-rc --encryption=repokey {{repo_url}}
{% for repo_url in borgbackup_repos %}
if [ ! -e "{{repo_url}}.initialized" ]; then
echo "Initialize Repo: {{repo_url}}"
date > "{{repo_url}}.initialized"
borg init $1 $2 $3 --info --show-rc --remote-path borg1 --encryption=repokey {{repo_url}}
else
echo "Repo already initialized: {{repo_url}}"
fi
{% endfor %}
#!/bin/bash
export BORG_PASSPHRASE="{{repo_passphrase}}"
export BORG_RSH="ssh -i /srv/borgbackup/repo_sshkey"
# Anzeige des Inhaltes im Borg Backup Archiv
# Anzeige des Inhaltes in den Borg Backup Archiven
{% for repo_url in borgbackup_repos %}
echo "===[ List Repo: {{repo_url}} ]============================================================"
borg list $1 $2 $3 --info --show-rc --remote-path borg1 {{repo_url}}
{% endfor %}
borg list $1 $2 $3 --info --show-rc {{repo_url}}
#!/bin/bash
export BORG_PASSPHRASE="{{repo_passphrase}}"
export BORG_RSH="ssh -i /srv/borgbackup/repo_sshkey"
# Einhängen eines Backups nach /mnt/
# Einhängen der Repos in /mnt/
echo "Available Repos: "
{% for repo_url in borgbackup_repos %}
echo "{{repo_url}}"
{% endfor %}
echo "RepoName, followed by [ENTER]:"
read repo_url
echo -n 'Mounting to: /mnt'
mkdir /mnt/
borg mount $1 $2 $3 --info --show-rc --remote-path borg1 $repo_url /mnt/
echo -n 'Mounting to: /mnt/borbbackupmount'
borg mount $1 $2 $3 --info --show-rc {{repo_url}} /mnt/borbbackupmount
#!/bin/bash
export BORG_PASSPHRASE="{{repo_passphrase}}"
export BORG_RSH="ssh -i /srv/borgbackup/repo_sshkey"
# Metrics output file in the prometheus node-exporter directory
PROM_FILE="/var/lib/prometheus/node-exporter/borgbackup.prom"
# Borgbackup statistiken für Prometheus erstellen
function calc_bytes {
NUM=$1
UNIT=$2
case "$UNIT" in
kB)
echo $NUM | awk '{ print $1 * 1024 }'
;;
MB)
echo $NUM | awk '{ print $1 * 1024 * 1024 }'
;;
GB)
echo $NUM | awk '{ print $1 * 1024 * 1024 * 1024 }'
;;
TB)
echo $NUM | awk '{ print $1 * 1024 * 1024 * 1024 * 1024 }'
;;
esac
}
echo "borgbackup_repos_count {{borgbackup_repos|length}}" > $TMP_FILE
{% for repo_url in borgbackup_repos %}
BACKUPS=$(borg list --remote-path borg1 {{repo_url}})
BACKUPS_LIST=$(echo "$BACKUPS" | awk '{print $1}')
COUNTER=0
for BACKUP in $BACKUPS_LIST; do
COUNTER=$((COUNTER+1))
done
BORG_INFO=$(borg info --remote-path borg1 {{repo_url}}::$BACKUP)
# create temp file
TMP_FILE=$(mktemp)
echo "borgbackup_count{repo="{{ repo_url }}"} $COUNTER" > $TMP_FILE
echo "borgbackup_files{repo="{{ repo_url }}"} $(echo "$BORG_INFO" | grep "Number of files" | awk '{print $4}')" >> $TMP_FILE
echo "borgbackup_chunks_unique{repo="{{ repo_url }}"} $(echo "$BORG_INFO" | grep "Chunk index" | awk '{print $3}')" >> $TMP_FILE
echo "borgbackup_chunks_total{repo="{{ repo_url }}"} $(echo "$BORG_INFO" | grep "Chunk index" | awk '{print $4}')" >> $TMP_FILE
# byte size calculation
LAST_SIZE=$(calc_bytes $(echo "$BORG_INFO" |grep "This archive" |awk '{print $3}') $(echo "$BORG_INFO" |grep "This archive" |awk '{print $4}'))
LAST_SIZE_COMPRESSED=$(calc_bytes $(echo "$BORG_INFO" |grep "This archive" |awk '{print $5}') $(echo "$BORG_INFO" |grep "This archive" |awk '{print $6}'))
LAST_SIZE_DEDUP=$(calc_bytes $(echo "$BORG_INFO" |grep "This archive" |awk '{print $7}') $(echo "$BORG_INFO" |grep "This archive" |awk '{print $8}'))
TOTAL_SIZE=$(calc_bytes $(echo "$BORG_INFO" |grep "All archives" |awk '{print $3}') $(echo "$BORG_INFO" |grep "All archives" |awk '{print $4}'))
TOTAL_SIZE_COMPRESSED=$(calc_bytes $(echo "$BORG_INFO" |grep "All archives" |awk '{print $5}') $(echo "$BORG_INFO" |grep "All archives" |awk '{print $6}'))
TOTAL_SIZE_DEDUP=$(calc_bytes $(echo "$BORG_INFO" |grep "All archives" |awk '{print $7}') $(echo "$BORG_INFO" |grep "All archives" |awk '{print $8}'))
echo "borgbackup_last_size{repo="{{ repo_url }}"} $LAST_SIZE" >> $TMP_FILE
echo "borgbackup_last_size_compressed{repo="{{ repo_url }}"} $LAST_SIZE_COMPRESSED" >> $TMP_FILE
echo "borgbackup_last_size_dedup{repo="{{ repo_url }}"} $LAST_SIZE_DEDUP" >> $TMP_FILE
echo "borgbackup_total_size{repo="{{ repo_url }}"} $TOTAL_SIZE" >> $TMP_FILE
echo "borgbackup_total_size_compressed{repo="{{ repo_url }}"} $TOTAL_SIZE_COMPRESSED" >> $TMP_FILE
echo "borgbackup_total_size_dedup{repo="{{ repo_url }}"} $TOTAL_SIZE_DEDUP" >> $TMP_FILE
{% endfor %}
# move temp file to output file
mv $TMP_FILE $PROM_FILE
chown prometheus:prometheus $PROM_FILE
echo "created BorgBackup statistic for $COUNTER backups in $PROM_FILE"
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment