Backup von geöffneten Dateien.

Möchte man mit copy/xcopy/robocopy Verzeichnisse mit geöffneten Dateien kopieren (z.B.: das Systemverzeichnis) bekommt man immer die Meldung, dass Dateien nicht kopiert werden konnten, da sie gerade verwendet werden.
Die Lösung heißt hier: Volume Shadow Copy (oder Schattenkopie).

Der Testaufbau

Für diesen Test existiert auf einer Festplatte „E:“ ein Verzeichnis „1_Quelle“ und „2_Ziel“.
Im Quellverzeichnis befinden sich 2 Text-Dateien und eine Access-Datenbank (welche die geöffnete Datei simulieren soll).



Führt man nun ein robocopy aus, welches die die Dateien von „1_Quelle“ Nach „2_Ziel“ kopieren soll, erhält man die Fehlermeldung
…. ERROR 32 (0x00000020) Copying File e:\1_Quelle\Test-Datenbank.accdb
The process cannot access the file because it is being used by another process.




Es wurden also nur die beiden, ungeöffneten, Text-Dateien kopiert.



Schattenkopie erzeugen

Nun erzeuge ich eine Schattenkopie für das Laufwerk „E:\“.





Mit

Kann man jetzt die Schattenkopie auflisten lassen


Hier können auch mehrere Schattenkopien angezeigt werden, wenn diese vorhanden sind. Hier gilt es die richtige Schattenkopie zu finden 😉

Schattenkopie einbinden

Nun kann man diese Schattenkopie einbinden. Wichtig ist hier für uns die Angabe „Schadow Copy Volume: \\?\GLOBALROOT\DEVICE\HarddiskVolumeShadowCopy10“



Der Befehl zum verlinken lautet:

(Den Backshlash am Ende nicht vergessen !!!!!)

.

Navigiert man nun in dem erzeugen Link „e:\backup“, findet man nun die gleiche Verzeichnisstruktur wieder, wie auf dem Laufwerk „e:\“



Man kann nun im „live“ Verzeichnis weitere Dateien erzeugen, die Schattenkopie bleibt davon unbehelligt.



Dateien kopieren

Führt man jetzt erneut ein robocopy aus (diesmal als Quelle den Link-Pfad angeben !!),



wird die Datei „Test-Datenbank.accdb“ mit kopiert, obwohl sie noch geöffnet ist. Die Datei „zz_neue Datei.txt“ wurde nicht kopiert, die sie in der Schattenkopie noch nicht verfügbar ist.



Gegenprobe:
Wenn ich nun den robocopy-Befehl erneut mit der original-Pfadangabe „e:\1_Quelle“ ausführe, sollte zwar die neue Datei „zz_neue Datei.txt“, nicht aber die geöffnete Datenbank „Test-Datenbank.accdb“ kopiert weden können.




Link zur Schattenkopie entfernen

Um den Link zur Schattenkopie wieder zu entfernen, reicht ein einfaches Löschen des Links




Schattenkopie löschen

Um die Schattenkopie selber zu löschen, gibt es den Befehl



Das Löschen muss bestätigt werden.



Möchte man keine Rückfrage erhalten, kann man noch den Parameter „/Quiet“ anfügen.
Ebenso gibt es den Parameter „/oldest“, der nur die älteste Schattenkopie löscht.
Man kann Schattenkopieen auch gezielt, z.B.: über deren ID, löschen

oder/und auf ein Laufwerk begrenzen (z.B.: Laufwerk e:\)