daarther

backup script mit robocopy - verbersserungsvorschläge bzw. tipps

Hallo Community.

Bin neu hier und stell mich erstmal vor:
Alex H. , 25, Hobby-Entwickler, zurzeit für nen kleinen OnlineShop tätig.


Also ich habe die Aufgabe ein Backup Script zu schreiben. Daten von einem Samba-Linux Server sollen gesichert werden.
Anforderungen:

- Daten von Linuxserver sollen auf USB-Platte gesichert werden
- möglichst vollautomatisch zu definierten Zeiten

Da ich freie Hand bei der Umsetzung habe habe ich folgende Option gewählt:

- ich nutze Windows (robocopy)! Kenne mich mit Linux nur beschränkt aus...
- ich werde die Datensicherung von einem Windows Client starten lassen der Zugriffsrechte auf den Linux-Server hat
- die USB-Platte wird bei meiner Lösung an den Windows Client und nicht den Linux-Server angschlossen.
- das ganze wird als geplanter Task ausgeführt

So nun habe ich nach einiger Recherche ein lauffähiges Script zusammengeschustert, was eigentlich von jeder Quelle zu jedem Ziel "sichert".
Die Quell und Zielangabe erfolgt per config.ini Datei. Die wichtigsten Fehler habe ich selbst definiert und lasse alle aktionen des Scripts in eine *.csv LOG-Datei speichern, so formatiert das man sie in Excel öffnen kann. Das Script kompiliere ich mit Shareware zu ner *.exe.

QuellCode:

@echo off
echo ---------------------------
echo BackupScript OnlineShop   
echo by Alexander H. 2008 
echo with Robocopy ;)         
echo ---------------------------

set Datum=%date%;%time:~0,2%.%time:~3,2%.%time:~6,2% 

for /f "delims== tokens=1,2" %%i in ('findstr "Quelle" config.ini') do @set Quelle=%%j  
for /f "delims== tokens=1,2" %%i in ('findstr "Ziel" config.ini') do @set Ziel=%%j  

set "ZielOrdner=%Ziel%%date:~-10,2%_%date:~-7,2%_%date:~-4%_BackupW24"   

if not exist %Ziel% if not exist %Quelle% goto :Fehler1
if not exist %Ziel% if exist %Quelle% goto :Fehler2
if not exist %Quelle% if exist %Ziel% goto :Fehler3
if exist %Ziel% if exist %Quelle% goto :CreateAdminLog

:CreateAdminLog
if exist Adminlog.csv goto :Spaceman
if not exist Adminlog.csv echo Datum ;Uhrzeit ;Quelle ;Ziel ;Meldung1 ;Meldung2 ;Tipp ;Groesse Quelle (MB) ;Groesse Ziel (MB) (vor Backup) %*>> Adminlog.csv 
goto :Spaceman


:Spaceman
FOR /F "tokens=3 delims= " %%i in ('dir %Ziel% /-c') do set frei=%%i  
set /a ZielMBfrei=%frei:~,-3%/1024
set "FS=GetFolderSize.vbs  
echo WScript.Echo Int(CreateObject("Scripting.FileSystemObject").GetFolder(WScript.Arguments(0)).Size/1024/1024+.99)>%FS%   
for /f %%i in ('cscript //nologo %FS% "%Quelle%"') do set QuelleMB=%%i   
if %ZielMBfrei% GEQ %QuelleMB%   goto :Robocopy
if %ZielMBfrei% LSS %QuelleMB%   goto :Fehler4


:Robocopy
robocopy %Quelle% %ZielOrdner% /MIR /LOG+:Copylog.txt /TEE 
goto :Erfolg


set Meldung1=Backup nicht erfolgreich.


:Fehler1
echo %Datum% ;%Quelle% ;%Ziel% ;%Meldung1% ;Fehler 1: Quelle und Ziel nicht erreicht. ;Netzlaufwerk und Freigabe prüfen (auf Server angemeldet?), USB-Platte anschließen ; ; %*>> Adminlog.csv
goto :Ende_F


:Fehler2
echo %Datum% ;%Quelle% ;%Ziel% ;%Meldung1% ;Fehler 2: Ziel-HD nicht erreicht. ;Ziel-HD und Verbindung pruefen ; ; %*>> Adminlog.csv
goto :Ende_F


:Fehler3
echo %Datum% ;%Quelle% ;%Ziel% ;%Meldung1% ;Fehler 3: Quell-HD nicht erreicht. ;Netzlaufwerk und Freigabe prüfen (auf Server angemeldet?,LAN-Kabel defekt?) ; ;  %*>> Adminlog.csv
goto :Ende_F


