Datensicherung: Unterschied zwischen den Versionen

Aus OrgaMon Wiki
Zur Navigation springen Zur Suche springen
 
(46 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 14: Zeile 14:


Jedem Backuplauf wird zunächst eine fortlaufende BACKUP_TAN zugeordnet. Nun wird der Datenbank-Server veranlasst die gesamte Datenbank in die Datei Sicherung_<BACKUP_TAN>.fbak zu sichern. Diese einzelne Datei enthält die gesamte zu sichernde Datenbank (".fdb"). Dabei kann gesteuert werden in welchem Pfad diese Datei angelegt wird. Dies erfolgt durch den Systemparameter:<br>
Jedem Backuplauf wird zunächst eine fortlaufende BACKUP_TAN zugeordnet. Nun wird der Datenbank-Server veranlasst die gesamte Datenbank in die Datei Sicherung_<BACKUP_TAN>.fbak zu sichern. Diese einzelne Datei enthält die gesamte zu sichernde Datenbank (".fdb"). Dabei kann gesteuert werden in welchem Pfad diese Datei angelegt wird. Dies erfolgt durch den Systemparameter:<br>
<br>
 
  DatenbankBackupPfad=/srv/smb/freigabe/OrgaMon/Datensicherung/
#
<br>
# Beispiel 1: Linux Server speichert direkt in OrgaMon-Datensicherung
#
DatenbankBackupPfad=/srv/smb/freigabe/OrgaMon/Datensicherung/
#
# Beispiel 2: Windows Server speichert direkt in OrgaMon-Datensicherung
#
DatenbankBackupPfad=C:\Freigabe\OrgaMon\Datensicherung\
#
# best practice "Linux": fbak nach /srv/firebird
#
DatenbankBackupPfad=/srv/firebird/
 
Optimal ist natürlich, wenn die ".fbak" Datei sofort im .\Datensicherung Unterverzeichnis des OrgaMon landet. Dann kann Phase B übersprungen werden. Dies ist aber nur unter Voraussetzungen möglich auf die hiermit eingegangen wird: Wird das OrgaMon- Anwendungsverzeichnis durch den selben Server zur Verfügung gestellt der auch den Datenbankserver firebird betreibt, kann firebird seine Datensicherung direkt in das .\Datensicherungs - Verzeichnis des OrgaMon Anwendungsverzeichnis ablegen. Dadurch wird zusätzliches umkopieren vermieden. Beachten Sie jedoch dass die Rechte samba/firebird zusammenpassen.  
Optimal ist natürlich, wenn die ".fbak" Datei sofort im .\Datensicherung Unterverzeichnis des OrgaMon landet. Dann kann Phase B übersprungen werden. Dies ist aber nur unter Voraussetzungen möglich auf die hiermit eingegangen wird: Wird das OrgaMon- Anwendungsverzeichnis durch den selben Server zur Verfügung gestellt der auch den Datenbankserver firebird betreibt, kann firebird seine Datensicherung direkt in das .\Datensicherungs - Verzeichnis des OrgaMon Anwendungsverzeichnis ablegen. Dadurch wird zusätzliches umkopieren vermieden. Beachten Sie jedoch dass die Rechte samba/firebird zusammenpassen.  
Ist diese Angabe leer, so wird in das selbe Verzeichnis gesichert, in dem auch die Datenbank selbst liegt.
Ist diese Angabe leer, so wird in das selbe Verzeichnis gesichert, in dem auch die Datenbank selbst liegt.
Zeile 38: Zeile 53:
== Phase C: Gesamtsicherung ==
== Phase C: Gesamtsicherung ==


Hier wird das ganze OrgaMon-Verzeichnis mit allen Unterverzeichnissen (und damit auch den .fbaks der Phase B) in ein ZIP-Archiv gepackt. Mit einem Systemparameter kann angegeben werden, wo dieses Gesamtsicherungs- Zip entstehen soll. Es sollte immer ein Physikalisch anderes Laufwerk gewählt werden als das des OrgaMon Verzeichnisses, damit im Ausfall Moment nicht das Verzeichnis UND die Sicherungszips verloren sind.
* Hier wird das ganze OrgaMon-Verzeichnis mit allen Unterverzeichnissen (und damit auch den .fbaks der Phase B) in ein ZIP-Archiv gepackt.  
* Aus Geschwindigkeitsgründen wird das Archiv zunächst lokal in .\Dokumente\OrgaMon\ erstellt.
* Mit einem Systemparameter kann angegeben werden, wohin dieses Gesamtsicherungs-Zip nach Erstellung verschoben werden soll.  
<br>
<br>
  SicherungsPfad=<SicherungsPfad>
  SicherungsPfad=<SicherungsPfad>
<br>
<br>
Gesamtsicherung von .\ nach "Sicherung_<BACKUP_TAN>.zip")
* Bleibt diese Angabe leer, so erfolgt die Sicherung in das Stammverzeichnis des OrgaMon Anwendungsverzeichnisses.
 
* Es sollte immer ein physikalisch anderes Laufwerk gewählt werden, als das des OrgaMon-Verzeichnisses, damit im Ausfall Moment nicht das Verzeichnis UND die Sicherungszips verloren sind.
Bleibt diese Angabe leer, so erfolgt die Sicherung in das Stammverzeichnis des OrgaMon Anwendungsverzeichnisses.
 
