user002
Goto Top

Robocopy Eine Quelle - Mehrere Festplatten

Hey,

ich versuche gerade mit Robocopy ein Backup durchzuführen.

Ich habe ein RAID-System mit 5 TB Speicherplatz. Von diesem RAID-System soll Robocopy ein Backup auf 6 (einzelne) 1 TB Festplatten durchführen.

Ist das möglich? Wenn ja, wie kann man das umsetzen?

Oder was gibt es für andere Möglichkeiten?

Danke.

LG
user002

Content-ID: 190668

Url: https://administrator.de/contentid/190668

Ausgedruckt am: 17.11.2024 um 13:11 Uhr

DerWoWusste
DerWoWusste 04.09.2012 um 10:56:28 Uhr
Goto Top
Moin.

Man sollte nicht versuchen, auf 6 Ziele gleichzeitig zu kopieren, dass geht stark zu lasten der Performance. Mach 6 Mal nacheinander robocopy.
pieh-ejdsch
pieh-ejdsch 04.09.2012 aktualisiert um 11:12:53 Uhr
Goto Top
moin DWW,

er will doch das gesmte Backup auf die 5...6 1-TB Platten aufteilen.

geht eh nur mit einer Liste oder DB.

Gruß Phil
user002
user002 04.09.2012 um 11:20:45 Uhr
Goto Top
Danke für die Antworten.

@phil

Wie genau meinst du das mit der Liste / DB?


Bis jetzt hatte ich immer das Problem, wenn die HDD voll war und ich eine neue eingebunden habe, wollte Robocopy mit dem Backup nicht fortfahren, weil Robocopy den Ordner nicht mehr finden kann.
AndreasHoster
AndreasHoster 04.09.2012 um 11:23:45 Uhr
Goto Top
Wie genau meinst du das mit der Liste / DB?

Er meint, daß Du Robocopy eine Liste von Dateien geben musst, die weniger als 1 TB groß ist.
Danach die Platte wechseln.
Nächster Robocopy Lauf mit der nächsten Liste.
Robocopy sieht nicht vor, daß man Wechsellaufwerke wechselt in einem Copy Job.
user002
user002 04.09.2012 um 12:24:16 Uhr
Goto Top
ok. Danke. Und wie kann man diese Liste erstellen?
DrAlcome
DrAlcome 04.09.2012 um 14:33:55 Uhr
Goto Top
Wie sieht denn deine Ordner-Struktur im Quellverzeichnis aus?

Am einfachsten wäre ggfs. wenn du für jede Platte einen eigenen Robocopy-Job erstellst.
Sowas wie
Erster Job: "Ordner 1-5", dann Platte wechseln
Zweiter Job: "Ordner 6-10", dann Platte wechseln
...usw.

Geht natürlich nur wenn deine Ordner-Struktur in der Quelle sowas zulässt.
Vielleicht geht's auch noch eleganter, aber so würde ich es jetzt auf die Schnelle machen.
user002
user002 04.09.2012 um 15:40:47 Uhr
Goto Top
Hey DrAlcome, danke für die Antwort.


In dem Quellordner sind mehrere Ordner und Dateien drin, die gesichert werden müssten. Die Größe ändert sich auch ständig.

Vielleicht gibt es ja auch ein freeware Backupprogramm, wo man das mit den mehreren Festplatten machen könnte.

LG
pieh-ejdsch
pieh-ejdsch 11.09.2012, aktualisiert am 12.09.2012 um 20:17:32 Uhr
Goto Top
moin,

Das mit dem mehreren Zielen ist kein Problem. Mit dem Zurücksichern wirds eventuell etwas kniffliger.
Da müssten dann 0-byte dateien erstellt werden. Dann ist aber der Ordner-Vorhanden-Check nicht mehr durchführbar.
Hier ist erstmal ein Funktionierendes Script zum Backup auf mehrere Ziele:
Ein Delta ist auch möglich.
@echo off
setlocal

if "%~1" neq "/?" goto :nohelp  
echo Erstellt ein Backup oder Restore nach:
for /f "delims=: " %%i in ('findstr /brc:":Ziel[0-9]* *" "%~f0"' ) do (call :%%i  
  call echo   %%i: 	%%Ziel%%
  call echo    SNr: 	%%VolSerial%%
)
exit /b

