Bvckup 2: Versionierung mittels mklink, net use oder mehrere Jobs

Bvckup 2 bringt von sich aus leider keine Möglichkeit mit, mehrere Versionen einer Datensicherung vorzuhalten.

Eine recht einfache Variante kann darin bestehen, mehrere Jobs anzulegen, die zu jeweils anderen Zielen verweisen. So auf die Art „Backup to“:

\Ziel\v1\
\Ziel\v2\
..

Statt Versionsnummern können z.B. Tage, Wochen, Monate, etc. verwendet werden. Es geht aber auch anders, wie die nachfolgenden Zeilen zeigen.

Jede Variante hat ihre Vor- und Nachteile: Bei „mklink“ und „net use“ ist leider kein delta copying möglich, da das Ziel jedes Mal neu gescannt werden muss. Das bedeutet, das geänderte Dateien als Ganzes kopiert werden und nicht nur die Änderungen innerhalb der betreffenden Dateien. Dies dauert in der Regel länger und kann bei langsamen Netzwerkverbindungen zum Problem werden. Abhilfe schafft da die Verwendung von mehreren Backup-Jobs mit jeweils eigenem Ziel, dazu am Ende mehr, aber zunächst der Reihe nach.

Die nachfolgenden Skripte liegen unter „C:\Backup“ und müssen den eigenen Bedürfnissen angepasst werden. Ferner muss bei der Verwendung von „mklink“ und „net use“ im Backup-Job unter „detecting changes“ „Re-scan destination on every run“ aktiviert sein:

Die Skripte werden dann im jeweiligen Job unter „More options – External commands & alerts“ eingebunden:

mklink (Verknüpfung)

Möchte man nur einen Job verwenden, so kann über ein „Pre-backup“-Skript das Ziel sozusagen umgebogen werden. Der Trick besteht darin, einen Link (aka Verknüpfung oder symbolische/n Verknüpfung/Link) zu verwenden. Verschiedene Beispiele finden sich im Bvckup 2 Support Forum:

Dynamically adjusting backup destination

Das Ziel muss dabei nicht zwangsläuffig lokal sein, der Link kann auch auf ein Ziel im Netzwerk, z.B. ein NAS, verweisen. Dann sollte allerdings der UNC-Pfad verwendet und die Anmeldung sichergestellt werden:

rem Anmeldung gegebenueber dem Ziel im Netzwerk

 net use \\<IP oder Hostname>\<Freigabe> <Kennwort> /user:<Benutzername> /persistent:no

rem Verknuepfung erstellen

 mklink C:\Backup\Current \\<IP oder Hostname>\<Freigabe>\<Version

Als „Post-backup“-Skript kann die Verknüpfung entfernt und die Anmeldung wieder aufgehoben werden:

rem Verknuepfung entfernen

 del C:\Backup\Current

rem Anmeldung aufheben

 net use \\<IP oder Hostname>\<Freigabe> /d

Idealerweise ist das Backup-Ziel nur während der Datensicherung erreichbar, um außerhalb des Sicherungszeitfensters nicht anfällig für z.B. CryptoTrojaner (aka Erpressungs- oder Verschlüsselungstrojaner) zu sein, daher die An-/Abmeldung.

Anbei ein Beispiel Pre- und Post-backup-Skript mit Versionsnummern:

Pre-backup.cmd:

@echo off

rem Ins Arbeitsverzeichnis wechseln

 cd C:\Backup

rem Konfiguration

 set Destination=\\<IP oder Hostname>\<Freigabe>
 set DestinationUser=<Benutzername>
 set DestinationPassword=<Kennwort>

 set NumberOfVersionsToKeep=3

rem Gegenueber dem Server oder NAS anmelden

 net use "%Destination%" "%DestinationPassword%" /user:"%DestinationUser%" /persistent:no

rem Version.txt erstellen, falls diese nicht existiert

 if not exist Version.txt echo %NumberOfversionsToKeep% > Version.txt

