44275
Goto Top

Automatisch Ordner löschen - nach Plattenplatz

Wie verhindere ich, daß mein Copyjob die Platte überlaufen lässt?

Hallo Allerseits,

ich sichere per xcopy (w2k3) auf täglich wechselnde USB-Platten:

xcopy d:\quellordner1 f:\%date%\zielordner1 /e /c /h /o /i > c:\backuplog\log1%date%.txt
xcopy d:\quellordner2 f:\%date%\zielordner2 /e /c /h /o /i > c:\backuplog\log2%date%.txt

D.h. auf der Platte gibt es nach dem Sicherungsdatum benannte Ordner, die das Backup enthalten.

Wie verhindere ich jetzt (möglichst einfach), daß die Platte überläuft? Ich möchte den ältesten Ordner automatisch löschen wenn entweder
a) ein bestimmter Wert an freiem Speicherplatz unterschritten wird
oder besser
b) der Platz nicht mehr für den Copyjob ausreicht, was natürlich heißt, daß das Script erst einmal ermitteln muss wieviel Platz den benötigt wird.


Ne Idee ?

Gruß
5

Content-ID: 192577

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

Ausgedruckt am: 15.11.2024 um 11:11 Uhr

ramses345
ramses345 10.10.2012 um 18:12:25 Uhr
Goto Top
Hi,

mir würde jetzt ein Powershell Script einfallen.

Dieses über den Taskplaner steuern.
Überprüfen des freien Platzes
ist Ergebniss < als 28 GB

dann lösche Ordner mit den ältesten Schreibzugriff.
danach wie gewohnt xcopy starten lassen

lg ramses
Lochkartenstanzer
Lochkartenstanzer 10.10.2012 um 18:46:39 Uhr
Goto Top
Zitat von @ramses345:
Überprüfen des freien Platzes
ist Ergebniss < als 28 GB

Da würde ich erst den Platzbedarf der Quelle berechnen und dann bei freier Platz kleiner 28GB oder Platzbedarf das löschen anstoßen.


dann lösche Ordner mit den ältesten Schreibzugriff.

Vorher aber nochmal überprüfen, ob man damit genug Platz gewonnen hat.

danach wie gewohnt xcopy starten lassen


lks

PS: Mit der bash würde das mit zuhilfenahme von du, df und einigen anderen Standardbefehlen mit wenigen Zeilen funktionieren.
pieh-ejdsch
pieh-ejdsch 10.10.2012, aktualisiert am 14.10.2012 um 15:51:16 Uhr
Goto Top
moin 5,

das geht doch Problemlos mit xcopy selbst:
Wenn der Platz wärend des Kopierens nicht reicht wird das alte entsorgt.
echo off
setlocal

set    "Quelle=d:\quellordner1"  
set      "Ziel=f:\%date%\zielordner1\"  
set       "Log=c:\backuplog\log1%date%.txt"  
set   "DelZiel=F:\"  
 rem wenn nur der Ordner vom Backupset 1 gelöscht werden soll 
 rem Nicht unbedingt empfohlen
:: set "DelOrdner=zielordner1\" 

call :Backup 1

set   "Quelle=d:\quellordner2"  
set     "Ziel=f:\%date%\zielordner2\"  
set      "Log=c:\backuplog\log2%date%.txt"  
 rem wenn nur der Ordner vom Backupset 2 gelöscht werden soll 
::set "DelOrdner=zielordner2\" 

call :Backup 2


pause
exit /b

:Backup
echo Starte Backup %1
:startBU
 rem Option /D muss aktiviert bleiben
(xcopy /E /c /h /o /i /D "%quelle%" "%ziel%" |find /i "%Quelle%" >>"%log%"  
) 2>&1 |findstr . >"%temp%\xcopyFehler.txt" && type "%temp%\xcopyFehler.txt" >>"%log%"^  
 &&find "Nicht gengend Speicherplatz auf dem Datentr„ger." <"%temp%\xcopyFehler.txt" && goto :dellast  

for /f %%i in ('find /i /c "%Quelle%" ^<"%log%" ' ) do (>>"%log%" echo %%i Datei^(en^) Kopiert  
 echo Backup %1 fertig! %%i Datei^(en^) Kopiert
)


exit /b

:dellast
echo Entferne aeltestes Backup ...
pushD "%DelZiel%" || 1>&2 echo Fehler beim entfernen! && pause &&exit /b 2  
for /f "tokens=1*delims=:" %%i in ('dir /ad /b /od ^|findstr /n .^|findstr /b 1: ') do (  
  rd /s /q "%%j\%DelOrdner%" >nul && echo "%%~fj\%DelOrdner%" wurde geloescht.  
  rem hier könnte noch der passende Log gelöscht werden
  rem del "c:\backuplog\log%1%%j.txt"  
) >>"%log%"  
popD
>>"%log%" echo setze Backup fort.  
goto :startBU

edit
Loggingfunktion für besseres Fehlerlogging angepasst.
Dateizähler eingefügt.
/edit

Gruß Phil
44275
44275 12.10.2012 um 17:00:40 Uhr
Goto Top
Sorry, daß ich mich jetzt erst melde, musste ein wenig kindergärtnern... Frag mich manchmal wie der durchschnittliche User alleine über die Straße kommt...

Phil, Vielen Dank für Deine Mühe! Hmmm... ich stecke in Powerscript nicht wirklich drin und hab noch Probleme den Code zu verstehen:
1.) Sehe ich das richtig, daß das Script zwar Platz schafft wenn die Platte voll ist, aber der xcopy trotzdem wegen des Fehlers abbricht?
2.) Löscht :dellast jetzt den ältesten Ordner oder den ältesten vom laufenden Prozeß erstellten?

Gruß
5
pieh-ejdsch
pieh-ejdsch 13.10.2012 aktualisiert um 13:47:01 Uhr
Goto Top
moin 5,

zu 1.
  1. Wenn xcopy abbricht weil der Platz nicht ausreicht, dann wird der Älteste Unter-Ordner, welcher bei DelZiel angegeben ist gelöscht (zb: F:\ältesterOrdnermitDatum wird in der Schleife ausgegeben).
  2. danach (goto :startBU) wird xcopy fortgesetzt. Deswegen die Option /D, damit nicht nochmal von vorn begonnen wird.
  3. Der batch macht solange bis das komplette Backup Fertig ist bzw. kein Speicherplatzfehler mehr auftaucht.

zu 2. ja den Ältesten Unterordner von DelZiel (also alle Sicherungen von diesem Datum) löscht es.
Optional ist das Backupset DelOrdner anzugeben, weil Du ja auch zwei Verschiedene Quellen hast (also zwei Sicherungen) dazu müssen die Doppelpunkte davor entfernt werden. Diese Extraoption empfehle ich daher nicht, weil es sein könnte es wird ständig nur ein Backupset entfernt. Dadurch bestehen zB. im einen Set 10 Sicherungen und im anderen nur 2 Sicherungen. Wenn sich diese zusatzOption bewärt kannst Du sie ja nutzen.

Gruß Phil
44275
44275 13.10.2012 um 15:04:29 Uhr
Goto Top
Moin Phil,


vielen Dank für Deine Unterstützung. Ich werde da die nächsten Tage mit rumspielen face-smile

Gruß
5