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 @@ ...@@ -9,24 +9,52 @@
- borgbackup - borgbackup
- logrotate - logrotate
- moreutils - 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 - name: get secrets from server 1
slurp: src={{ item }} slurp: src={{ item }}
with_items: with_items:
- /srv/borgbackup/repo_passphrase - /srv/borgbackup/repo_passphrase
- /srv/borgbackup/repo_url
register: borgbackup_secrets register: borgbackup_secrets
- name: get secrets from server 2 - name: get secrets from server 2
set_fact: set_fact:
repo_passphrase: "{{ borgbackup_secrets.results | selectattr('item', 'equalto', '/srv/borgbackup/repo_passphrase') | map(attribute='content') | list | first | b64decode | regex_replace('\\s', '') }}" 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 # BorgBackup Scripte erstellen
- name: BorgBackup Script erstellen - name: BorgBackup Scripte erstellen
template: src={{ item }} dest=/opt/{{ item }} mode=o+x template: src={{ item }} dest=/srv/borgbackup/{{ item }} mode=o+x
with_items: with_items:
- "borgbackup-check.sh" - "borgbackup-check.sh"
- "borgbackup-create.sh" - "borgbackup-create.sh"
...@@ -35,6 +63,7 @@ ...@@ -35,6 +63,7 @@
- "borgbackup-init.sh" - "borgbackup-init.sh"
- "borgbackup-list.sh" - "borgbackup-list.sh"
- "borgbackup-mount.sh" - "borgbackup-mount.sh"
- "borgbackup-prometheus.sh"
- name: BorgBackup log folder erstellen - name: BorgBackup log folder erstellen
file: file:
...@@ -42,7 +71,18 @@ ...@@ -42,7 +71,18 @@
state: "directory" state: "directory"
- name: BorgBackup LogRotate config erstellen - 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 - name: Cronjob für BorgBackup Prometheus export
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" 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"
\ No newline at end of file
#!/bin/bash #!/bin/bash
# Überprüfung der Backup Archive
export BORG_PASSPHRASE="{{repo_passphrase}}" 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 {% endfor %}
borg check $1 $2 $3 --info --show-rc {{repo_url}} \ No newline at end of file
#!/bin/bash #!/bin/bash
export BORG_PASSPHRASE="{{repo_passphrase}}" 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 # anschließend Bereinigung
# abschließend Integritätscheck # 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 %} {% for directory in borgbackup_directories %}
{{ directory }} \ {{ directory }} \
{% endfor %} {% endfor %}
...@@ -17,3 +23,5 @@ borg prune $1 $2 $3 --info --show-rc --list {{repo_url}} \ ...@@ -17,3 +23,5 @@ borg prune $1 $2 $3 --info --show-rc --list {{repo_url}} \
{% endfor %} {% endfor %}
&& \ && \
borg check $1 $2 $3 --info --show-rc {{repo_url}} borg check $1 $2 $3 --info --show-rc {{repo_url}}
{% endfor %}
#!/bin/bash #!/bin/bash
export BORG_PASSPHRASE="{{repo_passphrase}}" export BORG_PASSPHRASE="{{repo_passphrase}}"
export BORG_RSH="ssh -i /srv/borgbackup/repo_sshkey"
# Löschen eines Backups # 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]:" echo "BackupName, followed by [ENTER]:"
read target 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 #!/bin/bash
export BORG_PASSPHRASE="{{repo_passphrase}}" 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]:" BACKUPS=$(borg list $1 $2 $3 --info --show-rc --remote-path borg1 {{repo_url}})
read target
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 #!/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_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 #!/bin/bash
export BORG_PASSPHRASE="{{repo_passphrase}}" 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 #!/bin/bash
export BORG_PASSPHRASE="{{repo_passphrase}}" 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