*Lebensdauer dieser Dateien = 3 Tage
*In Zukunft werden anstelle der ZIP Dateien, ausführbare Setup-OrgaMon-Backup-nnnnnnnnnn.exe erstellt.


== 400 ==
== 400 ==
Zeile 58: Zeile 71:
  // die 400er-Zips sollten dauerhaft gespeichert werden
  // die 400er-Zips sollten dauerhaft gespeichert werden


== Haltbarkeit von Datensicherungen ==


== weitere Ideen ==
* Täglich entsteht ja die Gesamt-Sicherung, im Laufe der Jahre kann dies ein Datenvolumen von mehreren TB ergeben
 
* Es ist eigentlich auch nicht nötig von jedem Tag der Vergangenheit eine Sicherung zu haben
Sicherung auf eine extra Backup-Platte, die unter einem Linux für disen Zweck gemountet wird, danach das Backup, danach ein umount. Einfach auch um Strom zu sparen und die Lebensdauer der Platte zu erhöhen.
** Also wir würden jetzt den Stand vom 22.03.2017 benötigen, dann ist oft der 01.03.2017 oder der 01.04.2017 auch aussagekräftig genug
 
* Je weiter der Tag entfernt ist, um so grösser dürfen "Lücken" in der Datenhaltung sein
=== Datensicherungs-Algorithmus für Abbild-Begrenzungen ===
 
==== Vorgeschichte ====
 
* Nehmen wir an wir machen mit rsync Abbilder vom Dateisystem
* Es sollen vollständige Verzeichnis-Kopieen sein, ein Optimierungsversuch "Diff" soll hier keine Rolle spielen
* Habe ich die Möglichkeit z.B. 10 Versionen des vollständigen Dateisystems zu halten
 
BAND=$((($(date +%s)/86400)%10))


* Kann ich über BAND die Verzeichnisnamen "0" bis "9" erhalten.
=== Hohe Ansprüche aufweichen ===
* Ich habe so immer die heutige Sicherung und 9 zurückliegende


Nachteil war: Im unbemerkten Verlustfall von Dateien war es nicht immer möglich damit zu helfen, in dem Fall wäre es besser gewesen weiter zurückliegende Datensicherungen zu haben
von TÄGLICH" zu WÖCHENTLICH zu MONATLICH zu QUARTAL zu JÄHRLICH


==== Natürlichere Verteilung ====
* Das Prinzip ist dass wir einen Bereich definieren in dem wir täglich Datensicherungen haben wollen, sagen wir 14 Stück, also 14 Tage
* Danach wollen wir wöchentliche Datensicherungen, dann nur noch monatliche, usw.
* Der Trick ist, dass wir eine tägliche Datensicherung "bewerten"
** Ist sie ein Kandidat für W, M, Q, oder gar Y?
** Die Beantwortung der Frage im Zusammenhang mit dem Alter der Datensicherung gibt Auskunft darüber ob eine Löschung erlaubt ist


* Gibt es z.B. wöchentliche Arbeiten, kann es passieren, dass an einem Freitag auffällt, dass Freitag vor 2 Wochen ein Problem war. Die unversehrte Datei sollte also von einer Sicherung kommen die zwischen 14 und 20 Tagen alt ist.
=== Anspruch-Phasen ===
* Wenn dies als feststehende Forderung aufgestellt ist


Backup(dmin=14,dmax=20)
* In unserem Beispiel haben wir in T bis T-14 den Anspruch eine tägliche Sicherung vorzuhalten
* Von T-2W bis T-16W wollen wir wöchentliche Sicherungen
* Von T-4M bis T-12M wollen wir monatliche Sicherungen
* Von T-4Q bis T-8Q wollen wir quartalssicherung
* Von T-2Y bis T-11Y wollen wir Jahressicherungen
* Ab T-12Y wollen wir keine Sicherungen mehr


* kann man mal die Backup-Geschichte aufrollen
* Für den Algorithmus ist jetzt nur noch wichtig wie lange die Phasen sind
* Und zwar wird das angegeben in der grösse des Abschnittes selbst


  01 A(0)
  T W M  Q  Y
02 B(0) A(1)
  14  3 3  4  10
03 C(0) <span style="background-color:#C00000">B(1)</span> A(2)
04 D(0) <span style="background-color:#C00000">C(1)</span> A(3)
05 E(0) <span style="background-color:#C00000">D(1)</span> A(4)
06 F(0) <span style="background-color:#C00000">E(1)</span> A(5)
07 G(0) <span style="background-color:#C00000">F(1)</span> A(6)
08 H(0) <span style="background-color:#C00000">G(1)</span> A(7)
09 I(0) H(1) A(8)
10 J(0) <span style="background-color:#C00000">I(1)</span> H(2) A(9)
11 K(0) <span style="background-color:#C00000">J(1)</span> H(3) A(10)
12 L(0) <span style="background-color:#C00000">K(1)</span> H(4) A(11)
  13 M(0) <span style="background-color:#C00000">L(1)</span> H(5) A(12)
14 N(0) <span style="background-color:#C00000">M(1)</span> H(6) A(13)
  15 O(0) <span style="background-color:#C00000">N(1)</span> H(7) <span style="background-color:#C0C000">A(14)</span>
16 P(0) O(1)  H(8) <span style="background-color:#C0C000">A(15)</span>
17 Q(0) <span style="background-color:#C00000">P(1)</span> O(2) H(9) <span style="background-color:#C0C000">A(16)</span>
  18 R(0) <span style="background-color:#C00000">Q(1)</span> O(3) H(10) <span style="background-color:#C0C000">A(17)</span>
