Samstag, 11. August 2012

Windows Backup: quick 'n' dirty - perfect!

Man kann eine Menge Geld für Backupsoftware ausgeben und schnell den Eindruck gewinnen, die großen Anbieter lassen sich mit vollmundigen Versprechungen und geschickt geschürter Angst vor Datenverlust ihre Produkte vergolden. Häufig kostet jedes Feature und jeder Server/Client zusätzlich.
Inzwischen bedient Microsoft eine einstige Domäne der Drittanbieter selbst - die Volume Shadow Copy Services (VSS). Wer sich mal einen Server bei dem Versuch "zerstört" hat, einen eigentlich untersützten VFS-Treiber eines Anbieters zu installieren, der kann sicher meine Freude über diese Entwicklung verstehen.
Konsequenter Weise setzt Microsoft VSS nicht nur auf Filesystem Ebene ein, sondern integriert die Funktionen auch in "höhere" Ebenen seiner Software, so z.B. MS SQL-Server, MS Exchange und sogar in Hyper-V.

Nochmal zur Klarstellung; die teure Backupsoftware mag in vielen Fällen ihre Daseinsberechtigung haben, soll ein ausgeklügeltes RoboCopy oder RSync zukünftig auch gesperrte Daten sichern, so kann man allerdings getrost weiterhin das Geld sparen.

Wir haben ein paar MS SQL-Server Datenbanken, die der integrierte Job Scheduler täglich per Full-Backup sichert und stündlich die Transaktionslogs. Auf diese Weise entsteht ein inkrementelles Backup, welches bisher ein RoboCopy nächtlich auf das Backup Gerät kopiert hat.
Nun sind noch ein paar ERP Daten auf dem Server dazugekommen, die gelegentlich nicht gesichert werden konnten (z.B. wenn ein Benutzer "vergessen" hat, sich zum Feierabend auszuloggen).

Also habe ich nach Möglichkeiten gesucht, diese Dateien per Shadow Copy zu kopieren.

Das vshadow.exe aus dem Microsoft Windows SDK for Win7 (ich habe mir den 2,5GB Download gespart und die Datei irgendwo aus dem Internet geladen) führte zunächst ans Ziel. Allerdings ist das Tool extrem kryptisch.
Der Aufruf von vshadow erzeugt neben der eigentlichen Shadow Copy eine Parameter Datei, die diverse Umgebungsvariablen setzt. Diese Parameter müssen von dem auszuführenden (per -exec angegebenen) Backup-Script eingelesen werden, bevor es an das eigentliche Backup per RoboCopy gehen kann.

Wer bis hierher gelesen hat - es geht auch viel einfacher ;)

Das Sourceforge Projekt Volume Shadow Copy Simple Client ermöglicht ein sehr viel einfacheres Handling des VSS Backups:
  1. Der folgende Aufruf legt eine Shadow Copy des Laufwerks D: an und ruft das eigentliche Backup Script auf
    c:\backup\vscsc.exe -exec="c:\backup\vss-backup.cmd" D:
    
  2. Das Backup Script "vss-backup.cmd" bekommt den Pfad der Shattenkopie als Parameter %1 übermittelt. Da sich mit RoboCopy nicht mit dem Pfad "\\?\..." arbeiten lässt, mountet DOSDev den Pfad einfach auf einen Laufwerksbuchstaben (B:).
    c:\backup\dosdev B: %1
    robocopy B:\Programme \\backupserver\Programme *.* /E /PURGE /R:0 
    c:\backup\dosdev -r -d B:
    
  3. RoboCopy tut sein Werk und DOSDev unmounted den Laufwerksbuchstaben. Damit ist das Script beendet und VSCSC "räumt" die Schattenkopie wieder auf und beendet sich ebenfalls
Den Aufruf von VSCSC kann man noch in ein weiteres Script (backup.cmd) packen oder auch direkt im Aufgabenplaner aufrufen. Ich musste den Task "mit höchsten Privilegien" ausführen, damit das Backup auch durchlief.