Zum Inhalt springen

Duply: Unterschied zwischen den Versionen

Aus Foxwiki
Keine Bearbeitungszusammenfassung
Zeile 3: Zeile 3:


== Beschreibung ==
== Beschreibung ==
duply ist ein Shell-Frontend für duplicity, das die Verwendung vereinfacht, indem Einstellungen für jedes Backup in Profilen verwaltet werden. Es unterstützt die Ausführung von mehreren Befehlen als Stapelverarbeitung. Damit sind einzeilige cron-Einträge möglich und der Benutzer kann Skripte verwenden, die vor oder nach dem Backup ausgeführt werden. Alle duplicity-Backends werden unterstützt. Der frühere Name von duply war ftplicity.
duply ist ein Shell-Frontend für duplicity, das die Verwendung vereinfacht, indem Einstellungen für jedes Backup in Profilen verwaltet werden
* Es unterstützt die Ausführung von mehreren Befehlen als Stapelverarbeitung
* Damit sind einzeilige cron-Einträge möglich und der Benutzer kann Skripte verwenden, die vor oder nach dem Backup ausgeführt werden
* Alle duplicity-Backends werden unterstützt
* Der frühere Name von duply war ftplicity


; Vereinfacht die Ausführung von Duplicity
; Vereinfacht die Ausführung von Duplicity
Zeile 21: Zeile 25:


; Hinweis
; Hinweis
: Wenn der Ordner '/etc/duply' existiert, werden die Profile für den Superuser Benutzer root dort gesucht und erstellt werden.
: Wenn der Ordner '/etc/duply' existiert, werden die Profile für den Superuser Benutzer root dort gesucht und erstellt werden


; Protokolle
; Protokolle
Zeile 71: Zeile 75:
== Anwendung ==
== Anwendung ==
; Erstmalige Verwendung (Profilerstellung)
; Erstmalige Verwendung (Profilerstellung)
  duply <Profil> erstellen
duply <Profil> erstellen


; Verwendung im Einzel- oder Batch-Modus  
; Verwendung im Einzel- oder Batch-Modus
  duply <profile> <Befehl>[[_|+|-]<Befehl>[_|+|-]...] [<Optionen> ...]
duply <profile> <Befehl>[[_|+|-]<Befehl>[_|+|-]...] [<Optionen> ...]


; Für Stapel können die bedingten Trennzeichen auch als Pseudo-Befehle geschrieben werden und(+), oder(-)
; Für Stapel können die bedingten Trennzeichen auch als Pseudo-Befehle geschrieben werden und(+), oder(-)
Zeile 100: Zeile 104:


=== Pre- und Post-Skripte ===
=== Pre- und Post-Skripte ===
* Das pre-Skript wird direkt vor dem Backup ausgeführt, das post-Skript direkt nach dem Backup.
* Das pre-Skript wird direkt vor dem Backup ausgeführt, das post-Skript direkt nach dem Backup
* Mit diesen Skripten können beispielsweise Snapshots von LVM-Volumes oder Dumps von SQL Datenbanken gemacht und in das Backup einbezogen werden.
* Mit diesen Skripten können beispielsweise Snapshots von LVM-Volumes oder Dumps von SQL Datenbanken gemacht und in das Backup einbezogen werden
* Die files <tt>pre</tt> und <tt>post</tt> müssen im jeweiligen duply Verzeichnis liegen (Bsp.: /home/user/.duply/backup/) und ausführbar sein.
* Die files <tt>pre</tt> und <tt>post</tt> müssen im jeweiligen duply Verzeichnis liegen (Bsp.: /home/user/.duply/backup/) und ausführbar sein
* Werden die pre/post Scripte nicht wie erhofft ausgeführt (beispielsweise bei den Sicherchungs-Methoden "full/incr"), können diese explizit angegeben werden: <tt>pre_incr_post</tt>
* Werden die pre/post Scripte nicht wie erhofft ausgeführt (beispielsweise bei den Sicherchungs-Methoden "full/incr"), können diese explizit angegeben werden: <tt>pre_incr_post</tt>