19 S(0) <span style="background-color:#C00000">R(1)</span> O(4) H(11) <span style="background-color:#C0C000">A(18)</span>
20 T(0) <span style="background-color:#C00000">S(1)</span> O(5) H(12) <span style="background-color:#C0C000">A(19)</span>
21 U(0) <span style="background-color:#C00000">T(1)</span> O(6) H(13) <span style="background-color:#C0C000">A(20)</span>
  22 V(0) <span style="background-color:#C00000">U(1)</span> O(7) <span style="background-color:#C0C000">H(14)</span> <span style="background-color:#C00000">A(21)</span>
  23 W(0) <span style="background-color:#C00000">V(1)</span> O(8) <span style="background-color:#C0C000">H(15)</span>
  24 X(0) W(1) O(9) <span style="background-color:#C0C000">H(16)</span>
25 Y(0) <span style="background-color:#C00000">X(1)</span> W(2) O(10) <span style="background-color:#C0C000">H(17)</span>
26 Z(0) <span style="background-color:#C00000">Y(1)</span> W(3) O(11) <span style="background-color:#C0C000">H(18)</span>
  27 A(0) <span style="background-color:#C00000">Z(1)</span> W(4) O(12) <span style="background-color:#C0C000">H(19)</span>
  28 B(0) <span style="background-color:#C00000">A(1)</span> W(5) O(13) <span style="background-color:#C0C000">H(20)</span>
29 C(0) <span style="background-color:#C00000">B(1)</span> W(6) <span style="background-color:#C0C000">O(14)</span> <span style="background-color:#C00000">H(21)</span>


* Aus diesen Angaben kann die maximale Anzahl der Sicherungen berechnet werden
* Aus diesen Abgaben kann berechnet werden bis wie lange zurück überhaupt Datensicherungen vorgehalten werden


* Bemerkungen
** Eine Phase kann natürlich auch "0" sein, z.B. M oder Q
** Sind jährliche Sicherungen zu weit voneinander entfernt so könnte Q auf 40 eingestellt werden und Y auf 0
** Ist eine zeitliche Beschränkung der Datenhaltung gar nicht gewünscht kann bei der letzten Granularität ein "*" gesetzt werden


* Jeden Tag Wird eine Datensicherung gemacht, sie werden A, B, C genannt
  T  W  M  Q  Y
* Ganz links steht die Nummer des Tages seit der ersten Datensicherung
14 3  3  *
* In Klammer steht immer das Alter der Datensicherung in Tagen
* Grün: Das brauchen wir, das wollen wir haben
* Rot: Kann gelöscht werden
* Tag 01..08: Unsere aller erste Datensicherung muss noch reifen, aktuellere Datensicherung kann gelöscht werden
* Tag 09: Unser Kandidat "A" wird nicht ewig jung bleiben, im Alter von 21 Tagen wird er unnütz werden, wir müssen an einen Nachfolger denken, der an dem Tag der Übernahme optimalerweise 14 Tage alt ist. Nachfolger wird "H" werden
* Tag 10..14 A und H müssen reifen
* Tag 15: "A" erfüllt erstmals unsere Regel
* Tag 22: "A" erfüllt unsere Regel nicht mehr, zum Glück erfüllt "H" die Regel


* Erste Mutmasungen:
* Somit haben wir auf ewig alle Quartalssicherungen erhalten
** Am Tag dmin+1 haben wir die erste Sicherung, die wir brauchen
** Ist (vorerst) endlos Plattenplatz zur Verfügung kann
** Ist dmax-dmin=0 muss jeden Tag ein neuer Nachfolger gehalten, es gibt dann bis zu dmax parrallel zu haltende Datensicherungen
** Ist dmax unendlich muss kein Nachfolger erstellt werden, erreicht ein Kandidat die Reife ist die Regel erfüllt
** In der Spitze brauchen wir dmax / succ(dmax - dmin) Datensicherungen


== eldorado ==
=== Protegé ===


{| style="background-color:transparent;"
* Sicherungen der Phasen X haben Protegé in den Phasen davor, sie spielen erst später eine Rolle in Phase X
|
* Beispiel, die Sicherung in Phase T vom Freitag 01.01. gerät von der T in die W-Phase und würde gelöscht da hier nur Sonntags-Sicherungen überleben
[[Bild:WesternDigitalMyBook.png|120px]]
* Aber Phase "M" macht diese Sicherung zu seinem Protegé
|
* Die Protegé haben manchmal eine Daseinsberechtigung in einer Phase, machmal nicht. Egal sie werden nie gelöscht
Das "eldorado" Projekt verwendet zur automatischen Datensicherung ein "My Book" Worldedition von Western Digital. Das Sicherungsvolumen das anfällt ist 160 Giga-Byte. Es wird die 1 Terrabyte Version des NAS verwendet. Die Kosten betragen 120 Euro (Stand 2010, unglaublich für eine vollständige Linux-Box mit 1 TB).  
* Protegés mogeln sich also durch, bis ihre grosse Stunde schlägt
Ich denke die verwendete Technologie lässt sich auf jedes moderne Linux betriebene NAS übertragen, ein offener ssh Zugang ist jedoch erforderlich. Hilfreich ist natürlich eine hohe Verbreitung eines NAS, so dass die Linux Community gross und leistungsstark genug ist. Das NAS wurde so konfiguriert:


* Es wurde der Systemdienst "cron" nachinstalliert
=== Amnestie ===
* Es wurde der Editor "joe" nachinstalliert
* Es wurde der Mail Client "nail" nachinstalliert


Folgende Ziele wurden erreicht:
* Ein Stern ("*") am Ende der Parameter führt dazu, dass niemals ein Vertreter dieser Phase gelöscht wird
* weitere Parameter (nach einem Stern) haben keine Bedeutung mehr


* Da ich einen Linux-Server als Datei-Server verwende, wird mit "rsync" gesichert
=== Unschärfe-Funktion ===
* Das NAS initiert selbsttätig die Sicherung um 12 Uhr und 20 Uhr
* Die Sicherungs-Zielverzeichnisse wechseln täglich von "1" bis "6" es werden somit 6 Sicherungen vorgehalten
* Am Ende des Sicherungs-Laufes schickt das NAS eine eMail mit einer Übersicht über die Platzverhältnisse der Platte
* Am "White Light" des NAS kann man erkennen was es gerade macht (Sichern oder Schlafen)
* Jederzeit kann im Netz auf die Sicherungsverzeichnisse zugegriffen werden
|}


