[[Vorlage(Getestet, bionic, focal)]] {{{#!vorlage Wissen [:Pakete_installieren: Installation von Paketen] [:Editor: Einen Texteditor öffnen] [:Terminal: Ein Terminal öffnen] }}} [[Inhaltsverzeichnis(2)]] [[Bild(Wiki/Icons/terminal.png, 48, align=left)]] Mit [http://www.rsnapshot.org/ rsnapshot] {en} ist es möglich, Snapshotordner (Schnappschussverzeichnisse) zur [:Sicherheit#Sicherungskopien:Datensicherung] auf z.B. einer externen USB-Festplatte zu erstellen. In diesen Ordnern liegt eine Kopie der zu sichernden Verzeichnis-Struktur und der Dateien. Sie können aus diesen Ordnern heraus direkt gelesen/restauriert werden. Rsnapshot überprüft dabei selbstständig, welche Dateien neu hinzu gekommen sind oder entfernt wurden. Ein Vorteil von rsnapshot, das wiederum auf [:rsync:] basiert, ist, dass die unveränderten Dateien und Verzeichnisse nur einmal gesichert werden. In allen weiteren Snapshots wird lediglich ein Hardlink auf die vorhandene Datei gesetzt. Das kostet fast keinen Speicherplatz und erlaubt viele Sicherungen ohne entsprechenden Platzverbrauch. Auch wenn viele Snapshot-Ordner erstellt wurden, belegt jede Datei, solange sie nicht geändert wurde, nur einmal Plattenplatz. Rsnapshot ist nur mit Einschränkungen für sich häufig ändernde Dateien geeignet. Diese werden bei jedem Sicherungslauf neu gesichert und erhöhen den Platzbedarf beträchtlich. Ein Beispiel sind Mailboxen, Datenbanken oder Logfiles. Für diese ist eher rdiff in Kombination mit regelmäßigen Dumps zu empfehlen. Alternativ bzw. ergänzend kann ein getrennter rsnapshot-Job für diese aufgesetzt werden, der größere Intervalle aufweist. Eine Alternative mit grafischer Konfiguration und Bedienung ist [:Back_In_Time:]. Allgemeine Hinweise zum Thema Datensicherung und zu weiterenProgrammen finden sich im entsprechenden Artikel [:Datensicherung:]. = Installation = Rsnapshot befindet sich in den offiziellen Paketquellen [1]: {{{#!vorlage Paketinstallation rsnapshot, universe }}} = Dateisystem des Zielmediums = Rsnapshot macht ein inkrementelles Backup und verwendet hierfür [:ln#Hardlinks:Hardlinks]. Dadurch muss jede unveränderte Datei nur einmal gesichert werden. Ab diesem Zeitpunkt wird sie nur verlinkt. Diese Tatsache macht es allerdings notwendig, auf dem Zielmedium, also z.B. einer externen USB-Festplatte, ein hardlinkfähiges [:Dateisystem:] zu haben. Die gängigen Linuxdateisysteme, z. B. '''ext3''', '''ext4''', unterstützen solche Links. Inzwischen ist es auch möglich, von Linux aus auf '''NTFS'''-Partitionen Hardlinks zu erzeugen. Die '''FAT'''..-Dateisysteme hingegen scheiden für rsnapshot aus. = Konfiguration = Die Konfiguration von rsnapshot erfolgt über die Datei '''/etc/rsnapshot.conf'''. Diese Datei wird bei der Installation automatisch angelegt und kann mit einem Texteditor mit Root-Rechten [2] angepasst werden. Folgend werden nun die wichtigsten Konfigurationen kurz angesprochen. Für eine ausführliche Erklärung zu allen Parameter sei auf die Kommentare in der Datei bzw. die [http://rsnapshot.org/rsnapshot/docs/docbook/rest.html Projektseite] {en} verwiesen. Die Reihenfolge der Parameter in diesem Artikel entspricht der in der Konfigurationsdatei. Daher scheinen die einzelnen Konfigurationsschritte hier in einer nicht besonders logischen Reihenfolge zu sein. {{{#!vorlage Hinweis Verzeichnisse müssen mit '''/''' enden. Daher muss man z. B. '''/home/user/''' statt '''/home/user''' benutzen. Nach dem letzten '''/''' darf kein Leerzeichen mehr stehen. Das Trennungszeichen zwischen Schlüssel und Wert ist [[Vorlage(Tasten, tab)]]. Werden Schlüssel und Wert mit Leerzeichen getrennt, ist die Datei nicht valide. }}} == Backup-Zielverzeichnis == '''snapshot_root''' ist das Zielverzeichnis, in dem die Backups abgelegt werden. Unterhalb dieses Verzeichnisses werden noch weitere Ordner angelegt, dazu aber unten mehr. {{{ snapshot_root /var/cache/rsnapshot/ }}} Es ist natürlich auch möglich, die Backups auf z.B. einer externen USB-Festplatte abzulegen. Für diesen Fall sollte das Medium während/nach dem Start des Systems automatisch gemountet werden. Weitere Informationen zu diesem Thema finden sich in den Artikeln [:mount:] und [:fstab:]. == Zielverzeichnis nicht automatisch erzeugen == Wenn das Backup auf einem externen Medium, z.B. einer USB-Platte, gespeichert werden soll, dann darf rsnapshot natürlich nur dann speichern, wenn die Platte auch tatsächlich am Rechner angeschlossen und eingeschaltet ist. Andernfalls würde rsnapshot die Sicherungen auf der lokalen Platte z.B. unter '''/media/usb...''' ablegen. Um dies zu verhindern, muss das '''#''' vor dem folgenden Parameter entfernt und der Wert auf '''1''' gesetzt werden. {{{ no_create_root 1 }}} == Aufbewahrungszeiträume == Mittels des Schlüssels `retain` (früher `interval`) wird die Aufbewahrungsdauer der verschiedenen Backups definiert. {{{ #retain hourly 6 retain daily 7 retain weekly 4 retain monthly 6 }}} In diesem Beispiel werden keine stündlichen Backups erstellt (zu erkennen an dem Kommentierungszeichen #). Von den täglichen Backups werden 7 gespeichert, was also bei einem System, das wirklich jeden Tag ein Backup macht, genau einer Woche entspricht. Von den wöchentlichen Backups werden 4 und von den monatlichen 6 gespeichert. Das neuste zur Verfügung stehende Backup ist daher von heute bzw. gestern, das älteste von vor einem halben Jahr. Es werden immer erst die definierten Sicherungen ausgeführt, bevor die nächste Stufe initiiert wird. Das bedeutet, dass der Versuch rsnapshot mit `rsnapshot monthly` aufzurufen, so lange scheitert, solange nicht alle definierten und nicht auskommentierten Vorabsicherungen mindestens einmal durchlaufen wurden. Da rsnapshot ein inkrementelles Backup mit platzsparenden Hardlinks macht, können, je nach Menge der veränderten Daten, sehr viele Backups aufgehoben werden. == Logausgaben und -datei == Die Standardeinstellungen für das Logverhalten von rsnapshot sind für bereits laufende Systeme optimiert. In der Konsole werden nur Fehler ausgegeben, eine Logdatei wird gar nicht erzeugt. Diese Einstellungen sind allerdings gerade beim Einrichten eines Backups sehr hinderlich, da man keine Informationen bekommt, ob rsnapshot gerade etwas tut und vor allem was es tut. Für die ersten Testläufe sind die folgenden Einstellungen sinnvoll, diese können bei Bedarf nach den ersten erfolgreichen Backups wieder auf den Originalzustand zurückgesetzt werden. {{{ verbose 4 loglevel 4 logfile /var/log/rsnapshot }}} == Verzeichnisse/Dateien ein- und ausschließen == Je nachdem, welche Verzeichnisse gesichert werden sollen, empfehlen sich die folgenden `excludes` (Achtung: die Leerzeichen hinter "exclude" müssen TABs sein!): {{{ exclude Recycled/ exclude Trash/ exclude lost+found/ exclude .gvfs/ ## nur bis Ubuntu 12.04 erforderlich }}} Der Papierkorb ('''Recycled/''' bzw. '''Trash/''') sollte auf jeden Fall ausgenommen werden. {{{#!vorlage Warnung Das Verzeichnis '''~/.gfvs''' muss zwingend ausgenommen werden, wenn man das Homeverzeichnis sichern will. Da das von rsnapshot verwendete rsync nicht die notwendigen Rechte hat, um in diesem Verzeichnis zu löschen, wird der Sicherungsvorgang sofort abgebrochen und die folgende Fehlermeldung ausgegeben. {{{ rsync: readlink_stat("/home/user/.gvfs") failed: Permission denied (13) IO error encountered -- skipping file deletion rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1057) [sender=3.0.6] \}}} Weitere Informationen zu diesem Problem finden sich in diesem [post:2223919:Beitrag] im Forum. }}} {{{#!vorlage Hinweis Die oben angegebenen Exclude-Parameter sind als Default-Parameter für alle definierten Backupvorgänge zu verstehen. Es können auch zu jedem einzelnen Backup-Eintrag Exclude-Parameter angegeben werden. Dies kann z.B. sinnvoll sein, wenn externe Systeme mit gleicher Verzeichnisstruktur gesichert, aber unterschiedliche Verzeicnisse vom Backup ausgeschlossen werden sollen. In diesem Fall sind die Default-Exclude-Angaben für dieses Backup nicht gültig. }}} == Zu sichernde Verzeichnisse == In '''/etc/rsnapshot.conf''' wird in den Zeilen, die mit `backup` beginnen, angegeben, welche Verzeichnisse zu sichern sind. Seit Version 1.2 gilt dabei folgende Syntax: {{{ backup /home/ localhost/ backup /etc/ localhost/ backup /usr/local/ localhost/ }}} Der zweite Parameter in jeder Zeile `localhost/` stellt das Zielverzeichnis relativ zum Backup-Verzeichnis ('''snapshot_root''') dar. Möchte man eine Datei aus einem Backup vor einer Woche wieder herstellen findet man diese entsprechend dem hier gezeigten Konfigurationsbeispiel unter: '''/var/cache/rsnapshot/weekly.1/localhost/'''. == Externen Server sichern == Zum Sichern externer ("remote") Verzeichnisse bietet sich der Zugang über [:SSH:] __ohne__ Passphrase und mit einem dedizierten Backupnutzer an, der nur über beschränkte Rechte verfügt. In einer Basiskonfiguration geht das auch direkt mit dem Rootuser, falls dieser nicht freigegeben ist [wie unter Ubuntu üblich], müssen dem Backupuser in der Sudoers-Datei [:sudo/Konfiguration:] die entsprechenden Befehle freigegeben werden. Die Syntax innerhalb '''rsnapshot.conf''' lautet: {{{ backup backupuser@remotehost:/home/ remotehost/ exclude=/home/dir/to/exclude1,exclude=/home/dir/to/exclude2 }}} Die optionalen Parameter "exclude" überschreiben die oben erwähnten globalen Exclude-Parameter. Für den Betrieb über SSH muss noch die '''rsnapshot.conf''' angepasst werden. Zunächst muss die Unterstützung für [:SSH:] aktiviert werden. Dazu muss man die entsprechende Zeile auskommentieren: {{{ # Uncomment this to enable remote ssh backups over rsync. # cmd_ssh /usr/bin/ssh }}} Außerdem muss noch der richtige öffentliche Schlüssel angegeben werden: {{{ ssh_args -o BatchMode=yes -i /home/backupuser/.ssh/id_dsa }}} In diesem Beispiel hat der `backupuser` ein eigenes Homeverzeichnis. Sicherer ist es, dem Benutzer keine eigenes Homeverzeichnis zuzuweisen, sondern ein Verzeichnis unter '''/var/.ssh/''' einzurichten, in dem die Schlüssel gespeichert werden. Auf dieses wird dann in der '''rsnapshot.conf''' verwiesen. {{{#!vorlage Hinweis Falls zu dem Server noch nie zuvor eine SSH-Verbindung aufgebaut wurde, wird das zunächst ohne Fehlermeldung fehlschlagen, da dem Server nicht vertraut wird und die entsprechende Eingabeaufforderung durch `BatchMode=yes` unterdrückt wird. Man kann aber einfach den ersten Sicherungslauf ohne diese Option starten, oder sich mit dem selben Benutzer, der danach für das Backup verwendet wird, manuell via SSH anmelden und die Identität des Servers bestätigen. }}} Wenn man mehrere Server sichern möchte - jeden in ein eigenes Unterverzeichnis - dann kann es sinnvoll sein, dedizierte '''rsnapshot.conf'''-Dateien aufzusetzen, die dann getrennt per Cron aufgerufen werden. Dafür müssen die Konfigurationsdateien an rsnapshot mit der folgenden Syntax übergeben werden: {{{#!vorlage Befehl rsnapshot -c /PFAD/ZUR/KONFIGURATION/rsnapshot_conf1.conf }}} Zum einen können die Jobs dann getrennt aufgerufen werden, zum anderen kann dann auch der Backup über verschiedene "mountpoints" verteilt werden, da man pro '''rsnapshot.conf''' den Parameter `snapshot_root` unterschiedlich belegen kann. Beispiele: * {{{ snapshot_root /mnt/backup_SvrGrp1/ }}} * {{{ snapshot_root /mnt/backup_SvrGrp2/ }}} == Fortschritt im Überblick behalten == Wenn man sich auf den Server, auf dem rsnapshot läuft, nur über SSH einloggt und trotzdem den Fortschritt im Auge behalten möchte, belastet das Öffnen mehrerer SSH-Verbindungen den Server unnötig. Außerdem ist das Terminal nach Schließen der SSH-Verbindung natürlich nicht mehr vorhanden. Eine Alternative ist die Nutzung von [:Screen:], was es ermöglicht, das Fenster in den Hintergrund zu legen oder bei Bedarf auch zu "detachen", so dass die Verbindung geschlossen werden kann und bei einem späteren Wiederaufruf der SSH-Verbindung das Ausgabefenster wieder aufgerufen werden kann. Die Steuerung des Outputs ist über den Verbose-Parameter von '''rsnapshot.conf''' unproblematisch möglich. == Nach Konfigurationsänderungen == Nach der Anpassung der Konfigurationsdatei sollte geprüft werden, ob diese noch valide ist. Das erledigt der Befehl {{{#!vorlage Befehl rsnapshot configtest }}} Um einen Durchlauf von rsnapshot zu simulieren, ohne wirklich Daten zu sichern, wird rsnapshot mit dem Parameter -t ausgeführt, z.B. {{{#!vorlage Befehl rsnapshot -t daily }}} = Ausführung = == Von Hand == Aufgerufen wird rsnapshot dann im Terminal [3] mittels {{{#!vorlage Befehl sudo rsnapshot hourly }}} oder eben `daily` bzw. wie man es wünscht. == cron (für Server) == Wenn man einen Server mittels rsnapshot sichern möchte, so empfiehlt sich die Verwendung eines [:Cron:Cronjobs]. Dieser läuft in den gewünschten Intervallen immer zu einem festen Zeitpunkt und stößt somit das inkrementelle Backup an. Um rsnapshot mittels Cron zu starten, muss z. B. die Datei '''/etc/crontab''' erweitert werden. {{{ 0 2 * * * root /usr/bin/rsnapshot daily 0 5 * * 1 root /usr/bin/rsnapshot weekly 0 7 1 * * root /usr/bin/rsnapshot monthly }}} == anacron (für Desktops) == Das [:Cron:Cronjob]-System ist auf Desktop-Systemen, also auf Rechnern, die nicht ununterbrochen laufen, nicht zu empfehlen, da Cronjobs immer zu festen Zeitpunkten ausgeführt werden. Ist der Zeitpunkt verstrichen und der Rechner war nicht eingeschaltet, wird die entsprechende Sicherung nicht durchgeführt. Daher sollte man für Desktop-Systeme auf [:Cron#Anacron-Anac-h-ronistic-Cron:Anacron] zurückgreifen. Das garantiert, dass beispielsweise Jobs, die einmal täglich ausgeführt werden sollen, auch ausgeführt werden, wenn der Rechner zu der in der [:Cron:crontab] angegeben Zeit nicht läuft. Anacron-Jobs werden, im Gegensatz zu Cron, nicht in eine Datei eingetragen, sondern die Befehle werden in Dateien geschrieben und in entsprechenden Verzeichnissen abgelegt. Auf diese Weise wird zum Beispiel die Aktualisierungsverwaltung von Ubuntu gestartet. Wenn man rsnapshot täglich von anacron aufrufen lassen will, in der Standardkonfiguration immer 5 Minuten nach dem Systemstart, erzeugt man in einem Editor mit Root-Rechten eine Datei mit beliebigem Namen, in unserem Beispiel '''rsnapshot''', im Verzeichnis '''/etc/cron.daily/'''. In dieser Datei trägt man den [:Shell/Bash-Skripting-Guide für Anfänger#Die-Shebang:Shebang], gefolgt vom rsnapshot-Aufruf ein. {{{#!code bash #!/bin/sh /usr/bin/rsnapshot daily }}} Die Datei speichern und den Editor wieder verlassen. Anschließend muss die Datei mit den Rechten von anacron ausführbar sein. Dazu verwendet man den [:chmod:chmod-Befehl]. {{{#!vorlage Befehl sudo chmod 755 /etc/cron.daily/rsnapshot }}} Für eine wöchentliche und monatliche Ausführung geht man wie oben beschrieben vor, tauscht jedoch `cron.daily` gegen `cron.weekly` oder `cron.monthly`. Der Ausdruck im rsnapshot-Befehl muss nicht zwangsläufig getauscht werden, die Intervallnamen haben hier nur symbolischen Charakter. Aus Gründen der Verständlichkeit ist eine Änderung hier natürlich auch sinnvoll, allerdings nur, wenn dem in der Konfiguration von rsnapshot auch entsprechend Rechnung getragen wird. == Wiederherstellung == Wiederherstellung als Root ist natürlich ganz einfach. Wenn jedoch die gesicherten Dateien der Nutzer selbst rücksichern soll? Die erzeugten Verzeichnisse sind für den Standardnutzer nicht selbsterklärend (`hourly.0/server/mnt/etc.`, usw.). Es liegt also nahe, entweder im Linux-Filesystem symbolische Verknüpfungen ("symlinks") mit selbsterklärenden Namen auf die rsnapshot-Verzeichnisse zu erzeugen, oder dasselbe in Samba zu tun und den Nutzern dann auf "ihre" Verzeichnisse Leserechte zu geben. Dann kann jeder Nutzer seine Daten einfach zurücksichern. = Funktionsweise der Sicherung = Für das folgende Beispiel gilt, dass stündlich gesichert wird und die Aufbewahrungszeit 6 Stunden beträgt. In der '''/etc/rsnapshot.conf''' steht also als Intervall: {{{ retain hourly 6 }}} Das Zielverzeichnis ist standardmäßig '''/var/cache/rsnapshot/'''. Das Backup mit dem kleinsten Sicherungsintervall (hier: `hourly`) und der 0 ist immer das aktuellste. In dem Beispiel also '''/var/cache/rsnapshot/hourly.0/'''. Als Erstes wird die Lock-Datei angelegt, um gleichzeitige Aufrufe von rsnapshot zu verhindern. Dazu wird lediglich die Prozess-ID in die Lock-Datei geschrieben (rsnapshot prüft beim Start, ob die Datei vorhanden ist): {{{#!vorlage Befehl echo [process-id] > /var/run/rsnapshot.pid }}} Nun prüft rsnapshot, ob das älteste Backup vorhanden ist, wenn ja, wird dieses gelöscht. Das älteste Backup hat die höchste Zahl, abhängig von der als Intervall hinterlegten Aufbewahrungszeit. {{{#!vorlage Befehl rm -rf /var/cache/rsnapshot/hourly.5/ }}} Anschließend werden alle anderen Ordner (mit Ausnahme von '''/var/cache/rsnapshot/hourly.0''') inkrementiert, also die Zahl im Ordnernamen erhöht. {{{#!vorlage Befehl mv /var/cache/rsnapshot/hourly.4/ /var/cache/rsnapshot/hourly.5/ mv /var/cache/rsnapshot/hourly.3/ /var/cache/rsnapshot/hourly.4/ mv /var/cache/rsnapshot/hourly.2/ /var/cache/rsnapshot/hourly.3/ mv /var/cache/rsnapshot/hourly.1/ /var/cache/rsnapshot/hourly.2/ }}} Im Anschluss daran wird '''hourly.0''' nach '''hourly.1''' per [:ln#Hardlinks: Hardlink] kopiert. {{{#!vorlage Befehl cp -al /var/cache/rsnapshot/hourly.0 /var/cache/rsnapshot/hourly.1 }}} Nun erfolgt die eigentliche Sicherung in den Ordner '''hourly.0''' (Der Befehlsaufbau kann je nach Konfiguration abweichen): {{{#!vorlage Befehl rsync -a --delete --numeric-ids --relative --delete-excluded \ --exclude=/home/BENUTZERNAME/.gvfs /home \ /var/cache/rsnapshot/hourly.0/localhost/ }}} Jetzt wird der Zeitstempel des Ordners aktualisiert: {{{#!vorlage Befehl touch /var/cache/rsnapshot/hourly.0/ }}} Zum Abschluss wird die Lock-Datei wieder gelöscht: {{{#!vorlage Befehl rm -f /var/run/rsnapshot.pid }}} = Links = * [http://www.rsnapshot.org/ Projektseite] {en} * [http://rsnapshot.org/faq.html FAQ] {en} - häufige Fragen und Antworten * [github:rsnapshot/rsnapshot:Quellcode] {en} # tag: Sicherheit, Backup, Datensicherung