:Fehler4
echo %Datum% ;%Quelle% ;%Ziel% ;%Meldung1% ;Fehler 4: Zuwenig Speicherplatz auf Zieldatenträger. ;Platz schaffen (siehe naechste Spalte) ;%QuelleMB%MB-min benoetigt ;%ZielMBfrei%MB-real vorhanden%*>> Adminlog.csv
goto :Ende_F


:Erfolg
set /a StillFree=%ZielMBfrei%-%QuelleMB%
echo %Datum% ;%Quelle% ;%Ziel% ;Backup erfolgreich ;%QuelleMB%MB von %Quelle% nach %ZielOrdner% kopiert ;Freier Speicher auf %Ziel% nach Backup: %StillFree%MB ;%QuelleMB%MB-min benoetigt ;%ZielMBfrei%MB-real(vor Backup)  %*>> Adminlog.csv
goto Ende_E


:Ende_E
cls
echo Backup erfolgreich ausgefuehrt am %date% um %time:~0,2%.%time:~3,2%.%time:~6,2%
echo Es wurden %QuelleMB%MB von %Quelle% nach %ZielOrdner% uebertragen. (Infos siehe AdminLog.csv)
echo Freier Speicher auf %Ziel% nach Backup: %StillFree%MB
echo (email@web.de)
pause
goto :TheEnd


:Ende_F
echo Backup abgebrochen am %date% um %time:~0,2%.%time:~3,2%.%time:~6,2%
echo Backup nicht erfolgreich - ein Fehler ist aufgetreten.(Infos siehe AdminLog.csv)
echo (email@web.de)
pause
goto :TheEnd


:TheEnd
if exist GetFolderSize.vbs del GetFolderSize.vbs


Es läuft zwar und macht was ich will aber es ist ein Wirrwar aus VB-Script und Shell Programm... wäre nett wenn mir da jemand ein paar Hinweise geben könnte. Was ist zu verbessern, was ok?
Und noch eine vielleicht unverschämte Frage: Was kann für sowas verlangen? Bin neu im Geschäft und auf Erfahrungssuche... ;)


mfg.daarther
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 93190

Url: https://administrator.de/forum/backup-script-mit-robocopy-verbersserungsvorschlaege-bzw-tipps-93190.html

Ausgedruckt am: 02.06.2025 um 19:06 Uhr

61801
61801 30.07.2008 um 07:48:46 Uhr
Goto Top
wiso machst du es nicht ganz in VB?
Oder hast du nur Grundkenntnisse?, denn so finde ich es wirklich etwas "unaufgeräumt", das ist aber nur der optische Faktor, wenn es funktioniert, dann gehts klar. Man muss sich nur zurechtfinden (auch anderen, falls du deine Arbeit mal abgibst)

Naja, wenn du große Datenmengen sicher musst, stellt deine Lösung natürlich nen Engpass dar, weil zuerst alles von der Linux-Platte durchs Netzwerk auf den XP-PC muss, und der muss es dann auf seine USB-HDD schreiben... Aber ohne Linux-Kenntnisse (also für Skripte und so) wird sich das nicht ändern lassen.

Wiso mit Shareware kompilieren? Wiso überhaupst kompilieren?

Also ich (als VB.NET'ler) hät da ne schöne Konsolen-Anwendung gemacht, weil man die Übersichtlichkeit und Verstädnlichkeit um mehrere 1000% steigern kann (sofern man die Sprache kann face-smile )

Hast schon mal nach Backup und Linux gegoogelt?
Das springt mir dabei ins Auge:
http://www.tecchannel.de/storage/backup/402533/index6.html


mfg
Kriechi
daarther
daarther 31.07.2008 um 00:11:53 Uhr
Goto Top
Hallo.

Naja, ja ich muss zugeben ich habe nicht wirklich viel ahnung. Nur Grundlagenkenntnisse.

Habe mir Deinen Link mal angeguckt und es auch probiert...thx

Im Prinzip macht rsync ja nichts anderes als robocopy.
Aber ich finde das ganze in Linux umzusetzen ist nicht grad einfach..aber ich bleib dran.

Hab mir nen Samba Server eingerichtet und nen Windows Client... der Backup mit robocopy am Client ist nur unwesentlich langsamer als der direkte Linux-Server-Backup mit rSync.
(150 MB von Server - über Client - auf USB an Client --> in 1 min, wobei es zwischen USB 2.0 und USB 2.0 scheinbar deutliche Unterschiede gibt... ;))

Warum kompilieren? Weil sonst jemand im Script rumpfuschen könnte und mir das dann in die Schuhe geschoben wird...


Werde morgen bzw. heute erstmal das robocopy script vorstellen und weiter sehen.

mfg.daarther