:nohelp
if "%~1" neq "/A" echo Bitte erst Die Pfade fuers Backup im Batch anpassen.^  
 &echo Anschliessend "%~n0" mit Option /A starten.&exit /b 1  
 rem Robocopy auf mehrere Ziele aufteilen
 rem Quelle und Dateien fuer Robocopy Festlegen
set     "Quelle=D:\Musik"  
set    "Dateien=*.*"  
set   "Copytemp=%~dpn0Copytemp.lst"  
set  "Vergleich=%~dpn0RC-V.txt"  
set "NVergleich=%~dpn0RC-Neu-V.txt"  
set        "Log=%~dpn0RC-log.log"  
set      "InLog=%~dpn0RC-Inlog.log"  
 rem Platz fuer Zuwachs in Ordnern. Rest im Speicherort beim ersten Backup lassen. in bytes
 rem  500 MB =   536.870.912
 rem    1 GB = 1.073.741.824
 rem    5 GB = 5.368.709.120
set "Schwelle=5368709120"  


goto :Liste
 rem Ziele und Volumebezeichner oder Volumeserial von den Split angeben 
:Ziel1
 rem 1.Ziel
set      "Ziel=K:\Backup1"  
 rem Seriennummer oder Volumebezeichnung
set "VolSerial=38A1-28B2"  
exit /b

:Ziel2
 rem 2.Ziel
set      "Ziel=L:\Test"  
set "VolSerial=68BD-C870"  
exit /b

:Ziel3
 rem 3.Ziel
set      "Ziel=\Backup3"  
set "Volserial=F44B-A167"  
exit /b

:Ziel4
 rem 4.Ziel
set       "Ziel=\Anderes Zeug\Backup4"  
set "Volserial=E435-6A7C"  
exit /b

:Ziel5
 rem 5.Ziel
set      "Ziel=\\fritz.box\Generic-FlashDisk-01\Backup5"  
set "Volserial=Generic-FlashDisk-01"  
exit /b

:Netzwerk
 rem RC-Einstellungen fuers Netzwerk
set "RCopt=/COPY:DT"  
exit /b

:Lokal
 rem RC-Einstellungen Lokal
set "RCopt="  
exit /b

 rem Ende Einstellungen

:Liste

 if defined TEST echo on
set "Letzte="  
set "Lang="  
type nul >>"%NVergleich%"  
2>nul (for /f "usebackqtokens=1,4*" %%i in ("%~dpn0-Backupset.ini") do (  
  set /a Ziel#=%%~i
  if %%i equ bei set "Letzte=%%k" &set "Lang=%%k"  
))
for /f %%i in ('findstr /brc:":Ziel[0-9]* *" "%~f0" ^|find /c /v "" ' ) do set /a MaxZiel=%%i , MaxFile=2*%%i  
set /a "MaxFile=2*Maxziel  
if not defined Ziel# set /a Ziel#=1
set "token="  
set "in=%quelle%"  
:tok
set /a Token+=1
for /f "tokens=2*delims=\" %%a in ("%in%" ) do set "In=%%~a" &goto :tok  
call :Backupset
 rem CopyListe erstellen
  set "QPfad=%Quelle%\"  
  set "ZPfad=\"  
  set "Daten=%Dateien%"  
set "skip="  
if not defined Letzte (setlocal enabledelayedexpansion &call :BackupSplit1 /LOG:"%Copytemp%" ">nul" /nc /xx /e /L   
  ) else for /f "delims=" %%i in ('cmd /von /c "find /n "!Letzte!" < "!Copytemp!" "') do if not defined Skip set /a skip=%%i-1  
