|
|
(137 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) |
Zeile 1: |
Zeile 1: |
| {{DISPLAYTITLE:duply}}
| | '''duply''' - [[Inkrementell]]e [[verschlüsselt]]e [[Backup]]s |
| '''duply''' erstellt inkrementelle verschlüsselte Backups | |
|
| |
|
| == Beschreibung == | | == Beschreibung == |
| * Frontend für [[duplicity]] | | ; Frontend für [[duplicity]] |
| | Shell-Frontend für [[duplicity]] |
| | * Verwendung vereinfachen |
| | * Einstellungen in Profilen verwalten |
| | * Stapelverarbeitung |
| | ** 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 |
| | |
| | ; Vereinfacht die Ausführung von Duplicity |
| | Frontend für [[duplicity]] |
| * Backups können lokal oder einem anderen System gespeichert werden | | * Backups können lokal oder einem anderen System gespeichert werden |
| Unterstützte Protokolle
| | * Cron oder Kommandozeile |
| * ftp | | * Speichert Einstellungen in Profilen |
| * ssh | | * Batch-Operationen |
| * s3 | | *: ermöglicht, beispielsweise backup_verify+purge |
| * rsync | | * Ausführung von Pre-/Post-Skripten |
| * cifs | | * verschiedene Aktionen möglich, abhängig vom vorherigen oder nächsten Befehl oder dessen Rückgabewert |
| * webdav | | * Vorbedingungsprüfung für fehlerfreie Duplizitätsoperationen |
| * http | |
|
| |
|
| == Installation ==
| | Für jeden Sicherungsauftrag wird ein Konfigurationsprofil erstellt |
| # apt install duply
| |
|
| |
|
| == Syntax ==
| | ; Profilordner |
| === Parameter === | | <syntaxhighlight lang="bash" highlight="1" line copy> |
| === Optionen ===
| | ~/.duply/<profile> |
| === Umgebungsvariablen ===
| | </syntaxhighlight> |
| === Exit-Status ===
| |
|
| |
|
| == Konfiguration ==
| | ; Hinweis |
| === Verschlüsselung konfigurieren ===
| | : Wenn der Ordner '/etc/duply' existiert, werden die Profile für den Superuser Benutzer root dort gesucht und erstellt werden |
| ==== Schlüssel erstellen ====
| |
| siehe [[GPG#Schl.C3.BCssel_erstellen|GPG:Schlüssel erstellen]]
| |
|
| |
|
| === Profil erstellen === | | ; Protokolle |
| # duply <backupname> create
| | {| class="wikitable options big" |
| | ! Protokoll !! Beschreibung |
| | |- |
| | | [[ftp]] || |
| | |- |
| | | [[ssh]] || |
| | |- |
| | | [[s3]] || |
| | |- |
| | | [[rsync]] || |
| | |- |
| | | [[cifs]] || |
| | |- |
| | | [[webdav]] || |
| | |- |
| | | [[http]] || |
| | |} |
|
| |
|
| Ein duply-Profil wird im Home-Verzeichnis des Benutzers unter '''~/.duply/''' angelegt und besteht aus den folgenden Dateien:
| | == Installation == |
| * gpg-key.asc (nur wenn ein gpg-key exportiert wurde)
| | <syntaxhighlight lang="bash" highlight="1" line copy> |
| * conf
| | sudo apt install duply |
| * pre und post
| | </syntaxhighlight> |
| * exclude
| |
|
| |
|
| === Konfiguration === | | === Dateien === |
| ==== Verschlüsselung einrichten====
| | ; /usr/bin/ |
| =====Voraussetzung=====
| | duply |
| Key-ID und das Passwort des GPG-Keys müssen dafür hinterlegt werden.
| |
|
| |
|
| GPG_KEY='_GPG_KEY_ID_' | | ; /usr/share |
| GPG_PW='_GPG_PASSWORD_'
| | /doc/duply/ |
| | README |
| | README.Debian |
| | TODO |
| | changelog.Debian.gz |
| | changelog.gz |
| | copyright |
| | systemd-unit.examples |
| | HOWTO.txt |
| | systemd-unit.examples/system/ |
| | duply-backup@.service |
| | duply-backup@.timer |
| | duply-cleanup@.service |
| | duply-cleanup@.timer |
| | duply-verify@.service |
| | duply-verify@.timer |
| | notify-failed-backup@.service |
| | systemd-unit.examples/user/ |
| | duply-backup@.service |
| | duply-backup@.timer |
| | duply-cleanup@.service |
| | duply-cleanup@.timer |
| | duply-verify@.service |
| | duply-verify@.timer |
| | notify-failed-backup@.service |
| | man/man1/ |
| | duply.1.gz |
|
| |
|
| =====Key-ID anzeigen lassen===== | | == Aufruf == |
| ; Private-Key
| | === Argumente === |
| # gpg --list-secret-keys --keyid-format LONG
| | === Optionen === |
| gpg: "Trust-DB" wird überprüft
| | {| class="wikitable options" |
| gpg: marginals needed: 3 completes needed: 1 trust model: pgp
| | |- |
| gpg: Tiefe: 0 gültig: 1 signiert: 0 Vertrauen: 0-, 0q, 0n, 0m, 0f, 1u
| | ! Option !! Beschreibung |
| gpg: nächste "Trust-DB"-Pflichtüberprüfung am 2021-11-04
| | |- |
| /root/.gnupg/pubring.kbx
| | | --force || passed to duplicity (see commands purge, purgeFull, purgeIncr, cleanup) |
| ------------------------
| | |- |
| sec rsa4096/F47E1B7450082D11 2020-11-04 [SC] [verfällt: 2021-11-04]
| | | --preview || do nothing but print out generated duplicity command lines |
| 60E3D3C9ED78CE4A40322BBAF47E1B7450082D11
| | |- |
| uid [ ultimativ ] Robert Quies (Es grünt so grün, wenn Spaniens Blüten blühn.) <raqju@web.de>
| | | --disable-encryption || disable encryption, overrides profile settings |
| ssb rsa4096/B2E20485FF7FC772 2020-11-04 [E] [verfällt: 2021-11-04]
| | |} |
| | |
| # gpg --list-keys --keyid-format LONG
| |
| /root/.gnupg/pubring.kbx
| |
| ------------------------
| |
| pub rsa4096/F47E1B7450082D11 2020-11-04 [SC] [verfällt: 2021-11-04]
| |
| 60E3D3C9ED78CE4A40322BBAF47E1B7450082D11
| |
| uid [ ultimativ ] Robert Quies (Es grünt so grün, wenn Spaniens Blüten blühn.) <raqju@web.de>
| |
| sub rsa4096/B2E20485FF7FC772 2020-11-04 [E] [verfällt: 2021-11-04]
| |
| | |
| ====Kompression und Art der Verschlüsselung festlegen====
| |
| Zusätzlich können in '''GPG_OPTS=''' weitere Optionen zur Kompression und Art der Verschlüsselung gesetzt werden.
| |
| *Es soll mit dem freien Komprimierungsprogramm '''bzip2''' komprimiert werden und dem symmetrischen Verschlüsselungsverfahren '''A'''dvanced '''E'''ncryption '''S'''tandard, auch Rijndael-Algorithmus genannt, mit einer Schlüssellänge von '''256''' verschlüsselt werden.
| |
| GPG_OPTS='--compress-algo=bzip2 --personal-cipher-preferences AES256'
| |
| | |
| ==== De-/Aktivieren der Überprüfung GPG-Key und GPG-Passphrase ====
| |
| * duply prüft vor jeder Aktion ob der GPG-Key gültig ist und die Passphrase korrekt ist.
| |
| * Dies kann durch die Option '''GPG_TEST='disabled'''' unterbunden werden.
| |
| | |
| Aktiviert
| |
| GPG_TEST='disabled'
| |
| | |
| Deaktiviert
| |
| # GPG_TEST='disabled'
| |
| | |
| ====Ziel und Quelle des Backups festlegen====
| |
| =====Allgemeine Syntax des hosts=====
| |
| scheme://[user:password@]host[:port]/[/]path
| |
| | |
| =====Protokolle und Syntax zur Datenübertragung=====
| |
| * duply versteht alle gängigen Protokolle zur Datenübertragung
| |
| * In der conf-Datei befindet sich meistens eine Liste der wichtigsten unterstützten Protokolle und deren Syntax
| |
| | |
| file://[/absolute_]path
| |
| ftp[s]://user[:password]@other.host[:port]/some_dir
| |
| hsi://user[:password]@other.host/some_dir
| |
| cf+<nowiki>http://container_name</nowiki>
| |
| imap[s]://user[:password]@host.com[/from_address_prefix]
| |
| rsync://user[:password]@other.host[:port]::/module/some_dir
| |
| rsync over ssh (only keyauth)
| |
| rsync://user@other.host[:port]/relative_path
| |
| rsync://user@other.host[:port]//absolute_path
| |
| for the s3 user/password are AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY
| |
| s3://[user:password]@host/bucket_name[/prefix]
| |
| s3+http://[user:password]@bucket_name[/prefix]
| |
| scp and sftp are aliases for the ssh backend
| |
| ssh://user</nowiki>[:password]@other.host[:port]/some_dir
| |
| tahoe://alias/directory
| |
| webdav[s]://user[:password]@other.host/some_dir
| |
| | |
| '''Hinweis'''
| |
| Sonderzeichen müssen [https://de.wikipedia.org/wiki/URL-Encoding urlencoded] eingetragen werden, außer bei den Parametern '''TARGET_USER, TARGET_PASS'''
| |
| | |
| =====Ziel des Backups festlegen=====
| |
| TARGET='scheme://user[:password]@host[:port]/[/]path'
| |
| | |
| *Es soll das Protokoll '''ssh''' zur Datenübertragung genutzt werden.
| |
| *Username: '''user'''
| |
| *Passwort: '''KohlIstKrempe969'''
| |
| *Host: '''foxtom.net'''
| |
| *Port: '''22'''
| |
| *Pfad: '''home/user/backup_PC1'''
| |
| | |
| TARGET='<nowiki>ssh://user:KohlIstKrempe969@foxtom.net:22/home/user/backup_PC1</nowiki>'
| |
| | |
| =====Quelle des Backups festlegen=====
| |
| Root-Verzeichnis für das Backup setzen.
| |
| SOURCE=
| |
|
| |
|
| Soll ein Backup aus mehreren Unterordnern von '''/''' bestehen (Bsp.: /etc /var /home sollen gesichert werden), so muss die SOURCE Variable auf '''/''' gesetzt werden.''
| | === Kommandos === |
| SOURCE='/'
| | {| class="wikitable sortable options" |
| | | |- |
| In der Regel wird SOURCE='/' gesetzt.
| | ! Option !! Parameter ||Beschreibung |
| | | |- |
| Dateien, die in die Sicherung aufgenommen oder von ihr ausgeschlossen werden, werden in der Datei [[Backup:duply#exclude|'''exclude''']] angegeben.
| | | usage || || get usage help text |
| | | |- |
| ====Maximales Alter eines Backups festlegen====
| | | and/or/groupIn/groupOut || || pseudo commands used in batches (see SEPARATORS above) |
| Hier ist anzumerken, dass duply keine Backups löscht, sofern man es nicht anfordert.
| | |- |
| | | | create || || creates a configuration profile |
| Mit '''MAX_AGE''' wird das maximale Alter von Backups bestimmt.
| | |- |
| Das älteste Backup soll maximal ein Jahr alt sein.
| | | 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_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 |
| | * 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 |
| | |} |
|
| |
|
| ====Anzahl der vollständigen Backups festlegen==== | | === Umgebung === |
| Mit '''MAX_FULL_BACKUPS''' kann bestimmt werden, wie viele Full-Backups duply maximal behält.
| | === Rückgabewert === |
| | |
| Es sollen fünf sein.
| |
| MAX_FULL_BACKUPS=5
| |
| | |
| ====Maximales Alter der vollständigen Backups festlegen====
| |
| Alternativ kann mit '''MAX_FULLBKP_AGE''' spezifiert werden, wie alt ein Full-Backup sein darf, bevor ein neues Full-Backup erstellt wird.
| |
| | |
| Es soll zwei Wochen alt sein.
| |
| MAX_FULLBKP_AGE=2W
| |
| DUPL_PARAMS="$DUPL_PARAMS --full-if-older-than $MAX_FULLBKP_AGE"
| |
| | |
| ==== Größe der Backup-Pakete ====
| |
| Um den durch eventuelle Übertragungsfehler entstehenden Zeitverlust einzuschränken, teilt duply standardmäßig seine Backups in 25 MB große Dateien. Mit '''VOLSIZE''' kann die Größe der erstellten Backup-Pakete geändert werden.
| |
| | |
| Der gewünschte Wert hängt von verschieden Faktoren ab.
| |
| * Übertragungsgeschwindigkeit
| |
| * Systembelastung
| |
| * Netzwerkbelastung
| |
| | |
| Vor-/Nachteile
| |
| * Vorteil kleine Pakete
| |
| * Vorteil große Pakete
| |
| * Nachteil kleine Pakete
| |
| * Nachteil große Pakete
| |
| | |
| ;Beispiel
| |
| Backup-Pakete sollen 10 MB groß sein
| |
| VOLSIZE=10
| |
| DUPL_PARAMS="$DUPL_PARAMS --volsize $VOLSIZE"
| |
| | |
| | |
| ==== Asynchrone Uploads ==== | |
| Asynchrone Uploads erlauben das Erstellen neuer Archive, bevor bereits erstellte auf den Server geladen wurden.
| |
| * Schnelleres Backup
| |
| * Hohe System- und hohe Netzlast
| |
| | |
| Asynchrone Uploads aktivieren
| |
| DUPL_PARAMS="$DUPL_PARAMS --asynchronous-upload"
| |
| | |
| == Anwendung ==
| |
| ==== Anwendung ====
| |
| '''GPG_KEY='C676563899DE35FA''''
| |
| '''GPG_PW='NerzManta9''''
| |
| '''GPG_OPTS='--compress-algo=bzip2 --personal-cipher-preferences AES256''''
| |
| '''GPG_TEST='disabled''''
| |
| '''TARGET='<nowiki>ssh://user:KohlIstKrempe969@foxtom.net:22/home/user/backup_PC1</nowiki>''''
| |
| '''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===
| |
| * duply erlaubt die Verwendung von Pre- und Post-Skripten.
| |
| * 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 <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 (z.B. bei den Sicherchungs-Methoden "full/incr"), können diese explizit angegeben werden: <tt>pre_incr_post</tt>
| |
| | |
| ; 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')
| |
|
| |
|
| ===exclude===
| | <noinclude> |
| * 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.
| |
| * 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.
| |
| * 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.
| |
| + /etc/
| |
| + /root/
| |
| + /var/www/
| |
| - **
| |
|
| |
|
| === Parameter === | | == Anhang == |
| * 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 <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.
| |
| * Der Befehl <tt>/usr/bin/duply /root/.duply/test incr</tt> führt ein inkrementelles Backup aus.
| |
| | |
| ===cronjob===
| |
| * Bei duply handelt es sich nicht um einen Dienst (Daemon), sondern um ein Skript, das z.B. 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.
| |
| | |
| == Fehlerbehebung ==
| |
| === 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
| |
| | |
| == Sicherheit ==
| |
| == Dokumentation ==
| |
| === Man-Pages ===
| |
| === Info-Pages ===
| |
| === Projekt-Homepage ===
| |
| | |
| == Links ==
| |
| === Siehe auch === | | === Siehe auch === |
| # [[GPG]]
| | {{Special:PrefixIndex/{{BASEPAGENAME}}/}} |
| # [[GPG-Agent]]
| | ---- |
| # [[pinentry-curses]]
| | * [[GnuPG]] |
| | * [[GnuPG-Agent]] |
| | * [[pinentry-curses]] |
| | * [[duplicity]] |
|
| |
|
| === Weblinks === | | ==== Sicherheit ==== |
| | === Dokumentation === |
| | === Links === |
| | ==== Projekt ==== |
| | ==== Weblinks ==== |
| # [https://www.thomas-krenn.com/de/wiki/Backup_unter_Linux_mit_duply https://www.thomas-krenn.com/de/wiki/Backup_unter_Linux_mit_duply] | | # [https://www.thomas-krenn.com/de/wiki/Backup_unter_Linux_mit_duply https://www.thomas-krenn.com/de/wiki/Backup_unter_Linux_mit_duply] |
| # [https://wiki.archlinux.org/index.php/Duply#Configuration https://wiki.archlinux.org/index.php/Duply#Configuration] | | # [https://wiki.archlinux.org/index.php/Duply#Configuration https://wiki.archlinux.org/index.php/Duply#Configuration] |
| # [https://www.gnupg.org/howtos/de/GPGMiniHowto.html https://www.gnupg.org/howtos/de/GPGMiniHowto.html] | | # [https://www.gnupg.org/howtos/de/GnuPGMiniHowto.html https://www.gnupg.org/howtos/de/GnuPGMiniHowto.html] |
| # [http://duply.net/ duply.net] | | # [https://duply.net/ duply.net] |
|
| |
|
| === Einzelnachweise ===
| | [[Kategorie:duply]] |
| <references />
| |
|
| |
|
| == Testfragen ==
| | {{DISPLAYTITLE:duply}} |
| <div class="toccolours mw-collapsible mw-collapsed">
| |
| ''Testfrage 1''
| |
| <div class="mw-collapsible-content">'''Antwort1'''</div>
| |
| </div>
| |
| <div class="toccolours mw-collapsible mw-collapsed">
| |
| ''Testfrage 2''
| |
| <div class="mw-collapsible-content">'''Antwort2'''</div>
| |
| </div>
| |
| <div class="toccolours mw-collapsible mw-collapsed">
| |
| ''Testfrage 3''
| |
| <div class="mw-collapsible-content">'''Antwort3'''</div>
| |
| </div>
| |
| <div class="toccolours mw-collapsible mw-collapsed">
| |
| ''Testfrage 4''
| |
| <div class="mw-collapsible-content">'''Antwort4'''</div>
| |
| </div>
| |
| <div class="toccolours mw-collapsible mw-collapsed">
| |
| ''Testfrage 5''
| |
| <div class="mw-collapsible-content">'''Antwort5'''</div>
| |
| </div>
| |
| | |
| [[Kategorie:Backup]]
| |
| [[Kategorie:Linux:Befehl]]
| |
| | |
| = Manpage =
| |
| == USAGE ==
| |
| first time usage (profile creation)
| |
| duply <profile> create
| |
| | |
| general usage in single or batch mode (see EXAMPLES)
| |
| duply <profile> <command>[[_|+|-]<command>[_|+|-]...] [<options> ...]
| |
| | |
| For batches the conditional separators can also be written as pseudo commands
| |
| and(+), or(-). See SEPARATORS for details.
| |
| | |
| Non duply options are passed on to duplicity (see OPTIONS).
| |
| All conf parameters can also be defined in the environment instead.
| |
| | |
| == PROFILE ==
| |
| Indicated by a path or a profile name (<profile>), which is resolved
| |
| to '~/.duply/<profile>' (~ expands to environment variable $HOME).
| |
| | |
| Superuser root can place profiles under '/etc/duply'. Simply create
| |
| the folder manually before running duply as superuser.
| |
| Note
| |
| Already existing profiles in root's home folder will cease to work
| |
| unless they are moved to the new location manually.
| |
| | |
| example 1: duply humbug backup
| |
| | |
| Alternatively a _path_ might be used e.g. useful for quick testing,
| |
| restoring or exotic locations. Shell expansion should work as usual.
| |
| Hint
| |
| The path must contain at least one path separator '/',
| |
| e.g. './test' instead of only 'test'.
| |
| | |
| example 2: duply ~/.duply/humbug backup
| |
| | |
| == SEPARATORS ==
| |
| _ (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
| |
| | |
| example
| |
| 'pre+[bkp-verify]_post' translates to
| |
| 'pre_and_groupIn_bkp_or_verify_groupOut_post'
| |
| | |
| == COMMANDS ==
| |
| 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. download txt2man from http://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
| |
| | |
| == OPTIONS ==
| |
| --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
| |
| | |
| == TIME FORMATS ==
| |
| For all time related parameters like age, max_age etc.
| |
| Refer to the duplicity manpage for all available formats. Here some examples
| |
| 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)
| |
| | |
| == PRE/POST SCRIPTS ==
| |
| Some useful internal duply variables are exported to the scripts.
| |
| | |
| PROFILE, CONFDIR, SOURCE, TARGET_URL_<PROT|HOSTPATH|USER|PASS>,
| |
| GPG_<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 .
| |
| | |
| == EXAMPLES ==
| |
| create profile 'humbug'
| |
| duply humbug create (don't forget to edit this new conf file)
| |
| backup 'humbug' now
| |
| duply humbug backup
| |
| list available backup sets of profile 'humbug'
| |
| duply humbug status
| |
| list and delete outdated backups of 'humbug'
| |
| duply humbug purge --force
| |
| 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
| |
| | |
| == FILES ==
| |
| in profile folder '~/.duply/<profile>' or '/etc/duply'
| |
| conf profile configuration file
| |
| pre,post pre/post scripts (see above for details)
| |
| gpgkey.*.asc exported GPG key files
| |
| exclude a globbing list of included or excluded files/folders
| |
| (see "duplicity manpage", section FILE SELECTION)
| |
| | |
| == IMPORTANT ==
| |
| Copy the _whole_ profile folder after the first backup to a safe place.
| |
| It contains everything (duply related) needed to restore your backups.
| |
| | |
| Pay attention to (possibly later added) external files such as credentials
| |
| or auth files (e.g. netrc, .megarc, ssh keys) or environment variables
| |
| (e.g. DPBX_ACCESS_TOKEN).
| |
| It is good policy to place those in the profile folder if possible at all.
| |
| e.g. in case of 'multi://' target the config .json file
| |
| Env vars should be added to duply profiles' conf file.
| |
| | |
| Keep access to these files restricted as they contain information (gpg key,
| |
| passphrases etc.) to access and modify your backups.
| |
| | |
| Finally
| |
| You should attempt a restore from an unrelated host to be sure you really
| |
| have everything needed for restoration.
| |
| | |
| Repeat these steps after _all_ configuration changes. Some configuration
| |
| options are crucial for restoration.
| |
|
| |
|
| == SEE ALSO ==
| | </noinclude> |
| duplicity man page
| | [[Kategorie:Linux/Befehl]] |
| duplicity(1) or http://duplicity.nongnu.org/duplicity.1.html
| |