Nach TimeBackup habe ich UltimateBackup versucht... dann aber wieder verworfen und nur die UB-scripte als Vorlage für eigene scripte genommen.... und das hier gemacht:
Mein Setup:
SharesXY liegen auf Volume1 (wegen Defrag-Thema aber evtl besser auf einem anderen Volume als die Historie-Shares, aber die Beispiele unten sind auf Volume1 ausgelegt)
Alte TimeBackup-Backups liegen auf Volume2
SharesXY_Historie-Ordner liegt auf Volume1 (er soll eine Kopie-Ordner von ShareXY und einen Ordner mit Versionen (die aber nur Hardlinks sind!) ethalten)
Dass manche Ordnerangaben in den Beispielen einen abschließenden / haben, ist entscheidend fürs Gelingen!
Die - am Anfang einer Zeile sollen den Text strukturieren und gehören nicht zum evtl. folgenden Befehl.
1) Jeder ShareXY wird einmal die Woche mit einem Snapshot versehen (das werden dann meine späteren "Versionen")
2) Es wind zunächst pro ShareXY ein "Sicherungsordner" auf der gleichen NAS erstellt
3) Danach werden die "Sicherungsordner" per Snapshot-Replication auf ein 2tes NAS gesichert.
zu 2)
Jeder ShareXY hat ein eigenes script, das (soweit nicht bereits in einem frühren Durchlauf geschehen)
- alte TimeBackup-Backups und dann
- jeden Snapshot bearbeitet
(das script wird einmal die Woche per Aufgabe in DSM ausgeführt, am besten alle scripts in einer Aufgabe, da diese dann nacheinander ausgeführt werden)
(ob das Aufteilen auf verschieden Aufgaben die gleichzeitig gestartet werden einen Laufzeitgewinn bringen würde ist noch zu testen, würde aber sicherlich die Platten an die Grenzen bringen)
Das Script ShareXY.sh macht folgendes:
- Liste1 von vorhandenen TimeBackup-Backups erstellen (nur wenn TimeBackup-Backups vorhanden)
- Liste2 von vorhandenen Snapshots erstellen
(Im Folgenden werden die Listen in zwei Abschnitten verarbeitet, weil die Navigation über die TimeBackup-Backups und über die Snapshots sich im Dateil etwas unterscheidet; speziell was die Bestimmung der Einzelteile für die Zusammenstellung der Namen für die Zielordner betrifft)
- Liste1 abarbeiten, also pro Eintrag in der Liste1 (nur wenn TimeBackup-Backups vorhanden):
-- Überprüfen ob die obersten Zielordner vorhanden ist (so als Art Versicherung, dass in den richtigen Ordner geschrieben wird)
--- test ! -d /volume1/ShareXY_Historie/HauptversionM
--- test ! -d /volume1/ShareXY_Historie/VersionenM
-- Rechte setzen:
--- chmod a+rx /volume1/ShareXY_Historie/HauptversionM
--- chmod a+rx /volume1/ShareXY_Historie/VersionenM
-- falls Zielordner nicht vorhanden (also noch nicht gesichert)
--- Zielordner anlegen:
---- mkdir -p /volume1/ShareXY_Historie/VersionenM/ShareXY_20171104-090400
--- rsync ausführen:
---- rsync -ah /volume2/usb_share2_TimeBackup2_42_copy/AltesTimeBackupCopy/volumeUSB2/usbshare/TimeBackup/MEINENAS_999999995CAF/task_4/20171104-0904/ShareXY/ --stats --delete-excluded --exclude=@eaDir/*** --exclude=#snapshot/*** --exclude=.DS_Store/*** --delete --backup --backup-dir=../z_RsyncChangedOrDeletedFiles_20171104-090400 /volume1/ShareXY_Historie/HauptversionM/ShareXY
--- irgendwie gehen beim rsync Rechte verloren, deshalb Minimalzugriff sichern:
---- chmod a=r /volume1/ShareXY_Historie/HauptversionM/ShareXY
(Durch das rsync werden die veränderten oder mittlerweile gelöschten Dateien in das --backup-dir "verschoben", also auch gesichert)
(Der Ordner HauptversionM enthält jetzt den Aktuellen Stand der Dateien der Quelle, und die --backup-dir)
(Da Snapshots in bestimmten Szenarien gelöscht werden, wird mit cp eine Historie auf Dateibasis erstellt, nur per Links was kaum Platz braucht):
--- cp -al /volume1/ShareXY_Historie/HauptversionM/ShareXY /volume1/ShareXY_Historie/VersionenM/ShareXY_20171104-090400
--- irgendwie gehen beim cp Rechte verloren, deshalb Minimalzugriff sichern:
---- chmod -R a+r,a-w /volume1/ShareXY_Historie/VersionenM/ShareXY_20171104-090400
--- jetzt noch einen "echten" Vergleich machen (diesen Schritt kann man ja auf den letzten verarbeiteten Eintrag aus der Liste1 beschränken, weil ein diff schon recht zeitaufwändig ist)
---- diff -r --exclude=@eaDir --exclude=@eaDir/*** --exclude=#snapshot --exclude=#snapshot/*** --exclude=.DS_Store/*** /volume2/usb_share2_TimeBackup2_42_copy/AltesTimeBackupCopy/volumeUSB2/usbshare/TimeBackup/MEINENAS_999999995CAF/task_4/20171104-0904/ShareXY/ /volume1/ShareXY_Historie/VersionenM/ShareXY_20171104-090400
-- Zielordner fertig
- Liste1 ist fertig
(Wenn das script einmal ausgeführt wurde, enthält die Liste1 ja kein weiteres auszuführends TimeBackup-Backup (da es ja vermutlich keine neuen TimeBackup-Backups mehr gibt, die nicht im ersten Durchlauf bearbeitet wurden ;o))
- Liste2 abarbeiten, also pro Eintrag in der Liste2:
-- Überprüfen ob die obersten Zielordner vorhanden ist (so als Art Versicherung, dass in den richtigen Ordner geschrieben wird)
--- test ! -d /volume1/ShareXY_Historie/HauptversionM
--- test ! -d /volume1/ShareXY_Historie/VersionenM
-- Rechte setzen:
--- chmod a+rx /volume1/ShareXY_Historie/HauptversionM
--- chmod a+rx /volume1/ShareXY_Historie/VersionenM
-- falls Zielordner nicht vorhanden (also noch nicht gesichert)
--- Zielordner anlegen:
---- mkdir -p /volume1/ShareXY_Historie/VersionenM/ShareXY_20190209-093333
--- rsync ausführen:
---- rsync -ah /volume1/@sharesnap/ShareXY/GMT-2019.02.09-09.33.33/ --stats --delete-excluded --exclude=@eaDir/*** --exclude=#snapshot/*** --exclude=.DS_Store/*** --delete --backup --backup-dir=../z_RsyncChangedOrDeletedFiles_20190209-093333 /volume1/ShareXY_Historie/HauptversionM/ShareXY
--- irgendwie gehen beim rsync Rechte verloren, deshalb Minimalzugriff sichern:
---- chmod a=r /volume1/ShareXY_Historie/HauptversionM/ShareXY
(Durch das rsync werden die veränderten oder mittlerweile gelöschten Dateien in das --backup-dir "verschoben", also auch gesichert)
(Der Ordner HauptversionM enthält jetzt den Aktuellen Stand der Dateien der Quelle, und die --backup-dir)
(Da Snapshots in bestimmten Szenarien gelöscht werden, wird mit cp eine Historie auf Dateibasis erstellt, nur per Links was kaum Platz braucht):
--- cp -al /volume1/ShareXY_Historie/HauptversionM/ShareXY /volume1/ShareXY_Historie/VersionenM/ShareXY_20190209-093333
--- irgendwie gehen beim cp Rechte verloren, deshalb Minimalzugriff sichern:
---- chmod -R a+r,a-w /volume1/ShareXY_Historie/VersionenM/ShareXY_20190209-093333
--- jetzt noch einen "echten" Vergleich machen (diesen Schritt kann man ja auf den letzten verarbeiteten Eintrag aus der Liste1 beschränken, weil ein diff schon recht zeitaufwändig ist)
---- diff -r --exclude=@eaDir --exclude=@eaDir/*** --exclude=#snapshot --exclude=#snapshot/*** --exclude=.DS_Store/*** /volume1/@sharesnap/ShareXY/GMT-2019.02.09-09.33.33/ /volume1/ShareXY_Historie/VersionenM/ShareXY_20190209-093333
-- Zielordner fertig
- Liste2 ist fertig
Script ShareXY.sh fertig
(Wenn das script nach jeden Snapshot ausgeführt wird, enthält die Liste2 ja nur einen auszuführenden Snapshot ;o))
zu 3)
Bis jetzt liegt ja noch alles auf der Produktiv-NAS.
Deshalb werden jetzt noch die "Sicherungsordner" per Snapshot-Replication auf ein 2tes NAS gesichert.
Das 2te NAS steht natürlich nicht direkt neben dem Produktiv-NAS und ist nur für die Replication erforderliche Zeit eingeschaltet.
Um nicht beim einfachsten Platteneausfall ein Backup bemühen zu müssen, sind meine Volumes BtrFS-RAID1 mit mindestens 2 Platten.
Um beim Vergrößern eines Volumes mit größeren Platten, wo ja zunächst eine Platte entfernt werden muss, einen weiteren Plattenausfall zu verkraften, sind mindestens 3 Platten im RAID1 hilfreich!