=== Setup ===
* Man kann nicht davon ausgehen, dass die tägliche Sicherung gelingt oder gültig ist, wir müssen mit Lücken leben
** Ärgerlich ist natürlich der Ausfall einer Sonntags-Sicherung am 01. des Jahres, das schmerzt!! element von (T,W,Q,M,Y)
* Misslungene oder korrupte Sicherungen müssen allerdings konzequent gelöscht werden
** Sie können eine falsche Sicherheit vorgaukeln, die nicht erfüllbar ist
** sie können einen schadhaften Datenzustand darstellen, der niemals wiederherzustellen ist (Beispiel: Ein Software Release hat an d-1 schaden an der Datenbank verursacht, die Datensicherung d liegt schon vor, aus der Datensicherung d-2 konnten alle Lücken wiederhergestellt werden, unbetroffene TAbellen der Datenbank hatten sich bereits weiterentwickelt. d und d-1 sind zu löschen, da sie keinen gewünschten Stand widerspiegeln!!!)
* Es darf nicht so sein, dass der Algorithmus versagt wenn z.B. der direkte M-Kandidat fehlt
** Angenommen die Datensicherung vom 01.04. fehlt, es muss dann die Datensicherung mit dem kürzesten Abstand zum 01.04. als M-Kandiat betrachtet werden (z.B. die vom 29.03.)
** Volltreffer Kandidaten heissen ("T"|"W"|"M"|"Q"|"Y") "0", also die Datensicherung vom 01.04. ist die M0 Datensicherung für März
** Unscharfe Kandidaten heissen {"T"|"W"|"M"|"Q"|"Y"} ("+"|"-") n wobei "n" der Abstand zum M0 ist (in Tagen)
* Ist "älter" besser als "neuer", also T+1 besser als T-1?
** ganz sicher!!


==== ipkg installieren ====
==== Beispiel für "0,0,0,*" ====