; Beispiel
; Beispiel
Hier ein Beispiel für ein PRE/POST Skript welches vor dem Backup einen SQL-Dump aller Datenbanken erstellt und diesen nach dem Backup wieder löscht.
Hier ein Beispiel für ein PRE/POST Skript welches vor dem Backup einen SQL-Dump aller Datenbanken erstellt und diesen nach dem Backup wieder löscht


; pre-Datei
; pre-Datei
Zeile 122: Zeile 126:
  CND_<PREV|NEXT> (condition before/after)
  CND_<PREV|NEXT> (condition before/after)


The CMD_* variables were introduced to allow different actions according to the command the scripts were attached to e.g. 'pre_bkp_post_pre_verify_post' will call the pre script two times, with CMD_NEXT variable set to 'bkp' on the first and to 'verify' on the second run. CMD_ERR holds the exit code of the CMD_PREV .
The CMD_* variables were introduced to allow different actions according to the command the scripts were attached to e.g. 'pre_bkp_post_pre_verify_post' will call the pre script two times, with CMD_NEXT variable set to 'bkp' on the first and to 'verify' on the second run
* CMD_ERR holds the exit code of the CMD_PREV  


===exclude===
===exclude===
* duply arbeitet standardmäßig mit einer Whitelist.
* duply arbeitet standardmäßig mit einer Whitelist
* Um gewisse Verzeichnisse oder Dateien von einem Backup zu inkludieren muss die Datei <tt>exclude</tt> im duply Verzeichnis erstellt werden.
* Um gewisse Verzeichnisse oder Dateien von einem Backup zu inkludieren muss die Datei <tt>exclude</tt> im duply Verzeichnis erstellt werden
* Die Syntax erlaubt das Hinzufügen von Verzeichnissen und Dateien mit einem <tt>+ /pfad/zur/datei</tt>.
* Die Syntax erlaubt das Hinzufügen von Verzeichnissen und Dateien mit einem <tt>+ /pfad/zur/datei</tt>
* Um ein Verzeichnis zu exkludieren muss in der <tt>exclude</tt> ein <tt>- /pfad/zum/Verzeichnis</tt> eingefügt werden.
* Um ein Verzeichnis zu exkludieren muss in der <tt>exclude</tt> ein <tt>- /pfad/zum/Verzeichnis</tt> eingefügt werden
* Zudem erlaubt duply die Verwendung von Wildcards.
* Zudem erlaubt duply die Verwendung von Wildcards
* Die hier dargestellte <tt>exclude</tt> Datei sichert die Verzeichnisse <tt>/etc/, /root/, /var/www/</tt> und exkludiert alle anderen Verzeichnisse.
* Die hier dargestellte <tt>exclude</tt> Datei sichert die Verzeichnisse <tt>/etc/, /root/, /var/www/</tt> und exkludiert alle anderen Verzeichnisse
  + /etc/
  + /etc/
  + /root/
  + /root/
Zeile 137: Zeile 142:


=== Argumente ===
=== Argumente ===
* duply bietet eine Vielzahl von Kommandozeilenparametern für die Sicherung und Wiederherstellung von Daten.
* duply bietet eine Vielzahl von Kommandozeilenparametern für die Sicherung und Wiederherstellung von Daten
* Die gesamte Liste ist in der Manpage von duply zu finden.
* Die gesamte Liste ist in der Manpage von duply zu finden
* Beim Einsatz von mehreren Parameter werden diese durch einen Unterstrich ('''_''') getrennt.
* Beim Einsatz von mehreren Parameter werden diese durch einen Unterstrich ('''_''') getrennt
* Mit <tt>/usr/bin/duply /root/.duply/test full_verify_purge --force</tt> wird ein volles Backup erstellt, verifiziert und alte Backups gelöscht.
* Mit <tt>/usr/bin/duply /root/.duply/test full_verify_purge --force</tt> wird ein volles Backup erstellt, verifiziert und alte Backups gelöscht
* Backups welche die <tt>MAX_AGE</tt> überschritten haben werden mit <tt>purge</tt> angezeigt und durch die zusätzliche Option <tt>--force</tt> gelöscht.
* Backups welche die <tt>MAX_AGE</tt> überschritten haben werden mit <tt>purge</tt> angezeigt und durch die zusätzliche Option <tt>--force</tt> gelöscht
* Der Befehl <tt>/usr/bin/duply /root/.duply/test incr</tt> führt ein inkrementelles Backup aus.
* Der Befehl <tt>/usr/bin/duply /root/.duply/test incr</tt> führt ein inkrementelles Backup aus


