Thomas Kramer

IT-COW | All posts tagged 'robocopy'

rsyncBackup unter Vista64

By Administrator at April 26, 2010 18:11
Filed Under: Administration, VBScript, Workarounds

In der c't 09/06 gab es ein nützliches VBS-Skript, um inkrementelle Backups mit Hardlinks zu erstellen. Dabei werden mit jeder neuen Sicherung Dateien nicht nochmal angelegt, wenn sie bereits in einer früheren Sicherung vorhanden sind - sondern es wird eine Verknüpfung hergestellt. Im Windows-Explorer sieht man dann keinen Unterschied, sondern es sieht so aus als ob die Datei direkt kopiert worden wäre. Das Verfahren spart viel Speicherplatz, funktioniert aber nur mit NTFS-formatierten Partitionen, weil nur dort Hardlinks unterstützt werden - zumindest im Vergleich zu dem älteren FAT-Dateisystem. Windows Home Server geht bei seinen Sicherungen übrigens ähnlich vor.

 

Das Skript kann man nun hier herunterladen. In der rsyncbackup.vbs-Datei legt man anschließend folgende Parameter fest, das Skript wird also ohne externe Parameter aufgerufen:

 

  • sourceFolders: zu sichernde Ordner, durch Komma separiert
  • const DESTINATION: Zielverzeichnis
  • logFile: Speicherort der Log-Datei
  • excludeFiles: vom Backup auszuschließende Dateien

 

Wie ich feststellen musste, funktioniert das Skript leider nicht mehr unter Vista64. Das liegt an den mitgelieferten und dem Skript zugrundeliegenden rsync-Kommandozeilen-Programm und seiner Cygwin-Dateien - Cygwin ist eine Emulationsschicht für Linux-Programme. Rsync für Windows benutzt die Cygwin1.dll, die vom Cygwin-Projekt auch direkt hier heruntergeladen werden kann - anschließend muss die entpackte Datei cygwin1-20100423.dll in das rsyncbackup-Verzeichnis kopiert und in cygwin1.dll umbenannt werden. Ich habe es jedoch anders gemacht und auch direkt Rsync aktualisiert - hier gibt es eine Portierung für Windows. Nach der Installation müssen anschließend aus dem Pfad C:\Program Files (x86)\cwRsync\bin (bei einem 64-Bit-Betriebssystem - weil es 32-Bit-Dateien sind - ansonsten natürlich aus dem Pfad C:\Program Files\cwRsync\bin) die Dateien

 

  • rsync.exe
  • cygwin1.dll
  • cygiconv-2.dll
  • cyggcc_s-1.dll

 

in das rsyncbackup-Verzeichnis kopiert und gegebenenfalls überschrieben werden. Danach funktioniert das Skript auch unter Vista64.

 

Ergänzungen: ab Vista ist auch das Kommandozeilenprogramm robocopy im Lieferumfang enthalten, im Gegensatz zu rsync unterstützt dies jedoch keine Hardlinks. Diese Quelle stellt die Vor- und Nachteile beider Programme gegenüber. Ich habe dennoch ein alternatives Skript für robocopy gefunden, das auch Hardlinks erstellen kann: LINK. Jedoch benutzt dieses Skript zusätzliche Programme wie fsutil von Windows für diesen Zweck.

 

Etwas seltsam fand ich zunächst, das in diesem Skript Quell- und Zielpfade festgelegt werden, obwohl im Header externe Parameter dafür deklariert sind. Dann habe ich mir nochmal vergegenwärtigt, wie bei VBS-Skripten externe Parameter verarbeitet werden, das ist hier kurz dokumentiert. Demnach sind das wohl nur Initialisierungswerte, die später im Skript durch die externen Parameter überschrieben werden. Seltsam bleibt trotzdem, das die Funktion openArgs() im Skript als Funktion und nicht als Prozedur deklariert wurde weil kein Rückgabewert gesetzt wird, aber das tut der Funktion des Skripts natürlich keinen Abbruch. Ob Hardlinks erstellt werden sollen kann übrigens nur im Skript über die Variable hlnk festgelegt werden, diese Variable wird nicht durch externe Parameter überschrieben.

 

Für inkrementelle Backups würde ich jedoch eher rsync und rsyncbackup bevorzugen, weil so Hardlinks direkt anlegt werden können - und so die einzelnen Sicherungsstände historisch eingesehen werden können.

 

Über den Windows-Explorer gibt es übrigens keine Möglichkeit, Hardlinks zu erzeugen (auch nicht bei Vista64). Es gibt jedoch Hilfsprogramme wie Link Shell Extension, mit denen das über das Kontextmenü erreicht werden kann. Zumindest gibt es in Vista standardmäßig auch die DOS-Befehle fsutil und mklink für Hardlinks, man ist also nicht unbedingt auf diese Erweiterung angewiesen.

 

Directory symbolic links werden übrigens in NTFS Junctions genannt, um diese zu erstellen benötigt man das DOS-Programm Junction, von Sysinternals.

 

Erläuterungen gibt es in der Wikipedia zu Symbolischen Links und Hardlinks, wobei auch die Unterschiede erklärt werden. Weitere Informationen auch bei Netzwelt.

 

Gerade ist mir dazu noch eingefallen, das es im heise Softwareverzeichnis auch ein gleichnamiges Programm zu RsyncBackup gibt, mit grafischer Oberfläche: LINK. Bei Chip haben sie außerdem auch eine Menge weiterer Kopierprogramme aller Arten vorgestellt.

 

Update 7.4.2011: In den letzten Release-Notes von rsyncBackup habe ich folgendes gelesen, eine Anpassung ist also nicht mehr notwendig: "Version 1.05 01.07.10 Am Skript selbst hat sich nichts geändert, aber das Paket enthält jetzt eine rsync.exe samt cygwin-Bibliotheken, die auch unter Windows Vista und 7 funktionieren."

 

Tag-Wolke

Monats-Liste