====== Backup ======
Backup ist unter Linux dank einer Vielzahl leistungsfähiger Tools ist lösbares Problem. [[windows:backup|Backup unter Windows]] wird extra behandelt.
===== Backupregeln =====
3-2-1 Regel:
* Kopie 1: Sicherung vor Ort und zugreifbar
* Kopie 2: Sicherung örtlich entfernt um lokale Probleme (Brand etc.) zu vermeiden
* Kopie 3: Sicherung offline und anderes Speichermedium (z.B. Magnetband)
sonstige Regeln:
* auch Vollbackups vom System anfertigen, nicht nur von den Daten (damit man schnell wiederherstellen kann ohne vorher das Betriebssystem installieren zu müssen: sog. "bare metal recovery")
* Backups verifizieren und testweise **wiederherstellen**
* Backups verschlüsseln (kein Ärger mit verlorenen Bändern etc.)
* Backups sollten nicht von der gleichen Hardware abhängig sein
Bei sehr wichtigen Daten lohnt es sich mehrgleisig zu fahren:
* die Quelldateien (z. B. bei Datenbanken) sichern
* logische Backup ziehen (Klartext-Exporte, SQL/XML-Dumps)
* Syncronisierung (z.B. rsync) auf zweiten Rechner ziehen undv ([[linux:LVM]]-) Snapshots anfertigen
===== Backupmethoden =====
* inkrementelle Sicherung
* differenzielle Sicherung
* Vollsicherung (Full-Backup)
===== Links =====
* **[[http://www.it-works.co.at/talks/disasterHO.pdf|Disaster Recovery mit Linux Tools]]**
* **[[http://www.lonerunners.net/blog/archives/961-Linux-backup-software-and-how-to.html|Linux backup software and how-to (Linkliste)]]**
* **[[http://people.ee.ethz.ch/~jfeller/data/vortrag.pdf|Folien: Backup mit Linux]]**
* **[[http://www.linuxplanet.com/linuxplanet/tutorials/6433/1/|Linux Backups For Real People, Part 1]], [[http://www.linuxplanet.com/linuxplanet/tutorials/6435/1/|Part 2]] und [[http://www.linuxplanet.com/linuxplanet/reviews/6437/1/|Part 3]].**
* [[http://www.howtoforge.com/creating_dd_images_with_air|Creating a dd/dcfldd Image Using Automated Image & Restore (AIR)]]
* [[http://www.tldp.org/HOWTO/Linux-Complete-Backup-and-Recovery-HOWTO/index.html|Linux Complete Backup and Recovery HOWTO]]
* [[http://www.desktoplinux.com/articles/AT2280165098.html|A simple Linux backup method]]
* [[http://www.dvdisaster.de/|dvdisaster-Projekt]]: Fehlerkorrektur-Daten für DVDs (Linux, Windows, BSD)
* [[http://www.theregister.com/2006/12/01/data_protection/|Your data is protected: but is it protected enough?]]
* [[http://www.freesoftwaremagazine.com/blogs/backing_up_your_system_with_free_software|Backing up your system with free software]]
* [[http://linux.ittoolbox.com/topics/t.asp?t=302&p=302&h1=302|Backup/Recovery]]
* [[http://www.faqs.org/docs/Linux-HOWTO/Linux-Complete-Backup-and-Recovery-HOWTO.html|Linux Complete Backup and Recovery HOWTO]]
* [[http://www.data-recovery-software.net/Linux_Recovery.shtml|R-Linux: Linux Recovery Software]]
* [[http://www.linuxcertified.com/linux-recovery.html|Recovering a Linux System]]
* [[http://recover.sourceforge.net/linux/|Recovering files in Linux]]
* [[http://www.linux-magazin.de/Heft-Abo/Ausgaben/2012/05/Backup|Report: Unbeaufsichtigte Backups - Retten ohne Personal]]
Wenn man eine Datei gelöscht hat, die noch in Benutzung ist:
* [[http://www.linux.com/article.pl?sid=06/10/30/1652211|Bring back deleted files with lsof]]
===== Hausmittel =====
Die interessanten Befehle dazu sind:
* dd (siehe unten)
* cpio: [[http://linuxhelp.blogspot.com/2005/05/creating-tape-archives-using-cpio.html|Creating Tape ARchives using cpio]]
* afio
* tar
* und rsync (siehe unten).
Evtl. könnte auch [[http://www.backup-manager.org/|Backup Manager]] oder [[http://wertarbyte.de/tartarus.shtml|Tartarus]] interessant sein.
==== dd ====
dd : exaktes kopieren eines Teils bzw. einer ganzen Festplatte.
:!: Achtung: Bei Lesefehlern wird abgebrochen! Das lässt sich mit ''conv=noerror'' verhindern.
Z.B. hier das kopieren einer primäre IDE-Festplatte auf eine sekundäre: dd if=/dev/hda of=/dev/hdb
Man kann auch mit den Parametern ''count'' und ''skip'' arbeiten, allerdings sollte man schon wissen welche Festplatten (/dev/...) man beschreibt, sonst hat man statt einem Backup die Festplatte leer gemacht.
* dd + gzip:
* einpacken: dd if=/dev/PARTITION | gzip > image.gz
* wieder entpacken: gunzip -c image.gz | dd of=/dev/PARTITION
* Eine Fortschrittsanzeige für dd geht nur sehr umständlich: Zwischendurch kann man von einer anderen Konsole den Befehl pkill -USR1 dd
absetzen, die aktuell kopierten Bytes und die Geschwindigkeit werden dann auf der ursprünglichen Konsole ausgegeben.
alternativ kann man beim Start die Imagedatei wachsen sehen (nur ohne Kompression aussagekräftig:
dd if=/dev/PARTITION of=IMAGE & watch --interval=1 "du -k IMAGE"
Siehe auch: [[http://www.heise.de/ct/06/02/182/default.shtml|Fortschrittsanzeige bei dd]].
:!: dd ist ist der Standard-einstellung (bs=512) sehr langsam, deshalb sollte man
- drauf achten, dass die Festplatte mit DMA/32-Bit-Zugriff läuft
- die Blockgröße (=blocksize kurz bs) hochsetzen (Z.B. auf 255x63x512 = 8225280 was heute einer Spur entspricht)
Komplettbeispiel:
hdparm -c 1 -d 1 -k 1 /dev/sda
hdparm -c 1 -d 1 -k 1 /dev/sdb
dd if=/dev/sda of=/dev/sdb bs=8225280 ; sync
Der **MBR** (Master boot record) **einer Festplatte** kann z.B. durch anhängen von "bs=512 count=1" gesichert werden.
===== Backup über Netzwerk =====
* Images mit **dd und netcat** - gänzlich unverschlüsselt, unsicher, dafür schnell wenn dd eine ausreichend große blocksize (bs) hat:
* Server (Ziel, Option p muss bei neueren Version weggelassen werden): nc -l 1234 | dd bs=8225280 of=sda1.bak.dd
* Client (Quelle): dd if=/dev/sda1 bs=8225280 | nc ServerIP 1234
* Images mit **dd+ssh** (relativ schnell und verschlüsselt): dd if=/dev/sda1 bs=8225280 | ssh -c arcfour Benutzer@Server 'dd bs=8225280 of=sda1.bak.dd'
* Images mit **partimage** gehen auch über Netzwerk. Es muss ein Server in einer passenden Version (der gleichen?) eingerichtet sein.
* Archive mit **tar+ssh** (verschlüsselt): tar -cv verzeichnis1 verzeichnis2 | ssh Benutzer@Server "tar -x"
Die Dateien/Verzeichnisse werden gepackt, per [[netzwerke:SSH]] zum anderen Server getunnelt und dort über die Pipe im Homeverzeichnis des Benutzers entpackt.
* [[http://www.rootforum.de/forum/viewtopic.php?t=31424|Backup2l+Sitecopy und FTP-Server]]
===== Backuplösungen =====
* [[software:Bacula|Bacula und sein fork Bareos]]
* [[https://restic.net/|Restic]] (mehrere backends möglich, u.a. S3 key pro System oder individuell; https://restic.readthedocs.io/en/latest/080_examples.html)
* [[rclone]] (kann auch zum mounten benutzt werden, z.B. von restic oder bacula OSS)
* [[https://www.urbackup.org/|urbackup]]
* [[BorgBackup]] + optional: https://vorta.borgbase.com/|Vorta (GUI)
* [[BackupPC]]
* [[duplicity]]
* Amanda (bzw. Zmanda)
==== Reoback ====
* [[http://sourceforge.net/projects/reoback/|Homepage+Download]]
* [[http://www.strato-faq.de/indexe.php4?base=view.php4%3Farticleid%3D1193%26subcatid%3D2.4.4.12|Strato-Howto]]
* {{server:reoback_unter_linux_einrichten.pdf|Reoback_unter_linux_einrichten.pdf}}
==== Restore ====
[[http://www.linux.com/feature/126716|Create a backup server with Restore]] (auch LiveCD)
===== Syncronisation =====
Zur Syncronisation eignet sich [[wpde>Unison]] (auch mit grafischer Benutzeroberfläche und rsync-Unterstützung) sowie eine Funktion im Dateimanager [[wpde>Krusader]].
==== RSync ====
[[wpde>RSync]] ist ein Protokoll und Programm zur effizienten Dateiübertragung. Dabei werden nur geänderte (oder gelöschte) Daten übertragen, was enorm Zeit spart.
Es ist allerdings eher für 1:1 Beziehungen geeignet, schwierig wird es wenn auf mehr als einer Seite Änderungen vorgenommen werden und mehr als zwei Partner diese vornehmen.
=== Syncronisieren ===
Für eine schnellere Syncronisation zwischen verschiedenen Rechnern reicht eine Zeile:
- lokales Verzeichnis aktualisieren: rsync -avz -e ssh user@host:dir/ dir
- Verzeichnis auf einem entfernten Rechner anhand des lokalen Verzeichnisses aktualisieren: rsync -avz -e ssh dir/ user@host:dir/
Allerdings darf nur eines der beiden Quell/Zielorte per SSH erreicht werden, es muss also von einem Quell/Zielrechner gestart werden.
=== Backup ===
Um ein Backup von einem Quellverzeichnis (/BACKUP/QUELLPFAD auf dem per [[netzwerke:SSH]] erreichbaren Server) auf den lokalen Pfad (/LOKALER/ZIELPFAD) auf dem Client durchzuführen reicht eine einzige Zeile nach dem Schema ''rsync OPTIONEN Quelle Ziel'':
rsync -avz --stats --delete USER@HOST.de:/BACKUP/QUELLPFAD /LOKALER/ZIELPFAD
:!: Im Zweifel einmal den Parameter -n (oder ''--dry-run'' für einen Testlauf) anhängen , ''--delete'' sorgt nämlich dafür das ALLE lokalen Änderungen gelöscht werden. Man kann natürlich auch statt löschen die Dateien mit einem Suffix (Zusatz) wie .bak versehen (Option ''--suffix=.bak'') oder in ein eigenes Verzeichnis sichern (Option ''--backup-dir=PFAD''); der PFAD kann dabei relativ oder absolut angegeben werden). Bandbreitenlimits kann man mit der Option bwlimit (z.B.''--bwlimit=30'' für 30 Kilobit pro Sekunde) vorgeben.
:!: Mit der Option ''--backup-dir'' kann man Änderungen in ein anderes Verzeichnis sichern.
:!: Unterschieden wird auch nach dem endenden Slash (/):
* /BACKUP/QUELLPFAD meint PFAD und seinen Inhalt
* /BACKUP/QUELLPFAD/ meint **nur** den Inhalt von QUELLPFAD
Also würde
rsync -avz USER@HOST.de:/BACKUP/QUELLPFAD /LOKALER/ZIELPFAD
Das Verzeichnis QUELLPFAD in /LOKALER/ZIELPFAD anlegen (also /LOKALER/ZIELPFAD/QUELLPFAD) während
rsync -avz USER@HOST.de:/BACKUP/QUELLPFAD/ /LOKALER/ZIELPFAD
Die Dateien unterhalb von /BACKUP/QUELLPFAD/ in /LOKALER/ZIELPFAD anlegt (also /LOKALER/ZIELPFAD/Datei1 ...).
rsync muss mit Root-Rechten ausgeführt werden, da sonst uid/gid und die Rechte nicht mitgesichert werden. Wenn das nicht geht/nicht gewollt ist dann kann rsync mit "**--fake-super**" benutzt werden, damit werden diese Informationen in erweiterten Attributen gesichert. Dazu muss auf dem Zielrechner auf dem Zielordner die mount-Option "user_xattr" aktiv sein (sonst sind keine erweiterten Rechte möglich).
Siehe [[http://serverfault.com/questions/119846/rsync-and-fake-super-how-to-preserve-attributes|rsync and --fake-super - how to preserve attributes?]]:
# backup (vom Quellrechner aus):
rsync -avz --rsync-path="rsync --fake-super" /Quell-Ordner BENUTZER@BACKUP-RECHNER:/Zielordner/Server1-Quell-Ordner
# restore (vom Quellrechner aus):
rsync -avz --rsync-path="rsync --fake-super" BENUTZER@BACKUP-RECHNER:/Zielordner/Server1-Quell-Ordner /Quell-Ordner
Während der Übertragung bekommen die temporären Teile eine willkürliche Endung und werden nach beendetem Transfer (oder Abbruch!) wieder auf den ursprünglichen Namen umbenannt. Wenn man unterbrochene Übertragungen wiederaufnehmen will, sollte man die Option --partial einsetzen, dabei sollte man beachten das man später nicht das Original mit dem beim Abbruch der Übertragung umbenannten (kleineren) Teil überschreibt.
Wenn man der Datensicherung automatisiert vornehmen will, stört natürlich die Paßwortabfrage von [[netzwerke:SSH]]. Deshalb richtet man dafür die [[netzwerke:SSH#publicprivate-key_authentifizierung|Authentifizierung über Zertifikate]] ein.
Man kann auch einen **[[https://help.ubuntu.com/community/rsync|Rsync-Dienst (daemon) aufsetzen]]**, der dann auf den Port 873 (TCP und UDP) arbeitet. Dazu startet man rsyncd manuell oder lässt von [[xinetd|inetd/xinetd]] aufrufen.
=== rsync upload spezial ===
hier ein paar spezielle Beispiele für den upload (-n rausnehmen falls kein Test mehr):
- rsync -nv --progress --recursive --links --times --size-only --delete /media/src/ /media/dst/
- Upload-Odner /media/test/transfer (enthält den diff): rsync -nv --progress --recursive --links --times --size-only --delete --compare-dest=/media/test/transfer /media/src/ /media/dst/
=== Links ===
* [[http://www.linux-magazin.de/Artikel/ausgabe/2004/09/backups/backups.html|Snapshot-Backups mit Rsync]]
* [[http://linuxhelp.blogspot.com/2005/09/backup-your-data-with-rsync.html|Backup your data with rsync]]
* [[http://rootwiki.unixfreunde.de/index.php/Backup_via_Rsync|Backup via Rsync]]
* [[http://www.heinlein-support.de/web/wissen/rsync-backup/|Howto: Backups und Snapshots von Linux-Servern mit rsync und ssh]]
* [[http://blog.jl42.de/index.php?/archives/56-Backups-mit-rsnapshot.html|Backups mit rsnapshot]]
* [[http://samba.anu.edu.au/ftp/rsync/rsync.html|rsync manual]]
* [[http://wiki.ubuntuusers.de/rsync|rsync]]
=== RSnapshot ===
Mit [[http://rsnapshot.org/|Rsnaphot]] es möglich durch hardlinks mehrere Versionen der Backups zu behalten. Die Hardlinks sind eine Spezialität Unixartiger (Unixoider-) Betriebssysteme und sorgen dafür das nur geänderte Dateien zusätzlichen Platz belegen. Damit hat man inkrementelle Backups. Die Konfiguration liegt in /etc/rsnapshot.conf, hier kann man die zu sichernden Verzeichnisse definieren die dann (im Allgemeinen) im Verzeichnis ''/.snapshots/'' abgelegt werden.
=== ftplicity ===
Verschlüsselte Backups mit ftp und rsync.
[[http://www.heise.de/security/artikel/78816/0|Hinter Schloss und Siegel - Backups auf nicht vertrauenswürdige FTP-Server]]
[[http://www.heise.de/ct/06/13/links/216.shtml|ftplicity download]]
[[http://debianhowto.de/doku.php/de:howtos:sarge:backup_ftplicity|How-to: Backups mit ftplicity/duplicity]]
=== rdiff-Backup ===
* [[http://www.debianhowto.de/howtos/de/rdiff-backup/|rdiff-backup HOWTO]]
* [[http://www.nongnu.org/rdiff-backup/docs.html|rdiff-backup Documentation]]
* [[http://freshmeat.net/projects/rdiff-backup/|rdiff-backup-Projektseite]]
==== csync2 ====
csync eignet sich zur Synchronisation zwischen mehr als zwei Partnern auf denen geschrieben wird. Im Gegensatz zur rsync muss hier auch nicht der ganze Dateibaum durchkämmt werden sondern es wird eine lokale Datenbank geführt welche Dateien geändert wurden. Mit lsyncd kann der Syncronisationsprozess direkt nach einer Änderung (inotify) ausgeführt werden, siehe Anleitung: https://icicimov.github.io/blog/devops/File-system-sync-with-Csync2-and-Lsyncd/ .
* Installation: apt install csync2
* inetd konfigurieren:apt purge openbsd-inetd
apt install xinetd
systemctl is-enabled xinetd
systemctl restart xinetd
* Schlüssel generieren: csync2 -k /etc/csync2.key
openssl genrsa -out /etc/csync2_ssl_key.pem 2048
openssl req -batch -new -key /etc/csync2_ssl_key.pem -out /etc/csync2_ssl_cert.csr
openssl x509 -req -days 9999 -in /etc/csync2_ssl_cert.csr -signkey /etc/csync2_ssl_key.pem -out /etc/csync2_ssl_cert.pem
* config-Dateien auf die anderen Partner kopieren incl. keys:scp /etc/csync2* NODE2:/etc/
scp /etc/csync2* NODE3:/etc/
* Beispiel einer Samba4-Sysvol-Syncronisation ''/etc/csync2.cfg'':
ignore uid;
ignore gid;
ignore mod;
group samba4
{
host DC1;
host DC2;
host DC3;
key /etc/csync2.key;
include /var/lib/samba/sysvol/;
exclude .*;
action {
exec "samba-tool ntacl sysvolreset";
}
}
* testen: csync2 -xv
* Auf allen Beteiligten Nodes in den Crontabs den sync setzen (Minuten variieren damit nicht alle drei Nodes zur gleichen Sekunden syncen): ''/etc/crontab'' */10 * * * * root csync2 -x
weitere Links:
* http://www.wir1234.de/wiki/doku.php?id=csync2