Zitate sind aus [http://www.chrisz.de/?p=453]
DATE;PHASE;NUMBER;FILE;DISTANCE
01.10.2020;Q;1;hv_00001018.zip;50 (20.11.2020)
01.07.2020;Q;2;hv_00001013.zip;44 (14.08.2020)
01.04.2020;Q;3;hv_00001012.zip;32 (02.03.2020)
01.01.2020;Q;4;hv_00001012.zip;61 (02.03.2020)
01.10.2019;Q;5;hv_00001011.zip;11 (12.10.2019)
01.07.2019;Q;6;hv_00001009.zip;71 (23.04.2019)
01.04.2019;Q;7;hv_00001009.zip;22 (23.04.2019)
01.01.2019;Q;8;hv_00001009.zip;112 (23.04.2019)
01.10.2018;Q;9;hv_00001008.zip;103 (22.06.2018)
01.07.2018;Q;10;hv_00001008.zip;11 (22.06.2018)
01.04.2018;Q;11;hv_00001006.zip;45 (17.02.2018)
01.01.2018;Q;12;hv_00001004.zip;30 (04.12.2017)
01.10.2017;Q;13;hv_00001001.zip;20 (13.09.2017)
01.07.2017;Q;14;hv_00001001.zip;74 (13.09.2017)


<code>
* Man sieht dass es eigentlich gar keine "Treffer" (DISTANCE=0) gibt, dennoch wäre es falsch Sicherungen zu löschen
feed=http://ipkg.nslu2-linux.org/feeds/optware/cs05q1armel/cross/unstable
* Machmal sind die Lücken so gross dass einzelne Sicherungen mehrfach passen (hv_00001009.zip)
cd /tmp
wget http://ipkg.nslu2-linux.org/feeds/optware/mssii/cross/unstable/ipkg-opt_0.99.163-10_arm.ipk
tar -xOvzf ipkg-opt_0.99.163-10_arm.ipk ./data.tar.gz | tar -C / -xzvf –
mkdir -p /opt/etc/ipkg
echo "src armel http://ipkg.nslu2-linux.org/feeds/optware/cs05q1armel/cross/unstable" > /opt/etc/ipkg/armel-feed.conf
/opt/bin/ipkg update
</code>


=== Anfangsphase ===


==== joe ====
* In der Anfangsphase der Datensicherungen können wir mehr T speichern als eigentlich vorgesehen
* z.B. bei einer Konfiguration von


  /opt/bin/ipkg install joe
  T W M Q Y
  ln -s /opt/bin/joe /bin/joe
  9,3,3,3,*


==== cron ====
* es ist ja mindestens Platz für 9+3+3+3=18 Datensicherungen vorgesehen
* in der Anfangsphase werden dann - da keine Löschungen durchgeführt werden müssen - 18 T Sicherungen behalten (wobei W,M,Q,Y Kandidaten vorhanden sein können, aber es gibt keine Lücken!)


/opt/bin/ipkg install cron
=== Ausblick ===
ln -s /opt/etc/init.d/S10cron /etc/init.d/S10cron


* Bei Datenbanksicherungen sind Phasen der minütlichen Sicherungen denkbar (Phase "S60")
* Es ist eine "T3"- Phase denkbar, also nicht tägliche Sicherungen sondern mit 2 Tagen ohne Sicherung


* Die crontab muss neu angelegt werden (Ist nicht vorhanden)
=== Beispiel ===


joe /opt/etc/crontab
  #
 
  # Vorgabe für die Datensicherung
SHELL=/bin/sh
  #  
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/opt/sbin:/opt/bin
  SicherungenAnzahl=20,3,3,8,10
MAILTO=""
HOME=/
# ---------- ---------- Default is Empty ---------- ---------- #
05 13 * * 0-6 root /root/backup.sh
35 18 * * 0-6 root /root/backup.sh
# ---------- ---------- End              ---------- ---------- #
 
==== nail ====
 
/opt/bin/ipkg install nail
ln -s /opt/bin/nail /bin/nail
 
=== Backup-Skript ===
 
 
echo date >/root/body.txt
   
   
echo 7 >/sys/class/leds/oxnas-wd810-leds\:st/brightness
  #
  # "Perfekte Liste" für den 08.11.2020
#
  # NUMBER=0 bedeutet dass es ein Protegé ist
# Modulo 5 des Datums ergibt Band "0" bis "4"
  #
#
  DATE;PHASE;NUMBER
BAND=$((($(date +%s)/86400)%5))
  08.11.2020;W;0
  08.11.2020;T;1
OPTIONS="-avK --delete --force --ignore-errors --copy-unsafe-links"
  07.11.2020;T;2
BACKUP_PATH="/DataVolume/Public/$BAND/"
  06.11.2020;T;3
  05.11.2020;T;4
echo $BACKUP_PATH
  04.11.2020;T;5
  03.11.2020;T;6
mkdir $BACKUP_PATH
  02.11.2020;T;7
chmod 777 $BACKUP_PATH
  01.11.2020;M;0
touch $BACKUP_PATH
  01.11.2020;W;0
  01.11.2020;T;8
#
  31.10.2020;T;9
# /srv
  30.10.2020;T;10
#
  29.10.2020;T;11
DEST=$BACKUP_PATH./srv
  28.10.2020;T;12
mkdir $DEST
  27.10.2020;T;13
chmod 777 $DEST
  26.10.2020;T;14
rsync $OPTIONS 192.168.115.91::sxx/ $DEST
  25.10.2020;W;0
  25.10.2020;T;15
#
  24.10.2020;T;16
# /etc
  23.10.2020;T;17
#
  22.10.2020;T;18
DEST=$BACKUP_PATH./etc
  21.10.2020;T;19
mkdir $DEST
  20.10.2020;T;20
chmod 777 $DEST
  18.10.2020;W;1
rsync $OPTIONS 192.168.115.91::exx/ $DEST
  11.10.2020;W;2
  04.10.2020;W;3
#
  01.10.2020;Q;0
# /named
  01.10.2020;M;1
#
  01.09.2020;M;2
DEST=$BACKUP_PATH./named
  01.08.2020;M;3
mkdir $DEST
  01.07.2020;Q;1
chmod 777 $DEST
  01.04.2020;Q;2
rsync $OPTIONS 192.168.115.91::nxxxx/ $DEST
  01.01.2020;Y;0
  01.01.2020;Q;3
#
  01.10.2019;Q;4
# /mail
  01.07.2019;Q;5
#
  01.04.2019;Q;6
DEST=$BACKUP_PATH./mail
  01.01.2019;Y;0
mkdir $DEST
  01.01.2019;Q;7
chmod 777 $DEST
  01.10.2018;Q;8
rsync $OPTIONS 192.168.115.91::mxxx/ $DEST
  01.01.2018;Y;1
  01.01.2017;Y;2
echo 1 >/sys/class/leds/oxnas-wd810-leds\:st/brightness
  01.01.2016;Y;3
   01.01.2015;Y;4
df -h >>/root/body.txt
  01.01.2014;Y;5
echo date >>/root/body.txt
  01.01.2013;Y;6
nail -s "Datensicherungsbericht [eldorado]" axdrxas.fixinxer@oxgxmxn.cxm < /root/body.txt
  01.01.2012;Y;7
 
  01.01.2011;Y;8
=== nail Konfiguration nail.rc ===
  01.01.2010;Y;9
 
  01.01.2009;Y;10
 
/opt/etc/nail.rc
 
# This is the configuration file for nail, a mail user agent.
# See nail(1) for further options.
# This file is not overwritten when 'make install' is run in
# the nail build process again.
    
set smtp=raib91.lummerland
set from="ELDORADO" <oxgxtxx@orxmxn.dx>
set smtp-auth=login
set smtp-auth-user=mail-ot1
set smtp-auth-password=9xGxxx8x
# ...  
# usw. Rest der Datei habe ich unberührt gelassen ...
 
=== LED Kontrolle ===
 
* normal: <code>echo 1 >/sys/class/leds/oxnas-wd810-leds\:st/brightness</code>
* backup: <code>echo 7 >/sys/class/leds/oxnas-wd810-leds\:st/brightness</code>
 
 
=== Dienst Deaktivierung ===
 
/etc/init.d # mv S55mini_httpd _S55mini_httpd
/etc/init.d # mv S97twonkyserver _S97twonkyserver
/etc/init.d # mv S9M_mionet _S9M_mionet

Aktuelle Version vom 20. November 2020, 14:09 Uhr

Notfall Plan für die Wiederherstellung
Ausfallserver für den firebird Dienst

Datensicherung - Ein Überblick

Es wird der sehr stabile firebird SQL-Server verwendet. Dennoch sind Kopien der Datenbank und der Arbeitsverzeichnisse notwendig da die Speicherungstechnik jederzeit versagen kann. Der Datenverlust kann begrenzt werden, indem man auf Sicherungskopieen (Datensicherung) zurückgreifen kann.
Die mehrphasige Sicherung hat das Ziel ausgehend von dem letztendlich entstehenden Sicherungs-Zip die komplette OrgaMon-Umgebung neu aufsetzen zu können. Das enthält somit das Anwendungsverzeichnis, in dem OrgaMon läuft, sowie das Backup der aktuellen Datenbank.

Die Datensicherung erfolgt in 3 Phasen:

Phase A: Erstellung eines Datenbank - Backups

Jedem Backuplauf wird zunächst eine fortlaufende BACKUP_TAN zugeordnet. Nun wird der Datenbank-Server veranlasst die gesamte Datenbank in die Datei Sicherung_<BACKUP_TAN>.fbak zu sichern. Diese einzelne Datei enthält die gesamte zu sichernde Datenbank (".fdb"). Dabei kann gesteuert werden in welchem Pfad diese Datei angelegt wird. Dies erfolgt durch den Systemparameter:

#
# Beispiel 1: Linux Server speichert direkt in OrgaMon-Datensicherung
#
DatenbankBackupPfad=/srv/smb/freigabe/OrgaMon/Datensicherung/

#
# Beispiel 2: Windows Server speichert direkt in OrgaMon-Datensicherung
#
DatenbankBackupPfad=C:\Freigabe\OrgaMon\Datensicherung\

#
# best practice "Linux": fbak nach /srv/firebird
#
DatenbankBackupPfad=/srv/firebird/


Optimal ist natürlich, wenn die ".fbak" Datei sofort im .\Datensicherung Unterverzeichnis des OrgaMon landet. Dann kann Phase B übersprungen werden. Dies ist aber nur unter Voraussetzungen möglich auf die hiermit eingegangen wird: Wird das OrgaMon- Anwendungsverzeichnis durch den selben Server zur Verfügung gestellt der auch den Datenbankserver firebird betreibt, kann firebird seine Datensicherung direkt in das .\Datensicherungs - Verzeichnis des OrgaMon Anwendungsverzeichnis ablegen. Dadurch wird zusätzliches umkopieren vermieden. Beachten Sie jedoch dass die Rechte samba/firebird zusammenpassen. Ist diese Angabe leer, so wird in das selbe Verzeichnis gesichert, in dem auch die Datenbank selbst liegt. Dieses Backup wird nun durch einen Restore-Lauf in eine Zwischen- Datenbank zurückgespeichert. War dies erfolgreich, werden alle GENERATOR-Werte der "aktuellen" und der "restoreten" Datenbank verglichen. Ist der Vergleich erfolgreich wird die Zwischen- Datenbank gelöscht, das Backup wird als "GUT" markiert. Dieser Aufwand muss betrieben werden, da ein erfolgtes Backup noch lange nicht bedeutet das es auch wieder in eine funktionierende Datenbank zurückverwandelt werden kann.

  • Lebensdauer dieser fbak - Dateien = 10 Tage)