if defined skip set "Skip=skip=%skip%" &echo Setze Fort ...&echo(  
for /f "%skip% usebackq tokens=*" %%c in ("%Copytemp%" ) do for /f "tokens=%token%* delims=\" %%a in ("%%~dpc" ) do (set "Lang=\%%~b%%~nxc"  
  set "QPfad=%%~dpc"  
  set "ZLPfad=\%%~b"  
  set "Daten=%%~nxc"  
  setlocal enabledelayedexpansion
  for /f "tokens=1-3 delims=?" %%a in ("!QPfad:%%=%%%%!?!ZLPfad:%%=%%%%!?!Daten:%%=%%%%!") do (  
    endlocal
    set "QPfad=%%a"  
    set "ZPfad=%%b"  
    set "Daten=%%c"  
    call :Backupsplit /log+:"%log%" ">nul"  
  )
  set "OF=\%%~b"  
)
rem Fertig
del "%~dpn0-Backupset.ini"  
echo Backup fertig.
pause
exit /b


:Backupsplit
setlocal enabledelayedexpansion
 rem Passt der Ornder noch drauf
:: echo !QPfad!!Daten!
if !OF! equ !ZLPfad! goto :Backupsplit1
set "VG#="  
 rem VGinL Schwellwertschalter
set "VGinL=1"  
for /f "tokens=2delims=?" %%i in ('^( find "?!QPfad!?" ^<"%NVergleich%" ^) 2^>nul ') do set "VGinL=" &if %%i neq %Ziel#% endlocal &set "VG#=1" &set "nach=" &set /a Ziel#=%%i &goto :Setweiter  
for /f "tokens=1-3*" %%i in ('robocopy "!QPfad:~0,-1!" "!nach!!ZPfad:~0,-1!" "!Dateien!"  /L /bytes /FP /NP' ) do @if %%i equ Bytes: for /f "tokens=3" %%a in ('dir /-c "!nach!\.." ^|findstr /rc:" Verzeichnis(se), *[0-9]* *Bytes frei"' ) do (  
  if %%k equ 0 goto :Backupsplit1
  call :Platz %%a  %%k &&echo zu Kopieren ist: %%k&&set "VG=1" ||set "VG="  
)
if not defined VG echo Kein Platz mehr ...&endlocal &goto :Backupset
 rem VergleichsListe schreiben
find /v "?!QPfad!?" <"%NVergleich%" >"%Vergleich%"  
move "%Vergleich%" "%NVergleich%" >nul  
:WriteIn
>>"%NVergleich%" echo ?!QPfad!?!Ziel#!  
set "VG#="  
set "VG="  

:BackupSplit1
 rem Paramter 2 wird ohne Anfü
