open:it:backup
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
open:it:backup [2024/07/22 10:00] – [Daten von Remote-System holen] Kai | open:it:backup [2025/05/13 09:28] (aktuell) – Kai | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== Backup ====== | ====== Backup ====== | ||
+ | Hier werden zwei unterschiedliche Konzepte diskutiert. \\ | ||
+ | BorgBackup ist eine einfache OSS Lösung um zum Beispiel eine Remote-Storagebox (hier von Hetzner) als Speichermedium zu nutzen. Man muss sich jedoch auch bewusst sein, dass durch Borg jede Datei genau einmal gespeichert wird. Sollte eine Datei z.B. durch einen Festplattenfehler beschädigt sein, ist diese in allen Backups beschädigt. Deshalb gehört es zum Best Practice sehr wichtige Daten in mehr als einem Repository zu speichern! \\ | ||
+ | Neben Borg wird ein mit eigenen Scripten erstelltes Backup vorgestellt, | ||
===== BorgBackup ===== | ===== BorgBackup ===== | ||
- | [[https:// | + | ++++ Quellen: | |
- | Die Deduplizierung sorgt bei Borg Backups für einen sehr effizienten Speicherverbrauch und hohe Geschwindigkeit. Man muss sich jedoch auch bewusst sein, dass dadurch jede Datei genau einmal gespeichert wird. Sollte eine Datei z.B. durch einen Festplattenfehler beschädigt sein, ist diese in allen Backups beschädigt. Deshalb gehört es zum Best Practice sehr wichtige Daten in mehr als einem Repository zu speichern! \\ | + | |
- | + | ||
- | Quellen & Tutorials: | + | |
* [[https:// | * [[https:// | ||
* [[https:// | * [[https:// | ||
* [[https:// | * [[https:// | ||
+ | ++++ | ||
+ | [[https:// | ||
+ | Die Deduplizierung sorgt bei Borg Backups für einen sehr effizienten Speicherverbrauch und hohe Geschwindigkeit. \\ | ||
+ | |||
Bei diesem Beispiel wurde ein externe Storage-Box von Hetzner eingesetzt (your-storagebox.de). Der User u123456 muss entsprechend Vorgaben der Storage-Box angepasst werden. \\ | Bei diesem Beispiel wurde ein externe Storage-Box von Hetzner eingesetzt (your-storagebox.de). Der User u123456 muss entsprechend Vorgaben der Storage-Box angepasst werden. \\ | ||
Soll das Backup auf einem lokalen Laufwerk oder Verzeichnis gesichert werden, ist der Pfad: | Soll das Backup auf einem lokalen Laufwerk oder Verzeichnis gesichert werden, ist der Pfad: | ||
Zeile 19: | Zeile 23: | ||
sudo apt install borgbackup | sudo apt install borgbackup | ||
- | Key generieren (sofern nicht bereits vorhanden) und auf Storage-Box übertragen, | + | ==== Schlüssel tauschen ==== |
+ | Key generieren (sofern nicht bereits vorhanden) und auf Storage-Box übertragen, | ||
ssh-keygen -t rsa -b 4096 | ssh-keygen -t rsa -b 4096 | ||
Zeile 41: | Zeile 46: | ||
ssh -p23 u123456@u123456.your-storagebox.de mkdir -p backups/ | ssh -p23 u123456@u123456.your-storagebox.de mkdir -p backups/ | ||
- | Backup-Ordner auf der Storage-Box initialisieren | + | Backup-Ordner auf der Storage-Box initialisieren. Passwort wird abgefragt. Auf einer sicheren Storagebox wäre das doppelte Sicherheit, kann daher ggf. ohne Passwort erfolgen > dann einfach leerlassen. Muss individuell und fallabhängig entschieden werden. Für sicherheitsrelevante Daten ist es vermutlich angezeigt, ein Passwort zu vergeben. |
borg init --encryption=repokey ssh:// | borg init --encryption=repokey ssh:// | ||
Zeile 64: | Zeile 69: | ||
Liste Dateien eines Backups in eine Text-Datei schreiben | Liste Dateien eines Backups in eine Text-Datei schreiben | ||
borg list ssh:// | borg list ssh:// | ||
+ | |||
+ | Optionen: nur Pfad und Dateiname, sortiert | ||
+ | borg list --short ssh:// | ||
==== Daten wiederherstellen ==== | ==== Daten wiederherstellen ==== | ||
Zeile 74: | Zeile 82: | ||
borg extract ssh:// | borg extract ssh:// | ||
- | ==== Backups löschen ==== | + | ==== Backups |
- | Backups | + | Backups |
borg list ssh:// | borg list ssh:// | ||
Zeile 83: | Zeile 91: | ||
Alle Backups zu einem Server/PC löschen (hier mctest) | Alle Backups zu einem Server/PC löschen (hier mctest) | ||
borg delete ssh:// | borg delete ssh:// | ||
+ | |||
+ | ==== Backups auomatisiert löschen ==== | ||
+ | Damit der Speicherplatz mit der Zeit nicht verbraucht wird, sollten regelmäßig, | ||
+ | |||
+ | borg prune --dry-run -v --list --keep-within=1d --keep-daily=7 --keep-weekly=4 --keep-monthly=12 ssh:// | ||
+ | |||
+ | Dieser Befehl (mit --dry-run) zeigt die Backups/ | ||
+ | Bedingungen in diesem Beispiel: 7 aus den letzten Tagen, 4 der letzten Wochen und 12 der letzten Monate. \\ | ||
+ | Das System identifiziert dies automatisch. \\ | ||
+ | |||
+ | Pfad und Zugangsdaten anpassen. \\ | ||
+ | O.a. Code führt nur einen Trockenlauf aus. \\ | ||
+ | Scharfschaltung: | ||
+ | |||
+ | Freigeben des nicht mehr benötigten Speicherplatzes: | ||
+ | borg compact ssh:// | ||
+ | |||
==== Backup automatisieren ==== | ==== Backup automatisieren ==== | ||
Zeile 96: | Zeile 121: | ||
# | # | ||
## Setzten von Umgebungsvariablen | ## Setzten von Umgebungsvariablen | ||
- | ## falls nicht der Standard SSH Key verwendet wird können Sie hier den Pfad zu Ihrem private Key angeben | + | ## Pfad zu Ihrem private Key, falls nicht der Standard SSH Key verwendet wird |
export BORG_RSH=' | export BORG_RSH=' | ||
- | ## Damit das Passwort | + | ## Passwort |
- | export BORG_PASSPHRASE=" | + | ## Andernfalls würde |
+ | export BORG_PASSPHRASE=" | ||
+ | ## This has to be set when the repository has been created by user and the script is called by cron | ||
+ | export BORG_UNKNOWN_UNENCRYPTED_REPO_ACCESS_IS_OK=yes | ||
| | ||
## Setzten von Variablen | ## Setzten von Variablen | ||
Zeile 105: | Zeile 133: | ||
export BACKUP_USER=' | export BACKUP_USER=' | ||
export REPOSITORY_DIR=' | export REPOSITORY_DIR=' | ||
- | | + | |
export REPOSITORY=" | export REPOSITORY=" | ||
| | ||
Zeile 114: | Zeile 142: | ||
echo "###### | echo "###### | ||
| | ||
- | ## An dieser Stelle können verschiedene Aufgaben vor der Übertragung der Dateien ausgeführt werden, wie z.B. | + | ## An dieser Stelle können verschiedene Aufgaben vor der Übertragung der Dateien ausgeführt werden, |
+ | ## wie z.B. | ||
## - Liste der installierten Software erstellen | ## - Liste der installierten Software erstellen | ||
## - Datenbank Dump erstellen | ## - Datenbank Dump erstellen | ||
Zeile 120: | Zeile 149: | ||
## Dateien ins Repository übertragen | ## Dateien ins Repository übertragen | ||
## Gesichert werden hier beispielsweise die Ordner root, etc, var/www und home | ## Gesichert werden hier beispielsweise die Ordner root, etc, var/www und home | ||
- | ## Ausserdem finden Sie hier gleich noch eine Liste Excludes, | + | ## Ausserdem finden Sie hier gleich noch eine Liste Excludes, |
+ | ## somit per default ausgeschlossen werden. | ||
| | ||
echo " | echo " | ||
Zeile 140: | Zeile 170: | ||
echo "###### | echo "###### | ||
- | Ausführbar machen | + | === Cronjob einrichten === |
+ | Datei Ausführbar machen | ||
sudo chmod u+x / | sudo chmod u+x / | ||
- | Testen | + | ggf. Testen |
sudo / | sudo / | ||
- | |||
Einfügen in crontab | Einfügen in crontab | ||
sudo nano / | sudo nano / | ||
0 0 * * * root / | 0 0 * * * root / | ||
- | Hier Start täglich um 0:00 Uhr | + | Hier Start täglich um 0:00 Uhr.\\ |
+ | **Voraussetzungen**: | ||
+ | * das ausführende System muss zu der angegebenen Zeit in Betrieb sein. Der Job wird nicht bei einem späteren Einschalten nachgeholt! | ||
+ | * Wenn das Script durch root ausgeführt werden soll, für die Sicherung von Systemdateien vermutlich erforderlich, | ||
+ | === Anacronjob === | ||
+ | Läuft ein System | ||
+ | Zur Verfügung stehen die Zyklen: | ||
+ | * täglich >> Ordner / | ||
+ | * wöchentlich >> Ordner / | ||
+ | * monatlich >> Ordner / | ||
+ | Die ausführbahren Scripte müssen in den entsprechenden Ordnern liegen. | ||
===== Selbst programmiertes, | ===== Selbst programmiertes, | ||
- | Siehe auch: https:// | + | ++++ Quellen: | |
+ | * https:// | ||
+ | ++++ | ||
Die vorgestellten Scripte sichern regelmäßig und automatisiert ausgewählte Dateien in gepackten Datein. \\ | Die vorgestellten Scripte sichern regelmäßig und automatisiert ausgewählte Dateien in gepackten Datein. \\ | ||
Zeile 201: | Zeile 243: | ||
Ersetzen: SOURCE, < | Ersetzen: SOURCE, < | ||
Leerzeichen am Ende der SOURCE! \\ | Leerzeichen am Ende der SOURCE! \\ | ||
+ | === Inhalt gepackter Dateien anzeigen === | ||
+ | tar -tvf backup_gepackt.tar.gz | ||
+ | |||
+ | Inhaltsverzeichnis in Datei schreiben | ||
+ | tar -tvf backup_gepackt.tar.gz > content.txt | ||
+ | |||
+ | === Dateien entpacken === | ||
Entpacken (in aktuelles Verzeichnis): | Entpacken (in aktuelles Verzeichnis): | ||
tar -xf backup_gepackt.tar.gz | tar -xf backup_gepackt.tar.gz | ||
Zeile 214: | Zeile 263: | ||
=== Komplexes System === | === Komplexes System === | ||
Das System sichert regelmäßig((Zyklus definiert durch / | Das System sichert regelmäßig((Zyklus definiert durch / | ||
- | < | + | < |
- | Der Speicherbedarf wächst durch dieses System kontinuierlich. \\ | + | Der Speicherbedarf wächst durch dieses System kontinuierlich((in dem Rahmen, in dem es Änderungen am Datenbestand gab)). \\ |
Ältere Dateien müssen daher regelmäßig manuell gelöcht oder verschoben werden. \\ | Ältere Dateien müssen daher regelmäßig manuell gelöcht oder verschoben werden. \\ | ||
In keinem Fall sollte ein Backup auf der System-Partition gesichert werden, da dieses, sollte der Speicherplatz restlos verbraucht sein, ggf. unbrauchbar oder unausführbar werden könnte. \\ | In keinem Fall sollte ein Backup auf der System-Partition gesichert werden, da dieses, sollte der Speicherplatz restlos verbraucht sein, ggf. unbrauchbar oder unausführbar werden könnte. \\ | ||
Zeile 270: | Zeile 319: | ||
umount " | umount " | ||
exit | exit | ||
- | |||
==== Backup ausführen ==== | ==== Backup ausführen ==== | ||
Zeile 293: | Zeile 341: | ||
* jeden Tag um 4:00 Uhr -> SQL-Datenbank(en) | * jeden Tag um 4:00 Uhr -> SQL-Datenbank(en) | ||
* jeden 2. Tag im Monat um 3:00 Uhr -> Dateien packen | * jeden 2. Tag im Monat um 3:00 Uhr -> Dateien packen | ||
+ | |||
+ | Voraussetzung: | ||
+ | Andernfalls kann das über einen [[# | ||
==== Daten von Remote-System holen ==== | ==== Daten von Remote-System holen ==== | ||
Zeile 311: | Zeile 362: | ||
Sind lokaler User und Remoteuser identisch, kann "< | Sind lokaler User und Remoteuser identisch, kann "< | ||
- | === Automatisiert | + | Auch hier ist die Automation |
- | Voraussetzung: | + | |
- | + | ||
- | sudo nano / | + | |
- | # / | ||
- | 0 4 * * 7 < | ||
- | Ausführung: | ||
- | * jeden 7. Tag der Woche (Sonntag) um 4:00 Uhr | ||
- | ~~DISCUSSION~~ |
open/it/backup.1721635226.txt.gz · Zuletzt geändert: von Kai