rem Aktuelle Version einlesen, hochzaehlen und in "Version.txt" schreiben

 set /p Version=< Version.txt set /A Version=Version %% NumberOfVersionsToKeep + 1 echo %Version% > Version.txt

rem Ziel-Verzeichnis erstellen, falls es nicht existiert

 if not exist "%Destination%\%Version%" mkdir "%Destination%\%Version%"

rem Symbolische Verknuepfung vom lokalen System zum Server oder NAS erstellen

 mklink /d "C:\Backup\Current" "%Destination%\%Version%"
Post-backup.cmd:

@echo off

rem Symbolische Verknuepfung entfernen

 rmdir C:\Backup\Current /q

rem Anmeldung gegenueber dem Server oder NAS entfernen

 net use "%Destination%" /d

net use (Netzlaufwerk)

Mittels „net use“ kann man nicht nur einfach zu einer Freigabe, sondern auch direkt zu einem Ordner innerhalb einer Freigabe ein Netzlaufwerk einrichten. Diesen Umstand kann man nutzen, mehrere Versionen zu sichern. Das dazugehörige „Pre-backup“-Skript ist dabei dem von „mklink“ sehr ähnlich:

Pre-backup.cmd:

@echo off

rem Ins Arbeitsverzeichnis wechseln

 cd C:\Backup

rem Konfiguration

 set Destination=\\<IP oder Hostname>\<Freigabe>
 set DestinationUser=<Benutzername>
 set DestinationPassword=<Kennwort>

 set NumberOfVersionsToKeep=3

rem Version.txt erstellen, falls diese nicht existiert

 if not exist Version.txt echo %NumberOfversionsToKeep% > Version.txt

rem Aktuelle Version einlesen, hochzaehlen und in "Version.txt" schreiben

 set /p Version=< Version.txt set /A Version=Version %% NumberOfVersionsToKeep + 1 echo %Version% > Version.txt

rem Ziel-Verzeichnis erstellen, falls es nicht existiert

 if not exist "%Destination%\%Version%" mkdir "%Destination%\%Version%"

rem Netzlaufwerk verbinden

 net use V: "%Destination%\%Version%" "%DestinationPassword%" /user:"%DestinationUser%" /persistent:no
Post-backup.cmd:

@echo off

rem Netzlaufwerk trennen

 net use V: /d

Mehrere Jobs mit Versionierung, automatischer Steuerung und delta copying

Damit man dennoch den Vorteil des delta copying nutzen kann, muss man zwangsläuffig mit mehreren Jobs und einem Skript arbeiten. Ausführen (lassen) muss man dabei nur einen Job, der die Anderen wiederum steuert. Das klingt nun komplizierter als es eigentlich ist. Lediglich die Ersteinrichtung und Erstbefüllung der Ziele benötigt mehr Zeit, danach geht es fix.

Folgende Ordnerstruktur wird benötigt:

C:\Backup
C:\Backup\VersionJobDst
C:\Backup\VersionJobSrc

Die Ordner „VersionJobDst“ und „VersionJobSrv“ dienen nur als Fake-Quelle und -Ziel für den Steuerungs-Job, da jeder Job zwingend „Backup from“ und „Backup to“ benötigt.

Als nächstes wird das „Pre-backup“-Skript benötigt, das die Versionierung und Job-Steuerung übernimmt:

ExternalVersion.cmd:

@echo off

rem Ins Arbeitsverzeichnis wechseln

 cd C:\Backup

rem Konfiguration

 set NumberOfVersionsToKeep=3

rem "Version.txt" erstellen, falls diese nicht existiert

 if not exist Version.txt echo %NumberOfversionsToKeep% > Version.txt

rem Aktuelle Version einlesen, hochzaehlen und in "Version.txt" schreiben

 set /p Version=< Version.txt set /A Version=Version %% NumberOfVersionsToKeep + 1 echo %Version% > Version.txt

