{"id":172,"date":"2013-05-08T00:58:56","date_gmt":"2013-05-07T22:58:56","guid":{"rendered":"http:\/\/mj.w1.ms5.eu\/blog\/?p=172"},"modified":"2014-02-08T15:00:52","modified_gmt":"2014-02-08T14:00:52","slug":"backups","status":"publish","type":"post","link":"https:\/\/mjott.de\/blog\/172-backups\/","title":{"rendered":"Backups"},"content":{"rendered":"<h3>Motivation<\/h3>\n<blockquote><p>If data does not exist in at least three places, one of them offsite, it doesn\u2019t exist. (Alex Lindsay?)<\/p><\/blockquote>\n<p>Mein letzter Datenverlust liegt schon viele Jahre zur\u00fcck und geschah noch zu einer Zeit, als ich Computer fast nicht f\u00fcr produktive Zwecken einsetzte. Inzwischen hat sich das ge\u00e4ndert, und nach rund zehn Jahren ohne Zwischenf\u00e4lle wollte ich mein Gl\u00fcck nicht weiter auf die Probe stellen und habe ein vern\u00fcnftiges Backup-System aufgesetzt, welches jetzt seit \u00fcber drei Jahren zuverl\u00e4ssig seinen Dienst verrichtet. Im folgenden stelle ich diese Backup-L\u00f6sung n\u00e4her vor.<\/p>\n<h3>Anforderungen<\/h3>\n<ul>\n<li>Zentrales Backup \u00fcber Netzwerk (f\u00fcr mehrere Rechner)<\/li>\n<li>Automatisierbarkeit<\/li>\n<li>Sicherung\/Archivierung nach dem <a title=\"Wikipedia: Generationenprinzip\" href=\"http:\/\/de.wikipedia.org\/wiki\/Generationenprinzip\">Generationenprinzip<\/a><\/li>\n<\/ul>\n<h3>Konzept<\/h3>\n<p>Nach dem Generationenprinzip (auch bekannt als Gro\u00dfvater-Vater-Sohn-Prinzip) werden Sicherungen mit unterschiedlicher Dauer vorgehalten, der Abstand zwischen zwei noch vorhandenen Sicherungen nimmt also zu je weiter der Sicherungszeitpunkt in der Vergangenheit liegt. Damit k\u00f6nnen auch vor l\u00e4ngerer Zeit gel\u00f6schte oder ge\u00e4nderte Daten, bei vergleichsweise moderatem Speicherbedarf, wiederhergestellt werden. F\u00fcr meine Zwecke habe ich ein w\u00f6chentliches Backup-Intervall gew\u00e4hlt, wobei einmal im Quartal ein Vollbackup (&#8220;Gro\u00dfvater&#8221;, Lebensdauer zwei Jahre) erstellt wird. Einmal im Monat erfolgt eine differentielle Sicherung (&#8220;Vater&#8221;, Lebensdauer ein Jahr), an den verbleibenden w\u00f6chentlichen Terminen ein inkrementelles Backup (&#8220;Sohn&#8221;, Lebensdauer sechs Monate).<\/p>\n<p>Als Sicherungsmedium werden Festplatten eingesetzt, ein RAID 1 (zwei Festplatten, gespiegelt) dient als Prim\u00e4rspeicher. Die Archivierung erfolgt auf zwei externen Festplatten (manuell gespiegelt, kein RAID). Da diese normalerweise nicht angeschlossen sind, wird die Archivierung nur im Monatsrhythmus ausgef\u00fchrt, wodurch der Bedarf manueller Interaktion m\u00f6glichst gering gehalten wird.<\/p>\n<h3>Realisierung<\/h3>\n<p>Als Basis wird ein Linux-Server mit Software-RAID f\u00fcr den Prim\u00e4rspeicher eingesetzt. Als Backup-Software kommt <a title=\"Bacula\" href=\"http:\/\/www.bacula.org\/de\/\">Bacula<\/a> zum Einsatz, ein sehr flexibles Netzwerk-Backup-System . Bacula ist tendenziell eher f\u00fcr die Nutzung in deutlich gr\u00f6\u00dferem Ma\u00dfstab (Firmen, Rechenzentren) ausgelegt und dementsprechend m\u00e4chtig, aber auch leicht \u00fcber externe Anwendungen\/Shellscripte erweiterbar. Das Bacula-Backend (&#8220;Director&#8221; und &#8220;Storage-Daemon&#8221;) unterst\u00fctzt neben Linux noch einige andere *nixe sowie Windows, der Client (&#8220;File-Daemon&#8221;) ist f\u00fcr fast jedes relevante Betriebssystem verf\u00fcgbar. Zu Verwaltungszwecken nutzt der &#8220;Director&#8221; eine SQL-Datenbank, in meinem Fall eine PostgreSQL-Instanz.<\/p>\n<p>Bacula bietet die M\u00f6glichkeit, bestehende Sicherungen zu einem neuen &#8220;virtuellen Vollbackup&#8221; zu verschmelzen. Anstelle einer langwierigen Vollsicherung\u00a0 ist so nur eine schnelle inkrementelle Sicherung erforderlich, die dann mit fr\u00fcheren Backups zu einem neuen Vollbackup zusammengef\u00fchrt wird. Aus diesem Grund werden \u00e4ltere Sicherungen f\u00fcr ein Sicherungsintervall (Voll: f\u00fcnf Monate, Differentiell: vier Monate, Inkrementell: f\u00fcnf Wochen) auf dem Prim\u00e4rspeicher vorgehalten, ehe sie nur noch \u00fcber den Archivspeicher verf\u00fcgbar sind. Von den vier Vollsicherungen im Jahr werden drei als virtuelle Backups ausgef\u00fchrt.<\/p>\n<p>Die Nutzung virtueller Vollbackups interferiert leider mit der Archivfunktion von Bacula, diese Beschr\u00e4nkung ist aber durch einige Shellscripte zu umgehen.<\/p>\n<h3>Was fehlt<\/h3>\n<ul>\n<li>Festplatten k\u00f6nnen ihre Magnetisierung nach einigen Jahren verlieren. Als Gegenma\u00dfnahme werden die Backup-Medien einmal j\u00e4hrlich manuell neu geschrieben. Erg\u00e4nzend sollen Pr\u00fcfsummen\/Parity-Daten f\u00fcr die Sicherungsarchive hinzukommen, um gekippte Bits (insbesondere bei der Langzeitarchivierung) erkennen und korrigieren zu k\u00f6nnen. Mittelfristig plane ich eine L\u00f6sung auf der Basis von inotify und PAR2, da es anscheinend keine &#8220;normalen&#8221; Dateisysteme mit einer entsprechenden Funktionalit\u00e4t gibt.<\/li>\n<li>Offsite-Speicherung. Eine der beiden externen Festplatten wird nach den Backups immer vollst\u00e4ndig vom Backup-Server und der Stromversorgung getrennt. Eine echte Offsite-L\u00f6sung ist f\u00fcr meine Zwecke eher \u00fcbertrieben, die Aufbewahrung in einem anderen Raum scheint mir ein geeigneter Kompromiss zu sein.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Motivation If data does not exist in at least three places, one of them offsite, it doesn\u2019t exist. (Alex Lindsay?) Mein letzter Datenverlust liegt schon viele Jahre zur\u00fcck und geschah noch zu einer Zeit, als ich Computer fast nicht f\u00fcr produktive Zwecken einsetzte. Inzwischen hat sich das ge\u00e4ndert, und nach rund zehn Jahren ohne Zwischenf\u00e4lle &#8230; <a title=\"Backups\" class=\"read-more\" href=\"https:\/\/mjott.de\/blog\/172-backups\/\" aria-label=\"Mehr Informationen \u00fcber Backups\">Weiterlesen<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[14],"tags":[15,16,17],"class_list":["post-172","post","type-post","status-publish","format-standard","hentry","category-digitales","tag-backup","tag-bacula","tag-linux"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/mjott.de\/blog\/wp-json\/wp\/v2\/posts\/172","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mjott.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mjott.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mjott.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mjott.de\/blog\/wp-json\/wp\/v2\/comments?post=172"}],"version-history":[{"count":18,"href":"https:\/\/mjott.de\/blog\/wp-json\/wp\/v2\/posts\/172\/revisions"}],"predecessor-version":[{"id":368,"href":"https:\/\/mjott.de\/blog\/wp-json\/wp\/v2\/posts\/172\/revisions\/368"}],"wp:attachment":[{"href":"https:\/\/mjott.de\/blog\/wp-json\/wp\/v2\/media?parent=172"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mjott.de\/blog\/wp-json\/wp\/v2\/categories?post=172"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mjott.de\/blog\/wp-json\/wp\/v2\/tags?post=172"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}