Entwickelt: 2022 ... 2024
Natürlich mache ich nicht erst seit 2 Jahren Backups - irgendwann habe ich aber mal beschlossen, dass es Zeit für ein Teilchen ist, das ich auf allen Rechnern nutzen und mit dem ich die unterschiedlichen Backup-Anforderungen auf Clients und Servern möglichst einfach abdecken kann.
Was und wie will ich sichern?
Das Backup-Script
Das rechnerspezifische Environment
besteht für jeden Rechner aus einer Datei mit fest definierter Struktur, ist am besten mit ein paar Beispielen
zu erklären. Ich habe bei Mehrfach-Attributen (z. B. für zu sichernde Verzeichnis-Strukturen) Arrays definiert,
deren Elemente teilweise über Trennzeichen Ausnahmen oder zusätzliche Optionen definieren.
Sieht auf den ersten Blick etwas unübersichtlich aus, ich wollte das so kompakt wie möglich halten.
Beispiel für einen Client, an dem auch die USB-Laufwerke für die 2. + 3. Generation hängen (Zeilen umgebrochen zur Übersicht):
jan@jake:~/bin$ cat -n backup_env.sh 1 # environment for system backup 2 ### TODO customize for each system! 3 # 2nd + 3rd gen backup to usb? leave empty if not 4 export BKP_USB_2GEN=/media/jan/Backup_2TB 5 export BKP_USB_3GEN=/media/jan/Backup2_4TB 6 # directories and excludes: /dir/:[excl[#excl]] - /etc should be included for every system 7 declare -a directories=( "/etc/:" "/home/jan/:.cache" "/datadisk/:/audio#/devel/macros/.data" ) 8 # databases: type; types = postgres|mariadb - leave empty if there are no databases 9 declare -a db_types=( "postgres" ) 10 # gitlab backup command - leave empty if no gitlab is present 11 export GITLAB_BKP_CMD= 12 # encrypted devices: device#mount_point - leave empty if no devices exist 13 declare -a enc_fs=( "/datadisk/devel/macros/.data/data_dev#data_mount" ) 14 # pre and post backup scripts (i. e. stop / start services): user|-:command 15 declare -a pre_bkp_scripts=( "jan:/home/jan/bin/bkp_git_repos.sh" "jan:/home/jan/bin/upd_docs_sites.sh" ) 16 declare -a post_bkp_scripts=( )
Beispiel für den Server, der Gitlab und eine docker-compose-Anwendung beherbergt (Zeilen umgebrochen zur Übersicht), unten nur die Neuerungen im Vergleich zum 1. Beispiel:
jan@jack:~/bin$ cat -n backup_env.sh 1 # environment for system backup 2 ### TODO customize for each system! 3 # 2nd + 3rd gen backup to usb? leave empty if not 4 export BKP_USB_2GEN= 5 export BKP_USB_3GEN= 6 # directories and excludes: /dir/:[excl[#excl]] - /etc should be included for every system 7 declare -a directories=( "/etc/:" "/home/jan/:" "/srv/:/gitlab-data" ) 8 # databases: type; types = postgres|mariadb - leave empty if there are no databases 9 declare -a db_types=( ) 10 # gitlab backup command - leave empty if no gitlab is present 11 export GITLAB_BKP_CMD=/opt/gitlab/bin/gitlab-backup 12 # encrypted devices: device#mount_point - leave empty if no devices exist 13 declare -a enc_fs=( ) 14 # pre and post backup scripts (i. e. stop / start services): user|-:command 15 declare -a pre_bkp_scripts=( "git:/home/jan/bin/cleanup_gitlab-bkp.sh" "jan:/home/jan/bin/dump_pg-db.sh" "jan:/home/jan/bin/dc_down.sh" ) 16 declare -a post_bkp_scripts=( "jan:/home/jan/bin/dc_upd.sh" )
Installation: Ganz einfach - Entpacken (am besten in $HOME/bin, geht aber überall da, wo Du Ausführungsrecht hast), Environment-Datei anhand der o. g. Beispiele zusammenbauen - fertig.
Download: bkp_system.tgz
sha256: 7d564e53eddf402b63de85dc2a31da937a9ec4d741baa241867fdbe90c978909