Backup und Archivierung
Florian Lohoff
f at zz.de
Wed Jan 3 22:54:06 CET 2024
Frohes Neues.
Da machst du aber ein universelles Fass auf ;)
Ich fasse hier mal so zusammen was ich mache mit backup, archive,
mail etc
On Fri, Dec 29, 2023 at 08:42:54PM +0100, Cord Beermann wrote:
> Hallo,
>
> da meine aktuellen Methoden Backups (von Servern) und Archivierung (von
> Dokumenten und Emails) mittlerweile sehr sperrig (sowohl vom Platzbedarf, als
> auch vom Handling) geworden sind möchte ich mich bei Euch erkundigen
> wie Ihr diese Probleme löst:
>
> * Dokumente:
> ich experimentiere gerade mit Paperless-ngx.com
>
> * Fotos und Musik
> rsync auf andere Platten
>
> * Emails:
> verschiedene teilweise vielfache Sicherung von mbox-Dateien, das muss
> doch besser gehen?
>
> * Systembackups:
> rsnapshot per rsync. Immer wieder Probleme das diese Daten massiv wachsen
> weil sinnlose Daten mitgesichert werden. Eigentlich sollte es doch reichen
> bei Debian-systemen die Config, die veränderten Daten und eine
> Paketliste zu sichern?
>
> * Offsite:
> Bisher hin und wieder eine Sicherheitskopie auf weitere Platten. Ich habe
> 1TByte bei rsync.net zur Verfügung, da würde ich Daten
> verschlüsselt ablegen wollen.
>
> * was noch?
> Übersehe ich etwas?
Ordnung, sauberes Konzept, Überwachung
Backup
======
Ich sichere alle systemen mit borg backup lokal auf eine 2. platte. Das
ist normalerweise immer /backup/borg/$system/$type wobei type "sys" oder
"postgresql-foobar" oder sowas ist. borg macht das thema deduplizierung,
compression und es gibt über die CACHEDIR.TAG files eine möglichkeit
schnell dinge/directories zu excluden.
Da wo ich keine 2. platte habe (Notebook z.b.) sichere ich remote
via borg und ssh. Notebook alle 4 stunden.
Expire/Purge der borgs läuft immer repository local - D.h. das
backup/client kümmert sich nicht nicht um purge sondern die maschine
mit dem repository.
Offsite backup mache ich indem ich diese borg directories nach "hause"
sichere über rsync.
D.h.
- ich habe das system
- das lokale backup
- und ein offsite/remote backup
Damit sind alle "live" daten abgefrühstückt.
Ich nehme borg weil ich die backups mounten kann, die aber nicht als
millionen von files irgendwo rumfliegen, komprimiert und dedupliziert
sind.
Grundsätzlich überwache ich alle backups, in den scripten mit einem
passive submit in mein icinga2, für mobile clients die ich sichere
überwache ich das borg repository auf das letzte backup.
Archive
=======
Jetzt das Archiv. Archiv ist ja was anderes als ein backup. Ein Archiv
muss auch gebackuped werden.
D.h. wenn ich ein system archiviere purge ich das borg repo runter auf
das letzte backup, und schiebe dann das borg repo in die live Daten
damit es mitgesichert wird. Typischerweise
/scratch/local/archive/
EMail
-----
Emails sind bei mir alles in mbox files. Ich habe alles in monatsordnern
archiviert - D.h. seit 1996 hab ich im .procmail eine rule die alle
mails dupliziert in monatsorder - archive/received-YYYYMM und
die sents gehen in archive/sent-YYYYMM.
Am ende des Jahres werden die verschoben nach
archive/YYYY/received-YYYYMM
und alle gzip komprimiert. Zum wiederfinden von zeugs indiziere ich
mails mit "mairix" - der kann komprimierte mboxes lesen und indizieren.
Die mbox files laufen einfach mit in das borg backup rein.
flo at pax:~$ du -sh Mail/
45G Mail/
@pax:~$ du -sh Mail/archive/
9,4G Mail/archive/
Platzbedarf
===========
Standort 1:
NAS zuhause ~2TB live Daten (Single Disk)
Backup drive 8TB (Single Disk)
Standort 2:
NAS zuhause ~8TB live Daten (Single Disk)
Backup drive 14TB (Single Disk)
System 1 Hetzner:
2 TB System (Raid1), 2TB Backup (Single Disk)
System 2 Hetzner:
1 TB System (Raid1), 2TB Backup (Single Disk)
Die NAS von Standort 1 und Standort 2 haben noch einen unison two-way
sync.
Standort 1 als Beispiel:
root at pobox:~# df -h /scratch/
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/ecrypt 1,8T 1,5T 235G 87% /scratch
root at pobox:~# du -sh /backup/borg/pobox/scratch/
1,2T /backup/borg/pobox/scratch/
D.h. das Backup mit
borg prune -v ${BASE}/${repo} \
--keep-daily=7 \
--keep-weekly=4 \
--keep-monthly=6
braucht weniger als die original Daten bei wenig churn in dem NAS.
Filesystemstandard
==================
/scratch/local - Lokaler storage
/scratch/local/archive - Archiv
/scratch/$sysname - ggfs cross NFS mounts wenn nötig (notebook)
/backup - Backup storage
/backup/borg - Borg backup
/backup/remote - Offsite backups
Backup script
=============
Klassisches Backup script für Borg was ich überall verwende. Ich sichere
IMMER über ssh - auch wenn das lokal ist.
So sehen dann die crontabs aus - Grundsätzlich geht aller output ins
syslog:
# System
4 1 * * * root /usr/local/sbin/backup 2>&1 | logger -t backup
# Databases
5 2 * * * postgres /usr/local/sbin/db-backup-borg noteisdue 2>&1 | logger -t dbbackup-noteisdue
7 2 * * * postgres /usr/local/sbin/db-backup-borg plbuildings 2>&1 | logger -t dbbackup-plbuildings
10 2 * * * postgres /usr/local/sbin/db-backup-borg routeqa 2>&1 | logger -t dbbackup-routeqa
20 2 * * * postgres /usr/local/sbin/db-backup-borg addresses 2>&1 | logger -t dbbackup-addresses
Und das system script:
#!/bin/sh
set -e
export BORG_RSH="ssh -o batchmode=yes -i ~/.ssh/borgbackup"
REPO="ssh://borg@pax.zz.de/backup/borg/pax"
export BORG_CACHE_DIR=/var/cache/borg/
export BORG_UNKNOWN_UNENCRYPTED_REPO_ACCESS_IS_OK=yes
export BORG_RELOCATED_REPO_ACCESS_IS_OK=yes
nice -n 19 \
ionice -c idle \
borg create ${REPO}::sys-`date +%Y%m%d%H%M` \
/ \
-C lz4 \
--warning \
-v \
--stats \
--list \
--exclude-caches \
--exclude "/backup" \
--exclude "/scratch" \
--exclude "/media" \
--exclude "/mnt" \
--exclude "/proc" \
--exclude "/tmp" \
--exclude "/var/tmp" \
--exclude "/dev" \
--exclude "/sys" \
--exclude "/run" \
--exclude "/nfs4" \
--exclude "/nfsroot" \
--exclude "/var/lib/postgresql/" \
2>&1 \
| egrep -v "^[Udshcb] "
/usr/local/sbin/icinga2-submit-passive \
--user passive \
--password passivepassword \
--host pax.zz.de \
--service "system backup" \
--ok \
--status "borg script ended with zero exit code"
Und das backup script für die Datenbanken (Alles postgres)
#!/bin/sh
set -e
export BORG_UNKNOWN_UNENCRYPTED_REPO_ACCESS_IS_OK=yes
DB=$1
if [ -z "${DB}" ]; then
exit 1
fi
pg_dump -C ${DB} \
| borg create --stats -v -C lz4 \
ssh://borg@pax.zz.de/backup/borg/db/${DB}::${DB}-`date +%Y%m%d%H%M` -
/usr/local/sbin/icinga2-submit-passive \
--user passive \
--password password \
--host pax.zz.de \
--service "db ${DB} backup" \
--ok \
--status "borg script ended with zero exit code"
Flo
--
Florian Lohoff f at zz.de
Any sufficiently advanced technology is indistinguishable from magic.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://lug-owl.de/pipermail/linux/attachments/20240103/81a1ce82/attachment.sig>
More information about the Linux
mailing list