Tarsnap
Es gilt wie immer folgender Spruch: Kein Backup - kein Mitleid!
Ich habe mich deshalb für Tarsnap entschieden.
Nachdem man sich auf der Webseite ein Konto angelegt hat, wird auf dem Host der offizielle Client installiert:
cd /usr/ports/sysutils/tarsnap
make install clean
Danach wird ein Blick in die /usr/local/etc/tarsnap.conf
geworfen, und
sichergestellt das der Ort für das keyfile
und des cachedir
s passt.
Und nun sollte man sich ein keyfile
erstellen:
tarsnap-keygen \
--keyfile /root/tarsnap-machine.key \
--user user@example.org \
--machine machine
Diesen Key sollte man sich unbedingt irgendwo anders speichern, sonst kommt man nicht mehr an das Backup ran!
Ausdrucken, USB-Stick im Bankschließfach, irgendwas anderes kreatives …
Sollte man in der Firewall den ausgehenden Traffic filtern, so muss man sich dazu ein Loch bohren:
- Outbound TCP Traffic auf Port
9279
erlauben
Die Netzwerk Dokumentation hat genaueres dazu.
Grundlegende Befehle
Archiv erzeugen:
tarsnap -c \
-f name-$(date "+%Y-%m-%d_%H-%M-%S") \
/what/to/backup
Vorhandene Archive einsehen:
tarsnap --list-archives | sort
Ein Archiv löschen:
tarsnap -d \
-f name-YYYY-mm-dd_HH-MM-SS
Inhalt eines Archivs anzeigen lassen:
tarsnap -tv \
-f name-YYYY-mm-dd_HH-MM-SS
Ein Archiv wiederherstellen:
mkdir -p /tmp/restore
cd /tmp/restore
tarsnap -x \
-f name-YYYY-mm-dd_HH-MM-SS
Who needs backups, if you can have restore?
Tarsnapper
Meine Motivation auf Dauer eine ganze Menge wirrer Shell-Scripte zu pflegen ist recht gering. Einfache Dinge gehen noch, aber dann noch ein Generationenprinzip zu implementieren ist mir zu aufwändig.
Nach ein länglicher Recherche und Querlesen von Code habe ich mich für Tarsnapper entschieden.
Das gibt es in den Ports - solange Python 2 noch die Standard Version auf FreeBSD ist nutze ich diese (gibt auch einen Port für Python 3):
cd /usr/ports/sysutils/py-tarsnapper
make install clean
Die Konfiguration dazu habe ich unter /usr/local/etc/tarsnapper.yaml
abgelegt und schaut in etwa so aus:
deltas: 1d 7d 30d
target: /machine/$name-$date
jobs:
etc:
sources:
- /etc
- /usr/local/etc
excludes:
- /etc/defaults
fixed:
source: /tmp/tarsnap-fixed
exec_before: |
/bin/mkdir -p /tmp/tarsnap-fixed;
/bin/cat /etc/fstab > /tmp/tarsnap-fixed/fstab;
/sbin/dmesg > /tmp/tarsnap-fixed/dmesg;
/sbin/gpart show > /tmp/tarsnap-fixed/gpart_show;
/sbin/zfs list > /tmp/tarsnap-fixed/zfs_list;
/sbin/zfs mount > /tmp/tarsnap-fixed/zfs_mount;
/sbin/zpool list > /tmp/tarsnap-fixed/zpool_status;
exec_after: /bin/rm -rf /tmp/tarsnap-fixed;
db-jail:
source: /tmp/tarsnap-db-jail
exec_before: |
/bin/mkdir -p /tmp/tarsnap-db-jail;
/usr/sbin/jexec -U postgres database pg_dumpall > \
/tmp/tarsnap-db-jail/dump-jail.sql;
exec_after: /bin/rm -rf /tmp/tarsnap-db-jail;
Ist ein Serviervorschlag, und kann nach Belieben angepasst werden.
-
etc
Job: Einfach nur die Konfigurationen - Nothing special there -
fixed
Job: Die FreeBSD Handbuchseite zu Backups empfiehlt, ein paar grundlegende Daten zur Recovery bereit zu halten:- Partitionslayout
- Mountpoints
- Genutzte Treiber
- … alles was hilfreich zur Systemwiederherstellung ist
Die
exec_before
undexec_after
Direktiven werden laut Quellcode direkt an eine Shell weitergeleitet. Damit alles lesbar bleibt nutze ich einen Block Skalar (|
).Ich habe konsequent volle Pfade für die Befehle genutzt, damit es keine Probleme gibt, wenn das ganze in der Crontab läuft.
-
db-jail
Job: Habe PostgreSQL innerhalb einer Jail am laufen. Ein Backup von Datenbanken im Betrieb empfiehlt sich nicht, also nutze ichpg_dumpall
um alles zu exportieren.Um von außen an die Jail ranzukommen nutze ich
jexec
.
Als letzten Schritt wird das ganze noch in die Crontab geworfen:
23 5 * * * /usr/local/bin/tarsnapper -c /usr/local/etc/tarsnapper.yaml -q - make
last update: 2024-01-28 12:40:56 +0100