modellix
Goto Top

Backup per Batch - div. Anfängerfragen

Per RoboCopy soll jede Nacht ein vollständiges Backup unseres Servers Win2003 SBS) auf eine lokal angeschlossene USB-Platte gemacht werden.
Die Platte wird wöchentlich gewechselt und bietet Platz für insgesamt fünf Sicherungen.

Hallo Administratoren!

Als "blutiger" Anfänger in Administration und Programmierung habe ich oben beschriebene Aufgabenstellung.
Nach ausführlicher Lektüre hier und in den weiten Untiefen des Webs habe ich mit der Erstellung eines Batch-Scripts
begonnen, welches zum Teil auch schon funktioniert. Aber ich brauche eure Hilfe, um das Projekt fertig zu bekommen.

Zunächst der "Rahmen":

Jede Nacht soll auf unserem Server (Windows SBS2003) eine automatische Datensicherung per RoboCopy auf einer
lokal angeschlossenen USB-Festplatte erfolgen. Es ist geplant, dass die Platte jeweils montags gewechselt wird.

Ich plane, über den Scheduler jeweils Di, Mi, Do, Fr, Sa um 02:00Uhr die Sicherung zu starten. Dann sind alle Daten
des Produktivtages soweit geschlossen, dass auch die "Nachtarbeit" mit gesichert werden kann.

Diese fünf Voll-Sicherungen (also nicht inkremental) passen gut auf die externen Platten, eine sechste würde nicht draufpassen.

Also starte ich damit, dass ich die vorhandenen Verzeichnisse der Platte abfrage und das jeweils älteste lösche.

Im nächsten Schritt lege ich einen neuen Ordner an, der das aktuelle Sicherungsdatum in der Form JJJJMMTT als Namen trägt.

Jetzt soll RoboCopy die gewünschten Files in den neu angelegten Ordner schreiben. Und da sitzt der Haken:
Wie kann ich den neu erzeugten Ordner automatisch als Zielpfad für RoboCopy übergeben?

:: @echo off

:: --------- Setzen der Pfade ---------
set scriptdir=C:\Backupscripts
set logdir=C:\Backupscripts\Logfile
set bckdrv=X:


:: --------- Ueberpruefung der vorhandenen Ordner im %bckdrv% , aelteste werden geloescht, >maximum=4< bleiben erhalten ---------
:MaxBackupUeberpruefen
set "maximum=4"  
FOR /F "skip=%maximum% delims=" %%i in ('dir /O-D /B /AD %bckdrv%\') do rd /S /Q %bckdrv%\"%%i"  

GOTO :DatumsordnerErzeugen


:: --------- Anlegen des neuen Sicherungsordners im %bckdrv% im Format YYYYMMDD ---------
:DatumsordnerErzeugen
set jahr=%date:~-4%
set monat=%date:~-7,2%
set tag=%date:~-10,2%
md %bckdrv%\%jahr%%monat%%tag%

GOTO :ROBOCOPY


:: --------- Ausfuehren der Sicherung per robocopy im neu erzeugten Ordner ---------
:ROBOCOPY

set bckdir=

robocopy "d:\test1" %bckdrv%%bckdir%\test1 /S /E /COPY:DATS /R:4 /W:10 /LOG+:%logdir%\backuplog.log /NP /TEE  

GOTO :EOF

:EOF

:: @echo on


Speziell geht es mir also darum, dass ich das Zielverzeichnis %bckdir% definieren muss, aber nicht weiss, wie.
Kann mir jemand einen eleganten Tip beisteuern?

Vielen Dank!

Felix

Content-Key: 116087

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

Ausgedruckt am: 28.03.2024 um 21:03 Uhr

Mitglied: 60730
60730 14.05.2009 um 15:10:25 Uhr
Goto Top
Servus,

gib dem Script doch eine logische "Struktur"
Set zu Set usw.
Und du hattest
set bckdir= Nix nada da stehen....

Also Zeile 17 - 22 ganz an den Anfang und aus der ehemaligen Zeile 22 ein Set face-wink


:: @echo off
:: --------- Setzen der Variablen ---------
set scriptdir=C:\Backupscripts
set logdir=C:\Backupscripts\Logfile
set bckdrv=X:

set jahr=%date:~-4%
set monat=%date:~-7,2%
set tag=%date:~-10,2%
set bckdir=%bckdrv%\%jahr%%monat%%tag%


:: --------- Ueberpruefung der vorhandenen Ordner im %bckdrv% , aelteste werden geloescht, >maximum=4< bleiben erhalten ---------
:MaxBackupUeberpruefen
set "maximum=4"  
FOR /F "skip=%maximum% delims=" %%i in ('dir /O-D /B /AD %bckdrv%\') do rd /S /Q %bckdrv%\"%%i"  

:: --------- Anlegen des neuen Sicherungsordners im %bckdrv% im Format YYYYMMDD ---------

md %bckdir%

:: --------- Ausfuehren der Sicherung per robocopy im neu erzeugten Ordner ---------
:ROBOCOPY

robocopy "d:\test1" %bckdrv%%bckdir%\test1 /S /E /COPY:DATS /R:4 /W:10 /LOG+:%logdir%\backuplog.log /NP /TEE  

:EOF

:: @echo on

...so mal Pi mal daumen drüber gesehen...

edit - so mal alle goto - die eh angesprungen würden, da direkt darunter - rausgekickt... /edit
edit² jau und nun ist auch in Zeile 10 ein \ - wo es hingehört /edit²

Gruß
Mitglied: Biber
Biber 14.05.2009 um 15:16:10 Uhr
Goto Top
Moin Modellix,

willkommen im Forum.

In Zeile 17-21 Deines Schnipsels wird schon ein neuer Sicherungsordner unterhalb %bckdrv% zusammengebastelt.
Also wäre doch der Wert des neuen Sicherungsordners laut Skizze %jahr%%monat%%tag%, und dementsprechen solltest Du VOR dem "MD ..." (Zeile 22) einfügen:
Set "bckdir=%jahr%%monat%%tag%"

Grüße
Biber
Mitglied: Modellix
Modellix 14.05.2009 um 15:24:36 Uhr
Goto Top
Moin TimoBeil, Moin Biber,

schon nicht schlecht, wenn man sich die Sachen nochmal mit Verstand durchliest...
Ich hatte mit die einzelnen Abschnitte in jeweils separaten Files geschrieben und getestet.
Danach hab' ich sie zwar zusammen>kopiert< aber eben nicht zusammen>kapiert<...

Zunächst danke für eure Hilfe!

Felix
Mitglied: Modellix
Modellix 15.07.2009 um 15:56:59 Uhr
Goto Top
Hallo Admins,

jetzt ist einige Zeit vergangen, und mein Backup läuft immer noch nicht automatisch und
vollständig. Statt dessen sichere ich die wichtigsten Sachen von Hand, die unwichtigen eigentlich
gar nicht...
Auch wenn das Script mit eurer Hilfe eigentlich schon fertig ist, traue ich mich noch nicht so recht,
es auf meinen Server loszulassen.

Kann bitte nochmal jemand drüber schauen, ob das so in Ordnung ist?

@echo off
:: --------- Setzen der Variablen ---------
if exist x:\ set bckdrv=x:
if exist y:\ set bckdrv=y:

set scriptdir=C:\Backupscripts
set logdir=C:\Backupscripts\Logfile
set jahr=%date:~-4%
set monat=%date:~-7,2%
set tag=%date:~-10,2%
set bckdir=%bckdrv%\%jahr%%monat%%tag%


:: --------- Ueberpruefung der vorhandenen Ordner im %bckdrv% , aelteste werden geloescht, >maximum=4< bleiben erhalten ---------
:MaxBackupUeberpruefen
set "maximum=4"  
FOR /F "skip=%maximum% delims=" %%i in ('dir /O-D /B /AD %bckdrv%\') do rd /S /Q %bckdrv%\"%%i"  


:: --------- Anlegen des neuen Sicherungsordners im %bckdrv% im Format YYYYMMDD ---------
md %bckdir%

:: --------- Ausfuehren der Sicherung per robocopy im neu erzeugten Ordner ---------
:ROBOCOPY

robocopy "D:\Archiv_1" "%bckdrv%%bckdir%\Archiv_1" /S /E /COPY:DATS /R:4 /W:10 /LOG+:%logdir%\backuplog.log /NP /TEE  
robocopy "D:\Archiv_2" "%bckdrv%%bckdir%\Archiv_2" /S /E /COPY:DATS /R:4 /W:10 /LOG+:%logdir%\backuplog.log /NP /TEE  
robocopy "D:\Archiv_3" "%bckdrv%%bckdir%\Archiv_3" /S /E /COPY:DATS /R:4 /W:10 /LOG+:%logdir%\backuplog.log /NP /TEE  

:EOF

@echo on

Noch zur Erklärung:
Die zwei externen Platten, auf die ich abwechselnd sichern möchte, sind am Server über die Datenträgerverwaltung als
Laufwerk X bzw. Y angemeldet und werden immer abwechselnd angeschlossen.

Hauptsächlich geht es mir übrigens um die richtigen Parameter beim RoboCopy, um täglich ein volles Backup in ein jeweils
neues Verzeichnis zu machen. Stimmen die so? Kann ich die einzelnen Robocopy-Befehlszeilen so untereinander schreiben,
und sie werden nach einander abgearbeitet? Oder benötige ich eine Art Zwangspause nach jedem einzelnen Befehl?

Danke schonmal!

Felix
Mitglied: 60730
60730 15.07.2009 um 21:58:10 Uhr
Goto Top
Zitat von @Modellix:
Hallo Admins,

jetzt ist einige Zeit vergangen, und mein Backup läuft immer
noch nicht automatisch und
vollständig. Statt dessen sichere ich die wichtigsten Sachen von
Hand, die unwichtigen eigentlich
gar nicht...
Auch wenn das Script mit eurer Hilfe eigentlich schon fertig ist,
traue ich mich noch nicht so recht,
es auf meinen Server loszulassen.

Kann bitte nochmal jemand drüber schauen, ob das so in Ordnung
ist?

Servus,

das mit dem drüberschauen machen wir bitte anders face-wink

Überall wo ich in unfertigen Scripten als erste Zeile ein Echo finde - ist das debuggen nicht drin.
Die machst du bitte erstmal (in einer Kopie?) raus - obwohl das Original ist ja noch Hier face-wink

Überall - wo ein Befehl drin steht - wie rd oder robocopy - machst du ein echo davor.

Durch beide "zutaten" sowohl kein Echo off, als auch echo vor dem Befehl - solltest du sehen, welche Befehlszeilenvom Script erzeugt werden.
Hinter jedem echo noch eine Pause und die Zeile in einer separaten DOsbox abfeuern - ist dann schlussendlich dein Stepover über das Script.

Das kannst du alleine und bringt dir auch mehr als einem von uns - denn wir können das - du wilst es doch auchkönnen face-wink

bzw. ich kanns nicht - weil mein Apfel (der mit einem M im Namen - kann das nicht - besser ich will nicht, dass er das kann - ist ja keine Win Birne)


Gruß