===cronjob===
===cronjob===
* Bei duply handelt es sich nicht um einen Dienst (Daemon), sondern um ein Skript, das beispielsweise regelmäßig via Cron ausgeführt werden kann.
* Bei duply handelt es sich nicht um einen Dienst (Daemon), sondern um ein Skript, das beispielsweise regelmäßig via Cron ausgeführt werden kann


; Beispiel
; Beispiel
Zeile 151: Zeile 156:
  0 0 * * 1-6 /usr/bin/duply /root/.duply/test incr
  0 0 * * 1-6 /usr/bin/duply /root/.duply/test incr


* In dieser Konfiguration wird Sonntags um 0:00 ein Full-Backup erstellt und alte Backups gelöscht.
* In dieser Konfiguration wird Sonntags um 0:00 ein Full-Backup erstellt und alte Backups gelöscht
* Montag bis Samstag wird jeden Tag ein inkrementelles Backup durchgeführt.
* Montag bis Samstag wird jeden Tag ein inkrementelles Backup durchgeführt
* Neue cronjobs können mit '''crontab -e''' erstellt werden.
* Neue cronjobs können mit '''crontab -e''' erstellt werden
* Kommandos und Konfigurationsdateien müssen mit absolutem Pfad angegeben werden.
* Kommandos und Konfigurationsdateien müssen mit absolutem Pfad angegeben werden


=== Beispiele ===
=== Beispiele ===
==== Profil erstellen ====
==== Profil erstellen ====
  $ '''duply humbug create
  $ '''duply humbug create
