Quantcast
Channel: Robert Kraus – krausens-online.de
Viewing all articles
Browse latest Browse all 71

Backup von geöffneten Dateien.

$
0
0

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:\“.

#Für Win7
vssadmin create shadow /for=e:

#Für Win10
wmic shadowcopy call create Volume='E:\'



Mit

Vssadmin list shadows

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:

mklink /D e:\backup \\?\GLOBALROOT\DEVICE\HarddiskVolumeShadowCopy10\

(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

rd e:\backup


Schattenkopie löschen

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

vssadmin delete shadows /all


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

vssadmin Delete Shadows /Shadow=ShadowId  [/quiet]

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

vssadmin Delete Shadows /For=e:\  [/oldest] [/quiet]


Viewing all articles
Browse latest Browse all 71