Phase B: Die Sicherung umlagern und komprimieren

Das Ziel von Datenbank- Sicherungs- Dateien ist das OrgaMon Unterverzeichnis .\Datensicherung. Kann der Datenbank-Server sein Backup nicht direkt in das .\Datensicherung Verzeichnis ablegen muss es dorthin umkopiert werden. Dieses umkopieren muss jedem Client möglich sein. Somit muss jedem Client ein Laufwerksbuchstabe + Verzeichnis zur Verfügung gestellt werden, worin er die von Server erstellen ".fbak" lesen und löschen kann (Berechtigungen beachten). Diesen Zugriffspfad kann man in den Systemparametern angeben unter:

 FreigabePfad=\\<ServerHostNameWoDieDatenbankLiegt>\<FreigabenameFuer_fbaks>\<Pfad>\

Mehrplatz: Nachdem der Server das Backup erstellt hat, will der Client die neue .fbak Datei sehen. Dazu wird der Parameter Freigabe-Pfad als Prefix für die Sicherungsdatei verwendet. Also "mv %FreigabePfad%Sicherung_<TAN>.fbak .\Datensicherung".

  • Lebensdauer dieser Dateien = 3 Tage

Phase C: Gesamtsicherung

  • Hier wird das ganze OrgaMon-Verzeichnis mit allen Unterverzeichnissen (und damit auch den .fbaks der Phase B) in ein ZIP-Archiv gepackt.
  • Aus Geschwindigkeitsgründen wird das Archiv zunächst lokal in .\Dokumente\OrgaMon\ erstellt.
  • Mit einem Systemparameter kann angegeben werden, wohin dieses Gesamtsicherungs-Zip nach Erstellung verschoben werden soll.