don't forget to edit this new conf file
don't forget to edit this new conf file
Zeile 190: Zeile 195:
==== Volume was signed by key ''X'' not ''Y'' ====
==== Volume was signed by key ''X'' not ''Y'' ====
==== OSError: Socket is closed ====
==== OSError: Socket is closed ====
  ssh: Exception (client): Signature verification (ssh-rsa) failed.
  ssh: Exception (client): Signature verification (ssh-rsa) failed
  ssh: Traceback (most recent call last):
  ssh: Traceback (most recent call last):
  ssh:   File "/usr/local/lib/python3.10/dist-packages/paramiko/transport.py", line 2130, in run
  ssh: File "/usr/local/lib/python3.10/dist-packages/paramiko/transport.py", line 2130, in run
  ssh:     self.kex_engine.parse_next(ptype, m)
  ssh: self.kex_engine.parse_next(ptype, m)
  ssh:   File "/usr/local/lib/python3.10/dist-packages/paramiko/kex_curve25519.py", line 64, in parse_next
  ssh: File "/usr/local/lib/python3.10/dist-packages/paramiko/kex_curve25519.py", line 64, in parse_next
  ssh:     return self._parse_kexecdh_reply(m)
  ssh: return self._parse_kexecdh_reply(m)
  ssh:   File "/usr/local/lib/python3.10/dist-packages/paramiko/kex_curve25519.py", line 130, in _parse_kexecdh_reply
  ssh: File "/usr/local/lib/python3.10/dist-packages/paramiko/kex_curve25519.py", line 130, in _parse_kexecdh_reply
  ssh:     self.transport._verify_key(peer_host_key_bytes, sig)
  ssh: self.transport._verify_key(peer_host_key_bytes, sig)
  ssh:   File "/usr/local/lib/python3.10/dist-packages/paramiko/transport.py", line 1942, in _verify_key
  ssh: File "/usr/local/lib/python3.10/dist-packages/paramiko/transport.py", line 1942, in _verify_key
  ssh:     raise SSHException(
  ssh: raise SSHException(
  ssh: paramiko.ssh_exception.SSHException: Signature verification (ssh-rsa) failed.
  ssh: paramiko.ssh_exception.SSHException: Signature verification (ssh-rsa) failed
  ssh:
  ssh:
  Attempt of put Nr. 1 failed. OSError: Socket is closed
  Attempt of put Nr. 1 failed
* OSError: Socket is closed


== Aufruf ==
== Aufruf ==
Zeile 225: Zeile 231:
| usage || || get usage help text
| usage || || get usage help text
|-
|-
| and/or/groupIn/groupOut || || pseudo commands used in batches (see SEPARATORS above)
| and/or/groupIn/groupOut || || pseudo commands used in batches (see SEPARATORS above)
|-
|-
| create || || creates a configuration profile
| create || || creates a configuration profile
Zeile 255: Zeile 261:
| purgeFull || [<max_full_backups>] [--force] || list outdated backup files ($MAX_FULL_BACKUPS being the number of full backups and associated incrementals to keep, counting in reverse chronological order) [use --force to actually delete these files]
| purgeFull || [<max_full_backups>] [--force] || list outdated backup files ($MAX_FULL_BACKUPS being the number of full backups and associated incrementals to keep, counting in reverse chronological order) [use --force to actually delete these files]
|-
|-
| purgeIncr || [<max_fulls_with_incrs>] [--force] || list outdated incremental backups ($MAX_FULLS_WITH_INCRS being the number of full backups which associated incrementals will be kept, counting in reverse chronological order) [use --force to actually delete these files]
| purgeIncr || [<max_fulls_with_incrs>] [--force] || list outdated incremental backups ($MAX_FULLS_WITH_INCRS being the number of full backups which associated incrementals will be kept, counting in reverse chronological order) [use --force to actually delete these files]
|-
|-
| purgeAuto || [--force] || convenience batch wrapper for all purge commands above. purge, purgeFull, purgeIncr are added if their conf vars were set. e.g.
| purgeAuto || [--force] || convenience batch wrapper for all purge commands above
* purge, purgeFull, purgeIncr are added if their conf vars were set
* e.g
  MAX_AGE=1Y
  MAX_AGE=1Y
  MAX_FULL_BACKUPS=6
  MAX_FULL_BACKUPS=6
  MAX_FULLS_WITH_INCR=3
  MAX_FULLS_WITH_INCR=3
in profile conf file would result in
in profile conf file would result in
  [purge_purgeFull_purgeIncr]
[purge_purgeFull_purgeIncr]
|-
|-
| cleanup || [--force] || list broken backup chain files archives (e.g. after unfinished run) [use --force to actually delete these files]
| cleanup || [--force] || list broken backup chain files archives (e.g
* after unfinished run) [use --force to actually delete these files]
|-
|-
| changelog || || print changelog / todo list
| changelog || || print changelog / todo list
|-
|-
| txt2man || || feature for package maintainers - create a manpage based on the usage output. download txt2man from https://mvertes.free.fr/, put it in the PATH and run 'duply txt2man' to create a man page.
| txt2man || || feature for package maintainers - create a manpage based on the usage output
* download txt2man from https://mvertes.free.fr/, put it in the PATH and run 'duply txt2man' to create a man page
|-
|-
| version || || show version information of duply and needed programs
| version || || show version information of duply and needed programs
Zeile 291: Zeile 301:


; Beispiel
; Beispiel
  'pre+[bkp-verify]_post'  
  'pre+[bkp-verify]_post'
translates to  
translates to
  'pre_and_groupIn_bkp_or_verify_groupOut_post'
  'pre_and_groupIn_bkp_or_verify_groupOut_post'


=== TIME FORMATS ===
=== TIME FORMATS ===
For all time related parameters like age, max_age und weitere Refer to the duplicity manpage for all available formats.
For all time related parameters like age, max_age und weitere Refer to the duplicity manpage for all available formats
; Beispiele
; Beispiele
{| class="wikitable sortable options"
{| class="wikitable sortable options"
Zeile 313: Zeile 323:
== Sicherheit ==
== Sicherheit ==
; Kopieren Sie den ''gesamten'' Profilordner nach der ersten Sicherung an einen sicheren Ort
; Kopieren Sie den ''gesamten'' Profilordner nach der ersten Sicherung an einen sicheren Ort
* Er enthält alles, was für die Wiederherstellung Ihrer Backups benötigt wird (in doppelter Hinsicht).
* Er enthält alles, was für die Wiederherstellung Ihrer Backups benötigt wird (in doppelter Hinsicht)


Achten Sie auf (möglicherweise später hinzugefügte) externe Dateien wie Credentials oder Auth-Dateien (beispielsweise netrc, .megarc, ssh-Schlüssel) oder Umgebungsvariablen (beispielsweise DPBX_ACCESS_TOKEN).
Achten Sie auf (möglicherweise später hinzugefügte) externe Dateien wie Credentials oder Auth-Dateien (beispielsweise netrc, .megarc, ssh-Schlüssel) oder Umgebungsvariablen (beispielsweise DPBX_ACCESS_TOKEN)


Es ist ratsam, diese im Profilordner zu platzieren, wenn dies überhaupt möglich ist. beispielsweise im Falle eines 'multi://' Ziels sollte die config .json Datei Env vars zur conf Datei der Duply Profile hinzugefügt werden.
Es ist ratsam, diese im Profilordner zu platzieren, wenn dies überhaupt möglich ist
* beispielsweise im Falle eines 'multi://' Ziels sollte die config .json Datei Env vars zur conf Datei der Duply Profile hinzugefügt werden


Halten Sie den Zugriff auf diese Dateien beschränkt, da sie Informationen (gpg-Schlüssel, Passphrasen und weitere) für den Zugriff und die Änderung Ihrer Backups enthalten.
Halten Sie den Zugriff auf diese Dateien beschränkt, da sie Informationen (gpg-Schlüssel, Passphrasen und weitere) für den Zugriff und die Änderung Ihrer Backups enthalten


; Zusammenfassung
; Zusammenfassung
* Versuchen Sie eine Wiederherstellung von einem anderen Rechner aus, um sicherzustellen, dass Sie wirklich alles haben, was Sie für die Wiederherstellung benötigen.
* Versuchen Sie eine Wiederherstellung von einem anderen Rechner aus, um sicherzustellen, dass Sie wirklich alles haben, was Sie für die Wiederherstellung benötigen
* Wiederholen Sie diese Schritte nach _allen_ Konfigurationsänderungen. Einige Konfigurationsoptionen sind für die Wiederherstellung entscheidend.
* Wiederholen Sie diese Schritte nach _allen_ Konfigurationsänderungen
* Einige Konfigurationsoptionen sind für die Wiederherstellung entscheidend





Version vom 1. Mai 2025, 11:56 Uhr

duply - Inkrementelle verschlüsselte Backups erstellen

Beschreibung

duply ist ein Shell-Frontend für duplicity, das die Verwendung vereinfacht, indem Einstellungen für jedes Backup in Profilen verwaltet werden

  • Es unterstützt die Ausführung von mehreren Befehlen als Stapelverarbeitung
  • Damit sind einzeilige cron-Einträge möglich und der Benutzer kann Skripte verwenden, die vor oder nach dem Backup ausgeführt werden
  • Alle duplicity-Backends werden unterstützt
  • Der frühere Name von duply war ftplicity
Vereinfacht die Ausführung von Duplicity
  • Frontend für duplicity
  • Backups können lokal oder einem anderen System gespeichert werden
  • Cron oder Kommandozeile
  • Speichert Einstellungen in Profilen
  • Batch-Operationen
    ermöglicht, beispielsweise backup_verify+purge
  • Ausführung von Pre-/Post-Skripten
  • verschiedene Aktionen möglich, abhängig vom vorherigen oder nächsten Befehl oder dessen Rückgabewert
  • Vorbedingungsprüfung für fehlerfreie Duplizitätsoperationen

Für jeden Sicherungsauftrag wird ein Konfigurationsprofil erstellt

  • Profilordner
  • ~/.duply/<profile>
Hinweis
Wenn der Ordner '/etc/duply' existiert, werden die Profile für den Superuser Benutzer root dort gesucht und erstellt werden
Protokolle
  • ftp
  • ssh
  • s3
  • rsync
  • cifs
  • webdav
  • http

Installation

# apt install duply


Dateien

/usr/bin/
duply
/usr/share/doc/duply/
README
README.Debian
TODO
changelog.Debian.gz
changelog.gz
copyright
systemd-unit.examples
systemd-unit.examples/HOWTO.txt
systemd-unit.examples/system
systemd-unit.examples/system/duply-backup@.service
systemd-unit.examples/system/duply-backup@.timer
systemd-unit.examples/system/duply-cleanup@.service
systemd-unit.examples/system/duply-cleanup@.timer
systemd-unit.examples/system/duply-verify@.service
systemd-unit.examples/system/duply-verify@.timer
systemd-unit.examples/system/notify-failed-backup@.service
systemd-unit.examples/user
systemd-unit.examples/user/duply-backup@.service
systemd-unit.examples/user/duply-backup@.timer
systemd-unit.examples/user/duply-cleanup@.service
systemd-unit.examples/user/duply-cleanup@.timer
systemd-unit.examples/user/duply-verify@.service
systemd-unit.examples/user/duply-verify@.timer
systemd-unit.examples/user/notify-failed-backup@.service
/usr/share/man/man1/
duply.1.gz

Anwendung

Erstmalige Verwendung (Profilerstellung)
duply <Profil> erstellen
Verwendung im Einzel- oder Batch-Modus
duply <profile> <Befehl>[[_|+|-]<Befehl>[_|+|-]...] [<Optionen> ...]
Für Stapel können die bedingten Trennzeichen auch als Pseudo-Befehle geschrieben werden und(+), oder(-)
  • siehe BEISPIELE
  • siehe SEPARATORS

Nicht duply-Optionen werden an duplicity weitergegeben

  • siehe OPTIONS
Alle conf-Parameter können stattdessen auch in der Umgebung definiert werden

Anwendung

GnuPG_KEY='C676563899DE35FA'
GnuPG_PW='NerzManta9'
GnuPG_OPTS='--compress-algo=bzip2 --personal-cipher-preferences AES256'
GnuPG_TEST='disabled'
TARGET='ssh://user:KohlIstKrempe969@foxtom.net:22/home/user/backup_PC1'
SOURCE='/'
MAX_AGE=1Y
MAX_FULL_BACKUPS=5
MAX_FULLBKP_AGE=2W
DUPL_PARAMS="$DUPL_PARAMS --full-if-older-than $MAX_FULLBKP_AGE"
VOLSIZE=10
DUPL_PARAMS="$DUPL_PARAMS --volsize $VOLSIZE"

Pre- und Post-Skripte

  • Das pre-Skript wird direkt vor dem Backup ausgeführt, das post-Skript direkt nach dem Backup
  • Mit diesen Skripten können beispielsweise Snapshots von LVM-Volumes oder Dumps von SQL Datenbanken gemacht und in das Backup einbezogen werden
  • Die files pre und post müssen im jeweiligen duply Verzeichnis liegen (Bsp.: /home/user/.duply/backup/) und ausführbar sein
  • Werden die pre/post Scripte nicht wie erhofft ausgeführt (beispielsweise bei den Sicherchungs-Methoden "full/incr"), können diese explizit angegeben werden: pre_incr_post
Beispiel

Hier ein Beispiel für ein PRE/POST Skript welches vor dem Backup einen SQL-Dump aller Datenbanken erstellt und diesen nach dem Backup wieder löscht

pre-Datei
/usr/bin/mysqldump --all-databases -u root -ppw > /tmp/sqldump-$(date '+%F')
post-Datei
/bin/rm /tmp/sqldump-$(date '+%F')
PRE/POST SCRIPTS

Useful internal duply variables are exported to the scripts

PROFILE, CONFDIR, SOURCE, TARGET_URL_<PROT|HOSTPATH|USER|PASS>,
GnuPG_<KEYS_ENC|KEY_SIGN|PW>, CMD_ERR, RUN_START,
CMD_<PREV|NEXT> (previous/next command),
CND_<PREV|NEXT> (condition before/after)

The CMD_* variables were introduced to allow different actions according to the command the scripts were attached to e.g. 'pre_bkp_post_pre_verify_post' will call the pre script two times, with CMD_NEXT variable set to 'bkp' on the first and to 'verify' on the second run

  • CMD_ERR holds the exit code of the CMD_PREV

exclude

  • duply arbeitet standardmäßig mit einer Whitelist
  • Um gewisse Verzeichnisse oder Dateien von einem Backup zu inkludieren muss die Datei exclude im duply Verzeichnis erstellt werden
  • Die Syntax erlaubt das Hinzufügen von Verzeichnissen und Dateien mit einem + /pfad/zur/datei
  • Um ein Verzeichnis zu exkludieren muss in der exclude ein - /pfad/zum/Verzeichnis eingefügt werden
  • Zudem erlaubt duply die Verwendung von Wildcards
  • Die hier dargestellte exclude Datei sichert die Verzeichnisse /etc/, /root/, /var/www/ und exkludiert alle anderen Verzeichnisse
+ /etc/
+ /root/
+ /var/www/
- **

Argumente

  • duply bietet eine Vielzahl von Kommandozeilenparametern für die Sicherung und Wiederherstellung von Daten
  • Die gesamte Liste ist in der Manpage von duply zu finden
  • Beim Einsatz von mehreren Parameter werden diese durch einen Unterstrich (_) getrennt
  • Mit /usr/bin/duply /root/.duply/test full_verify_purge --force wird ein volles Backup erstellt, verifiziert und alte Backups gelöscht
  • Backups welche die MAX_AGE überschritten haben werden mit purge angezeigt und durch die zusätzliche Option --force gelöscht
  • Der Befehl /usr/bin/duply /root/.duply/test incr führt ein inkrementelles Backup aus

cronjob

  • Bei duply handelt es sich nicht um einen Dienst (Daemon), sondern um ein Skript, das beispielsweise regelmäßig via Cron ausgeführt werden kann
Beispiel
0 0 * * 7 /usr/bin/duply /root/.duply/test full_verify_purge --force
0 0 * * 1-6 /usr/bin/duply /root/.duply/test incr
  • In dieser Konfiguration wird Sonntags um 0:00 ein Full-Backup erstellt und alte Backups gelöscht
  • Montag bis Samstag wird jeden Tag ein inkrementelles Backup durchgeführt
  • Neue cronjobs können mit crontab -e erstellt werden
  • Kommandos und Konfigurationsdateien müssen mit absolutem Pfad angegeben werden

Beispiele

Profil erstellen

$ duply humbug create

don't forget to edit this new conf file

backup 'humbug' now

$ duply humbug backup

available backup sets

list available backup sets of profile 'humbug'

$ duply humbug status

outdated backups

list and delete outdated backups of 'humbug'
$ duply humbug purge --force

restore

restore latest backup of 'humbug' to /mnt/restore
$ duply humbug restore /mnt/restore
restore /etc/passwd of 'humbug' from 4 days ago to /root/pw
$ duply humbug fetch etc/passwd /root/pw 4D
$ (see "duplicity manpage", section TIME FORMATS)

a one line batch job on 'humbug' for cron execution

$ duply humbug backup_verify_purge --force

batch job to run a full backup with pre/post scripts

$ duply humbug pre_full_post

Problembehebung

Volume was signed by key X not Y

OSError: Socket is closed

ssh: Exception (client): Signature verification (ssh-rsa) failed
ssh: Traceback (most recent call last):
ssh: File "/usr/local/lib/python3.10/dist-packages/paramiko/transport.py", line 2130, in run
ssh: self.kex_engine.parse_next(ptype, m)
ssh: File "/usr/local/lib/python3.10/dist-packages/paramiko/kex_curve25519.py", line 64, in parse_next
ssh: return self._parse_kexecdh_reply(m)
ssh: File "/usr/local/lib/python3.10/dist-packages/paramiko/kex_curve25519.py", line 130, in _parse_kexecdh_reply
ssh: self.transport._verify_key(peer_host_key_bytes, sig)
ssh: File "/usr/local/lib/python3.10/dist-packages/paramiko/transport.py", line 1942, in _verify_key
ssh: raise SSHException(
ssh: paramiko.ssh_exception.SSHException: Signature verification (ssh-rsa) failed
ssh:
Attempt of put Nr. 1 failed
  • OSError: Socket is closed

Aufruf

Argumente

Optionen

Option Beschreibung
--force passed to duplicity (see commands purge, purgeFull, purgeIncr, cleanup)
--preview do nothing but print out generated duplicity command lines
--disable-encryption disable encryption, overrides profile settings

Kommandos

Option Parameter Beschreibung
usage get usage help text
and/or/groupIn/groupOut pseudo commands used in batches (see SEPARATORS above)
create creates a configuration profile
backup backup with pre/post script execution (batch: [pre_bkp_post]), full (if full_if_older matches or no earlier backup is found) incremental (in all other cases)
pre/post execute '<profile>/pre', '<profile>/post' scripts
bkp as above but without executing pre/post scripts
full force full backup
incr force incremental backup
list [<age>] list all files in backup (as it was at <age>, default: now)
status prints backup sets and chains currently in repository
verify [<age>] [--compare-data] list files changed, since age if given
verifyPath <rel_path_in_bkp> <local_path> [<age>] [--compare-data] list changes of a file or folder path in backup compared to a local path, since age if given
restore <target_path> [<age>] restore the complete backup to <target_path> [as it was at <age>]
fetch <src_path> <target_path> [<age>] fetch single file/folder from backup [as it was at <age>]
purge [<max_age>] [--force] list outdated backup files (older than $MAX_AGE) [use --force to actually delete these files]
purgeFull [<max_full_backups>] [--force] list outdated backup files ($MAX_FULL_BACKUPS being the number of full backups and associated incrementals to keep, counting in reverse chronological order) [use --force to actually delete these files]
purgeIncr [<max_fulls_with_incrs>] [--force] list outdated incremental backups ($MAX_FULLS_WITH_INCRS being the number of full backups which associated incrementals will be kept, counting in reverse chronological order) [use --force to actually delete these files]
purgeAuto [--force] convenience batch wrapper for all purge commands above
  • purge, purgeFull, purgeIncr are added if their conf vars were set
  • e.g
MAX_AGE=1Y
MAX_FULL_BACKUPS=6
MAX_FULLS_WITH_INCR=3

in profile conf file would result in

[purge_purgeFull_purgeIncr]
cleanup [--force] list broken backup chain files archives (e.g
  • after unfinished run) [use --force to actually delete these files]
changelog print changelog / todo list
txt2man feature for package maintainers - create a manpage based on the usage output
version show version information of duply and needed programs

Umgebung

Rückgabewert

SEPARATORS

Option Beschreibung
_ underscore neutral separator
+ plus sign, _and_ conditional AND the next command will only be executed if the previous succeeded
- minus sign, _or_ conditional OR the next command will only be executed if the previous failed
[ ] square brackets, _groupIn_/_groupOut_ enables grouping of commands
Beispiel
'pre+[bkp-verify]_post'

translates to

'pre_and_groupIn_bkp_or_verify_groupOut_post'

TIME FORMATS

For all time related parameters like age, max_age und weitere Refer to the duplicity manpage for all available formats

Beispiele
Option Beschreibung
2002-01-25T07:00:00+02:00 full date time format string
2002/3/5 date string YYYY/MM/DD
12D interval, 12 days ago
1h78m interval, 1 hour 78 minutes ago

Sicherheit

Kopieren Sie den gesamten Profilordner nach der ersten Sicherung an einen sicheren Ort
  • Er enthält alles, was für die Wiederherstellung Ihrer Backups benötigt wird (in doppelter Hinsicht)

Achten Sie auf (möglicherweise später hinzugefügte) externe Dateien wie Credentials oder Auth-Dateien (beispielsweise netrc, .megarc, ssh-Schlüssel) oder Umgebungsvariablen (beispielsweise DPBX_ACCESS_TOKEN)

Es ist ratsam, diese im Profilordner zu platzieren, wenn dies überhaupt möglich ist

  • beispielsweise im Falle eines 'multi://' Ziels sollte die config .json Datei Env vars zur conf Datei der Duply Profile hinzugefügt werden

Halten Sie den Zugriff auf diese Dateien beschränkt, da sie Informationen (gpg-Schlüssel, Passphrasen und weitere) für den Zugriff und die Änderung Ihrer Backups enthalten

Zusammenfassung
  • Versuchen Sie eine Wiederherstellung von einem anderen Rechner aus, um sicherzustellen, dass Sie wirklich alles haben, was Sie für die Wiederherstellung benötigen
  • Wiederholen Sie diese Schritte nach _allen_ Konfigurationsänderungen
  • Einige Konfigurationsoptionen sind für die Wiederherstellung entscheidend


Anhang

Siehe auch


Sicherheit

Dokumentation

Links

Projekt

Weblinks

  1. https://www.thomas-krenn.com/de/wiki/Backup_unter_Linux_mit_duply
  2. https://wiki.archlinux.org/index.php/Duply#Configuration
  3. https://www.gnupg.org/howtos/de/GnuPGMiniHowto.html
  4. duply.net