rem Bvckup 2-Job der entsprechenden Version aktivieren und starten
rem WICHTIG: Zuvor unter "Options - Preferences - Backup Scheduling" "Enable concurrent backups" aktivieren!

 "C:\Program Files\Bvckup 2\bvckup2.exe" --command enable "%Version%"
 "C:\Program Files\Bvckup 2\bvckup2.exe" --command start "%Version%"

rem Den Status von Bvckup 2 in Schleife pruefen, ist der Job im Leerlauf, diesen (wieder) deaktivieren

 rem Schleife, um den Status zu pruefen
 rem Wenn der Status "idle" (entspricht Rueckgabewert "102") ist, dann die Schleife verlassen
  :loop
  timeout /t 1
  cmd /c "C:\Program Files\Bvckup 2\bvckup2.exe" --command status %Version%
  if not %errorlevel%==102 goto loop

 rem Backup-Job deaktivieren

  "C:\Program Files\Bvckup 2\bvckup2.exe" --command disable %Version%

Wie in den Kommentaren des Skripts zu lesen ist, ist es relevant, gleichzeitige Backups zuzulassen, da sonst immer nur ein Job laufen kann:

Unter "Options - Preferences - Backup Scheduling" "Enable concurrent backups" aktivieren.

Für diese Variante müssen allerdings zwei Jobs gleichzeitig laufen können (1x Steuerungs-Job, 1x der eigentliche Backup-Job). Damit man nicht mal aus versehen einen „Versions-Job“ startet, werden Diese nach ihrer Ausführung deaktiviert. Der jeweilige Job wird automatisch zur Sicherung hin aktiviert und ausgeführt.

Nun erstellt man den „Steuerungs-Job“, gibt als Quelle und Ziel die zuvor erstellten Ordner an und definiert das obige Skript als „Pre-backup-command“. Dieser Job kann z.B. über den integrierten Zeitplanungsdienst zu bestimmten Zeiten ausgeführt werden.

Als nächtes legt man den ersten „Versions-Job“ an. In diesem Beispiel wird als Name (Description) schlicht die jeweilige Versionsnummer verwendet. Die restlichen Einstellungen können je nach Anspruch auf den Vorgaben belassen werden:

Damit man nicht jeden einzelnen „Versions-Job“ händisch anlegen muss, reicht es aus, zunächst Einen sozusagen als Vorlage zu konfigurieren und Diesen dann zu Klonen („Rechtsklick – Clone…“). Dann nur noch die „Description“ und bei „Backup to“ ganz hinten die Versionsnummer ändern und fertig bzw. weiter zum nächsten Job.

Zu Überlegen ist, ob man gelöschte Elemente noch eine zeitlang aufbewahren möchte oder ob diese gleich gelöscht werden sollen. Per Vorgabe werden Diese zwei Wochen lang archiviert. Da man allerdings hier mehrere Versionen verwendet, könnte man auf diese Archivierung verzichten.

Am Ende sieht es in Bvckup 2 in etwa so aus:

Wie man im vorletzten Screenshot sehen kann, wird in diesem Beispiel auf eine FRITZ!BOX gesichert. Da Diese bis jetzt (gemeint ist pre FRITZ!OS 7.x) NTFS eher recht schlecht unterstützt, WLAN als weiterer Flaschenhals ebenfalls dazukommen kann und generell die NAS-Performance dieses Routers gemächlich ist, kann dank Bvckup 2 und dessen delta copying recht schnell die Nutzdaten gesichert werden. Für die Erstbefüllung oder Erstbestückung der Backup-Ziele sollte allerdings je nach Datenmenge entsprechend Zeit und nach Möglichkeit auf eine verkabelte Netzwerkverbindung zurückgegriffen werden.

Troubleshooting:

Beim Test stolperte man über folgendes Problem:

Bvckup 2: Destination file timestamps have changed since the last run

Abhilfe schafft bislang nur der dort genannte „Plan B“.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.