SicherungsPfad=<SicherungsPfad>


  • Bleibt diese Angabe leer, so erfolgt die Sicherung in das Stammverzeichnis des OrgaMon Anwendungsverzeichnisses.
  • Es sollte immer ein physikalisch anderes Laufwerk gewählt werden, als das des OrgaMon-Verzeichnisses, damit im Ausfall Moment nicht das Verzeichnis UND die Sicherungszips verloren sind.

400

// die400 
 
 // erstellt eine Dateiliste von gewissen Dateien
// die mit hinreichender Wahrscheinlichkeit nicht mehr benötigt werden
// es sind diverse Dateien aus unterschiedlichen Quellen
// die 400er-Zips sollten dauerhaft gespeichert werden

Haltbarkeit von Datensicherungen

  • Täglich entsteht ja die Gesamt-Sicherung, im Laufe der Jahre kann dies ein Datenvolumen von mehreren TB ergeben
  • Es ist eigentlich auch nicht nötig von jedem Tag der Vergangenheit eine Sicherung zu haben
    • Also wir würden jetzt den Stand vom 22.03.2017 benötigen, dann ist oft der 01.03.2017 oder der 01.04.2017 auch aussagekräftig genug
  • Je weiter der Tag entfernt ist, um so grösser dürfen "Lücken" in der Datenhaltung sein

Hohe Ansprüche aufweichen

von TÄGLICH" zu WÖCHENTLICH zu MONATLICH zu QUARTAL zu JÄHRLICH 
  • Das Prinzip ist dass wir einen Bereich definieren in dem wir täglich Datensicherungen haben wollen, sagen wir 14 Stück, also 14 Tage
  • Danach wollen wir wöchentliche Datensicherungen, dann nur noch monatliche, usw.
  • Der Trick ist, dass wir eine tägliche Datensicherung "bewerten"
    • Ist sie ein Kandidat für W, M, Q, oder gar Y?
    • Die Beantwortung der Frage im Zusammenhang mit dem Alter der Datensicherung gibt Auskunft darüber ob eine Löschung erlaubt ist

Anspruch-Phasen

  • In unserem Beispiel haben wir in T bis T-14 den Anspruch eine tägliche Sicherung vorzuhalten
  • Von T-2W bis T-16W wollen wir wöchentliche Sicherungen
  • Von T-4M bis T-12M wollen wir monatliche Sicherungen
  • Von T-4Q bis T-8Q wollen wir quartalssicherung
  • Von T-2Y bis T-11Y wollen wir Jahressicherungen
  • Ab T-12Y wollen wir keine Sicherungen mehr
  • Für den Algorithmus ist jetzt nur noch wichtig wie lange die Phasen sind
  • Und zwar wird das angegeben in der grösse des Abschnittes selbst
 T  W  M  Q  Y
14  3  3  4  10
  • Aus diesen Angaben kann die maximale Anzahl der Sicherungen berechnet werden
  • Aus diesen Abgaben kann berechnet werden bis wie lange zurück überhaupt Datensicherungen vorgehalten werden
  • Bemerkungen
    • Eine Phase kann natürlich auch "0" sein, z.B. M oder Q
    • Sind jährliche Sicherungen zu weit voneinander entfernt so könnte Q auf 40 eingestellt werden und Y auf 0
    • Ist eine zeitliche Beschränkung der Datenhaltung gar nicht gewünscht kann bei der letzten Granularität ein "*" gesetzt werden
 T  W  M  Q  Y
14  3  3  *
  • Somit haben wir auf ewig alle Quartalssicherungen erhalten
    • Ist (vorerst) endlos Plattenplatz zur Verfügung kann

Protegé

  • Sicherungen der Phasen X haben Protegé in den Phasen davor, sie spielen erst später eine Rolle in Phase X
  • Beispiel, die Sicherung in Phase T vom Freitag 01.01. gerät von der T in die W-Phase und würde gelöscht da hier nur Sonntags-Sicherungen überleben
  • Aber Phase "M" macht diese Sicherung zu seinem Protegé
  • Die Protegé haben manchmal eine Daseinsberechtigung in einer Phase, machmal nicht. Egal sie werden nie gelöscht
  • Protegés mogeln sich also durch, bis ihre grosse Stunde schlägt

Amnestie

  • Ein Stern ("*") am Ende der Parameter führt dazu, dass niemals ein Vertreter dieser Phase gelöscht wird
  • weitere Parameter (nach einem Stern) haben keine Bedeutung mehr