robocopy /FP /FFT /njh /njs /np /ns /ndl /r:0 /w:0  "!QPfad:~0,-1!" "!nach!!ZPfad:~0,-1!" "!Daten!" !RCopt!  %1 %~2 %3 %4 %5 %6 %7 %8 %9  
if errorlevel 9 endlocal &echo anderer Fehler^^! #:%errorlevel% &exit /b 
if not errorlevel 1 endlocal &exit /b
if not errorlevel 2 (rem find in der passende Datei
  echo !Ziel#! !nach!!Lang!
  endlocal
  exit /b
)
if not errorlevel 8 endlocal &echo anderer Fehler^^! #:%errorlevel% &exit /b
echo Es steht nicht genug Speicherplatz auf dem Datentr„ger zur Verfgung.^(#8^)

:Backupset
if "%0" equ ":Backupset" goto :Setweiter  
 rem Rotation mit NextFit fuer Ziele zum Ausnutzen der Kapazitaet
set /a Ziel#=Ziel#%%MaxZiel+1
set "nach="  
:Setweiter
call :Ziel%Ziel#%
if not defined nach call :SucheLaufwerk "%ziel%"  
setlocal enabledelayedexpansion
echo %Ziel#% = Backupset auf !nach!
echo bei Datei: !nach!!Lang!
echo %Ziel#% = Bezeichnet mit: !Volserial!
(echo %Ziel#% = Backupset auf !nach!
echo %Ziel#% = Bezeichnet mit: !Volserial!
)>>"%log%"  
(echo %Ziel#% = Backupset auf !nach!
if defined ZLPfad echo bei der letzten Datei: !ZLPfad!
echo %Ziel#% = Bezeichnet mit: !Volserial!
)1>"%~dpn0-Backupset.ini"  
endlocal
if "%0" equ ":Backupsplit" echo Verarbeite Liste ...&goto :Backupsplit  
exit /b


:Platz
 rem %1 LW %2 Daten
set "LW=%~1"  
set "DC=%~2"  
 rem um ueber ca. 2 GB bis ca. 2 TB zu rechnen
set "LW=%LW:~0,-3%"  
set "DC=%DC:~0,-3%"  
set "Schwelle=%schwelle:~0,-3%"  
if not defined schwelle set /a Schwelle=0
if not defined LW set /a LW=0
if not defined DC set /a DC=0
set /a chk=lw-schwelle
 rem VGinL Schwellwert nur beim 1. Backup
if defined VGinL if %chk% lss 0 exit /b 1
if %DC% gtr %chk% exit /b 1
exit /b


:SucheLaufwerk
call :Lokal
set "nach="  
 rem Vol findet keine Freigaben
 rem Dir listet Volume und Seriennummer auch bei Freigaben
for /f "delims=\ " %%i in ('mountvol ^|find ":\" ^|sort ') do dir "%%i\.?." 2>nul|findstr /ec:" %VolSerial%" && set "nach=%%i%~pnx1"  
 
if not defined nach for /f "tokens=1,2delims=\" %%i in ("%~1" ) do dir "\\%%i\%%j\.?." >nul 2>nul &&set "nach=%~1" &&echo Mit Netzwerk verbunden. &&call :Netzwerk  

if not defined nach echo Datentraeger %VolSerial% fuer Backup nicht gefunden!^
 &&echo    Bitte verbinden ...&&pause &&goto :SucheLaufwerk
if "%~1" neq "%nach%" echo Backuppfad wurde angepasst: "%nach%"  
if not exist "%nach%" md "%nach%"  
echo(
 rem Positivliste erstellen
echo Aktualisiere Vergleichsliste
for /f "tokens=1*" %%I in ('robocopy /njs /njh /NDL /fp /e "%nach%" "%Quelle%" "%Dateien%"  /L /min:1 /v /NC /bytes ^|findstr /rbvc:"[^1-9:]*0" ' ) do if .%%J neq . for /f "tokens=%token%* delims=\" %%I in ("%%~dpJ" ) do (  
  setlocal enabledelayedexpansion
  if %%~J neq !Folder! (
    find /v "?!Quelle!\%%~J?" <"%NVergleich%" >"%Vergleich%"  
    move "%Vergleich%" "%NVergleich%" >nul  
    >>"%NVergleich%" echo ?!Quelle!\%%~J?!Ziel#!  
  )
  endlocal
  set "Folder=%%~J"  
)
 rem Schreibe als Index zum Restore 0-byte
echo Aktualisiere Inhalt
robocopy /njs /njh /nfl /ndl /np /fp /r:1 /w:0 /e /XC /Create "%Quelle%" "%nach%" "%Dateien%"  
exit /b


:Groesse
 rem Nur test
 rem Zum Prozentualen Vergleich Kapazität -- Puffer
for /f "tokens=2,3,4 delims=," %%i in (' "WMIC LOGICALDISK get name, size, Volumename, volumeserialnumber " /format:csv ^|findstr ":,[0-9]" ' ) do @echo %%i %%j %%k  

Gruß Phil
pieh-ejdsch
pieh-ejdsch 12.09.2012 um 20:24:34 Uhr
Goto Top
moin,

ListenVergleich wurde richtig integriert.
0-Byte Dateien werden zu Anfang erstellt.
Somit sollte auch ein Restore von den Zielen möglich sein. (/Mir)
Ist bestimmt noch verbesserungsbedürftig.

Gruß Phil
pieh-ejdsch
pieh-ejdsch 21.09.2012 um 09:48:18 Uhr
Goto Top
moin user002,

hat Dir das Script jetzt etwas gebracht?
Oder sind noch Fehler vorhanden oder auszumerzen?

Gruß Phil
user002
user002 27.09.2012 um 15:32:13 Uhr
Goto Top
Hey Phil,

sry für die späte Antwort. Ich bin zurzeit noch nicht dazu gekommen das Script zu testen. Aber ich werde es am Wochenende testen.

Schon mal vielen Dank für die Hilfe und das Script.

Danke und viele Grüße

user002