Jalara Studio

veröffentlicht am

Festplatte spiegeln mit Robocopy

# # # #


Wie das Spiegeln einer Festplatte mit dem Kommandozeilentool Robocopy gelingt und was man besonders im Hinblick auf die Laufwerksbuchstaben beachten muss, , zeigt folgender Artikel:

Mit dem Befehl robocopy D: F: /MIR /R:0 /W:0 , eingegeben in der Kommandozeile, lässt die sich bereits der Inhalt der Festplatte mit dem Laufwerksbuchstaben D auf die Festplatte mit dem Laufwerksbuchstaben F spiegeln. Inhalte auf der Festplatte F werden bei dem Befehl /MIR (von engl. mirror; dt. Spiegel) gelöscht. Die Parameter R und W wurden hier auf 0 gesetzt, so dass es keine weiteren Versuche gibt, wenn das Kopieren einer Datei Probleme macht. Mit der Angabe R:1 würde eine Wiederholung nach 30 Sekunden erfolgen. Soll diese Wiederholung nach 3 Sekunde erfolgen, so gebe W:3 an.

Dennoch ist dieser Befehl nicht unproblematisch. Denn ein falsch ausgewählter Laufwerksbuchstabe kann die Original-Dateien bzw. die Daten der Quelle löschen.

Du kannst daher den Parameter /L angeben, damit der Vorgang zunächst in der Kommandozeile getestet werden kann, dabei wird nichts kopiert.

Die Vergabe eines Laufwerksbuchstaben für einen Stick oder Festplatte durch Windows ist jedoch nicht fest: Wird eine Festplatte nach der sicheren Entfernung abgezogen, wird der Laufwerksbuchstabe frei und dieser mitunter für die nächste Festplatte genutzt. Die Festplatte mit den Original-Dateien kann also bei einem nächsten mal statt des Laufwerksbuchstaben D den Laufwerksbuchstaben F besitzen.

Für dieses Problem gibt es mehrere Möglichkeiten.

Möglichkeit 1 - Festplatte mit permanenten Laufwerksbuchstaben

Eine Möglichkeit wäre das kostenlose Tool USBDLM von Uwe Sieber1, mit dem du die Bezeichnung einer Festplatten einen bestimmten Laufwerksbuchstaben permanent zuteilen kannst.
Die Laufwerksbuchstaben müssen hierfür in die Datei USBDLM.INI eingegeben werden, welche sich mit einem beliebigen Editor öffnen lässt.2 Neben Laufwerksbuchstaben lassen sich auch Ordner angegeben. Dies geht auch manuell, wie die in der nächsten Methode gezeigt.

Möglichkeit 2 - Festplatte einem Ordner zuweisen

Die zweite und auch übersichtlichste Methode für Robocopy wäre das Zuweisen eines Ordners für die Festplatte. Dies gelingt in der Datenträgerverwaltung.

Klicke hierfür auf den jeweiligen Datenträger und wähle Laufwerkbuchstabe und -pfade ändern aus.

Klicke im darauf geöffnetem Fenster auf die Schaltfläche Hinzufügen:

Wähle anschließend die Option In folgendem leeren Ordner bereitstellen aus und klicke auf Durchsuchen, um den Pfad zum Ordner zu finden, den du der Festplatte zuweisen möchtest:

Anschließend kannst du diesen Ordner für das Spiegeln der Festplatte nutzen:

robocopy FILES_O: FILES_BA: /MIR /R:0 /W:0

Möglichkeit 3 - Laufwerksbuchstaben über Laufwerksbuchstaben mit Hilfe der Kommandozeile ermitteln

Eine andere Möglichkeit wäre, das Backup nicht abhängig vom Laufwerksbuchstaben, sondern abhängig vom Laufwerksbezeichnung zu machen.

Da Robocopy in der Kommandozeile ausgeführt wird, können Befehle genutzt werden, die die Bezeichnung der Festplatte vor dem Kopieren auslesen und die Robocopy-Befehle erst ausführen, wenn wirklich die richtige Festplatte z.B. mit der Bezeichnung FILES_O ausgewählt und die Festplatte z.B. mit der Bezeichnung FILES_BA für die Spiegelung bereit ist.

Ein solcher Befehl ist vol. Eingegeben in der Eingabeaufforderung sowie der Angabe des Laufwerksbuchstaben, erfährst du die Bezeichnung der Festplatte und die zufällig bei der Formatierung vergebene Volumenseriennummer:

vol D:
 Datenträger in Laufwerk D: Dateien
 Volumeseriennummer: 0093-F2AC

Wenn die Bezeichnungen der Laufwerke konstant bleiben, lässen sich diese Bezeichnung in der Batch-Datei wie folgt in Variablen wie %OriginalLabel% für die Original-Festplatte und %BackupLabel% für die Zielfestplatte nutzen:

@echo off
setlocal enabledelayedexpansion 
REM MOVIE SERIE_DV
set OrginalLabel="FILES_O"
set BackupLabel="FILES_BA"

Als nächstes kann in der Batch-Datei eine Liste möglicher Festplatten-Buchstaben angegeben werden:

set "list=D E F G H I J K L M N O P Q R S T U V W X Y Z"

Jeder Buchstabe kann nun in einem Loop auf Existenz und Namen geprüft werden:

for %%i in (%list%) do (
 if exist %%i:\ (
  REM Ermittle Labelname
  for /f "tokens=5,*" %%A in ('Vol %%i:') do (
   if "%%B"==%OrginalLabel% (
    for %%w in (%list%) do (
     if exist %%w:\ (
      for /f "tokens=5,*" %%X in ('Vol %%w:') do (  
       if "%%Y"==%BackupLabel% ( 
       echo Spiegle %%i %%B mit %%w %%Y 
       Robocopy %%i: %%w: /MIR /R:0 /W:0 /DCOPY:DAT /xd "System Volume Information" "$Recycle.bin" /xf "icon.ico" 
       DEL "%%i:\BACKUP *.txt" 
       type NUL > "%%i:\BACKUP %date%.txt" 
       DEL "%%w:\BACKUP *.txt" 
       type NUL > "%%w:\BACKUP %date%.txt" 
       ) 
      ) 
     ) 
    ) 
   ) 
  ) 
 ) 
) 
Pause

Erklärung: In diesem Code-Beispiel für eine Batch-Datei steht %%i für den Laufwerksbuchstaben und %%B steht für den Labelnamen der Original-Festplatte. %%w hingegen steht für den Laufwerksbuchstaben der Backup-Festplatte und %%Y für deren Bezeichnung.

Dem Robocopy-Befehl wurden hier zusätzlich noch Parameter angegeben, mit dem einzelne Ordner (/xd) und Dateien (/xf) vom Kopiervorgang ausgeschlossen werden sollen. Mit /xj (exclude junction) können weitere unnütze Dateien ausgeschlossen werden. Des Weiteren wurde DCOPY:DAT angegeben, um den Zeitstempel mitzukopieren.

Links