Unschärfe-Funktion

  • Man kann nicht davon ausgehen, dass die tägliche Sicherung gelingt oder gültig ist, wir müssen mit Lücken leben
    • Ärgerlich ist natürlich der Ausfall einer Sonntags-Sicherung am 01. des Jahres, das schmerzt!! element von (T,W,Q,M,Y)
  • Misslungene oder korrupte Sicherungen müssen allerdings konzequent gelöscht werden
    • Sie können eine falsche Sicherheit vorgaukeln, die nicht erfüllbar ist
    • sie können einen schadhaften Datenzustand darstellen, der niemals wiederherzustellen ist (Beispiel: Ein Software Release hat an d-1 schaden an der Datenbank verursacht, die Datensicherung d liegt schon vor, aus der Datensicherung d-2 konnten alle Lücken wiederhergestellt werden, unbetroffene TAbellen der Datenbank hatten sich bereits weiterentwickelt. d und d-1 sind zu löschen, da sie keinen gewünschten Stand widerspiegeln!!!)
  • Es darf nicht so sein, dass der Algorithmus versagt wenn z.B. der direkte M-Kandidat fehlt
    • Angenommen die Datensicherung vom 01.04. fehlt, es muss dann die Datensicherung mit dem kürzesten Abstand zum 01.04. als M-Kandiat betrachtet werden (z.B. die vom 29.03.)
    • Volltreffer Kandidaten heissen ("T"|"W"|"M"|"Q"|"Y") "0", also die Datensicherung vom 01.04. ist die M0 Datensicherung für März
    • Unscharfe Kandidaten heissen {"T"|"W"|"M"|"Q"|"Y"} ("+"|"-") n wobei "n" der Abstand zum M0 ist (in Tagen)
  • Ist "älter" besser als "neuer", also T+1 besser als T-1?
    • ganz sicher!!

Beispiel für "0,0,0,*"

DATE;PHASE;NUMBER;FILE;DISTANCE
01.10.2020;Q;1;hv_00001018.zip;50 (20.11.2020)
01.07.2020;Q;2;hv_00001013.zip;44 (14.08.2020)
01.04.2020;Q;3;hv_00001012.zip;32 (02.03.2020)
01.01.2020;Q;4;hv_00001012.zip;61 (02.03.2020)
01.10.2019;Q;5;hv_00001011.zip;11 (12.10.2019)
01.07.2019;Q;6;hv_00001009.zip;71 (23.04.2019)
01.04.2019;Q;7;hv_00001009.zip;22 (23.04.2019)
01.01.2019;Q;8;hv_00001009.zip;112 (23.04.2019)
01.10.2018;Q;9;hv_00001008.zip;103 (22.06.2018)
01.07.2018;Q;10;hv_00001008.zip;11 (22.06.2018)
01.04.2018;Q;11;hv_00001006.zip;45 (17.02.2018)
01.01.2018;Q;12;hv_00001004.zip;30 (04.12.2017)
01.10.2017;Q;13;hv_00001001.zip;20 (13.09.2017)
01.07.2017;Q;14;hv_00001001.zip;74 (13.09.2017)
  • Man sieht dass es eigentlich gar keine "Treffer" (DISTANCE=0) gibt, dennoch wäre es falsch Sicherungen zu löschen
  • Machmal sind die Lücken so gross dass einzelne Sicherungen mehrfach passen (hv_00001009.zip)

Anfangsphase

  • In der Anfangsphase der Datensicherungen können wir mehr T speichern als eigentlich vorgesehen
  • z.B. bei einer Konfiguration von
T W M Q Y
9,3,3,3,*
  • es ist ja mindestens Platz für 9+3+3+3=18 Datensicherungen vorgesehen
  • in der Anfangsphase werden dann - da keine Löschungen durchgeführt werden müssen - 18 T Sicherungen behalten (wobei W,M,Q,Y Kandidaten vorhanden sein können, aber es gibt keine Lücken!)

Ausblick

  • Bei Datenbanksicherungen sind Phasen der minütlichen Sicherungen denkbar (Phase "S60")
  • Es ist eine "T3"- Phase denkbar, also nicht tägliche Sicherungen sondern mit 2 Tagen ohne Sicherung

Beispiel

 #
 # Vorgabe für die Datensicherung
 # 
 SicherungenAnzahl=20,3,3,8,10

 #
 # "Perfekte Liste" für den 08.11.2020
 # NUMBER=0 bedeutet dass es ein Protegé ist
 #
 DATE;PHASE;NUMBER
 08.11.2020;W;0
 08.11.2020;T;1
 07.11.2020;T;2
 06.11.2020;T;3
 05.11.2020;T;4
 04.11.2020;T;5
 03.11.2020;T;6
 02.11.2020;T;7
 01.11.2020;M;0
 01.11.2020;W;0
 01.11.2020;T;8
 31.10.2020;T;9
 30.10.2020;T;10
 29.10.2020;T;11
 28.10.2020;T;12
 27.10.2020;T;13
 26.10.2020;T;14
 25.10.2020;W;0
 25.10.2020;T;15
 24.10.2020;T;16
 23.10.2020;T;17
 22.10.2020;T;18
 21.10.2020;T;19
 20.10.2020;T;20
 18.10.2020;W;1
 11.10.2020;W;2
 04.10.2020;W;3
 01.10.2020;Q;0
 01.10.2020;M;1
 01.09.2020;M;2
 01.08.2020;M;3
 01.07.2020;Q;1
 01.04.2020;Q;2
 01.01.2020;Y;0
 01.01.2020;Q;3
 01.10.2019;Q;4
 01.07.2019;Q;5
 01.04.2019;Q;6
 01.01.2019;Y;0
 01.01.2019;Q;7
 01.10.2018;Q;8
 01.01.2018;Y;1
 01.01.2017;Y;2
 01.01.2016;Y;3
 01.01.2015;Y;4
 01.01.2014;Y;5
 01.01.2013;Y;6
 01.01.2012;Y;7
 01.01.2011;Y;8
 01.01.2010;Y;9
 01.01.2009;Y;10