Datensicherung mit Robocopy - Automatische Löschung von Alt-Backups gegen Speicherplatzmangel
Hallo Leute
Kann mir bitte jemand weiterhelfen?
ich sichere meine Daten schön nach Datum sortiert auf zwei USB-Festplatten.
Ich verwende zwei Platten weil ich eine Platte immer an einen anderen Ort aufbewahren möchte (Stichworte: Diebstahl, Brandfall, Blitzeinschlag, Wasserschaden ...)
Ich habe bereits vor längerer Zeit eine Batch zusammengebastelt, aber diese funktioniert mittlerweile nicht mehr zuverlässig weil die Datenmenge ständig zunimmt.
Provisorisch hatte ich bereits eine Löschung von Altverzeichnissen erstellt aber diese berücksichtigt nicht den Speicherplatz!
Auf den USB-Festplatten werden die Daten aus der Quelle immer komplett in einen neuen Ordner im Format: 2015-04-24 gepackt
Ich suche eine Lösung die automatisch überprüft ob auf der Backup-Platte aktuell genug Platz vorhanden ist. Wenn der Platz nicht reicht soll das älteste Verzeichnis automatisch gelöscht werden und nochmals geprüft werden. Bis der Speicherplatz endlich für's Backup reicht...
Leider hab ich nicht genug Erfahrung um so eine Lösung zu realisieren.
Hier meine provisiorisch gebastelte Batch-Datei.
1.Block: Datum ermitteln und umschreiben nach JJJJ-MM-TT sowie provisorische Lösch-Tage/Monate setzen
2.Block: Altdaten löschen nach in Block 1 gesetzten Vorgaben
3.Block: Datensicherung mit Robocopy
_________________________________________
echo off
setlocal
set "datum=%date:~-4%-%date:~-7,2%-%date:~-10,2%"
set "monat=%date:~-7,2%"
set "delj=%date:~-4%"
IF "%monat%"=="01" set "delm=12"
IF "%monat%"=="01" set "delj=2016"
IF "%monat%"=="02" set "delm=01"
IF "%monat%"=="03" set "delm=02"
IF "%monat%"=="04" set "delm=03"
IF "%monat%"=="05" set "delm=04"
IF "%monat%"=="06" set "delm=05"
IF "%monat%"=="07" set "delm=06"
IF "%monat%"=="08" set "delm=07"
IF "%monat%"=="09" set "delm=08"
IF "%monat%"=="10" set "delm=09"
IF "%monat%"=="11" set "delm=10"
IF "%monat%"=="12" set "delm=11"
set "tag=%date:~-10,2%"
IF "%tag%"=="01" set "delt=0"
IF "%tag%"=="02" set "delt=0"
IF "%tag%"=="03" set "delt=0"
IF "%tag%"=="04" set "delt=0"
IF "%tag%"=="05" set "delt=0"
IF "%tag%"=="06" set "delt=0"
IF "%tag%"=="07" set "delt=0"
IF "%tag%"=="08" set "delt=0"
IF "%tag%"=="09" set "delt=0"
IF "%tag%"=="10" set "delt=0"
IF "%tag%"=="11" set "delt=1"
IF "%tag%"=="12" set "delt=1"
IF "%tag%"=="13" set "delt=1"
IF "%tag%"=="14" set "delt=1"
IF "%tag%"=="15" set "delt=1"
IF "%tag%"=="16" set "delt=1"
IF "%tag%"=="17" set "delt=1"
IF "%tag%"=="18" set "delt=1"
IF "%tag%"=="19" set "delt=1"
IF "%tag%"=="20" set "delt=2"
IF "%tag%"=="21" set "delt=2"
IF "%tag%"=="22" set "delt=2"
IF "%tag%"=="23" set "delt=2"
IF "%tag%"=="24" set "delt=2"
IF "%tag%"=="25" set "delt=2"
IF "%tag%"=="26" set "delt=2"
IF "%tag%"=="27" set "delt=2"
IF "%tag%"=="28" set "delt=3"
IF "%tag%"=="29" set "delt=3"
IF "%tag%"=="30" set "delt=3"
IF "%tag%"=="31" set "delt=3"
set "erase=%delj%-%delm%-%delt%"
Setlocal EnableDelayedExpansion
FOR /F %%i in ('dir /b "Z:\Datensicherung\%erase%*"') do (
set Name=%%i && del Z:\Datensicherung\!Name! /F /S /Q && RMDIR Z:\Datensicherung\!Name! /S /Q
)
set quelle=D:\SERVER\DATEN
md Z:\Datensicherung
set ziel=Z:\Datensicherung\%datum%
robocopy.exe "%quelle%" "%ziel%" /XJ /MIR /MT:8 >> "Z:\Datensicherung\Sicherung %datum%.txt"
Kann mir bitte jemand weiterhelfen?
ich sichere meine Daten schön nach Datum sortiert auf zwei USB-Festplatten.
Ich verwende zwei Platten weil ich eine Platte immer an einen anderen Ort aufbewahren möchte (Stichworte: Diebstahl, Brandfall, Blitzeinschlag, Wasserschaden ...)
Ich habe bereits vor längerer Zeit eine Batch zusammengebastelt, aber diese funktioniert mittlerweile nicht mehr zuverlässig weil die Datenmenge ständig zunimmt.
Provisorisch hatte ich bereits eine Löschung von Altverzeichnissen erstellt aber diese berücksichtigt nicht den Speicherplatz!
Auf den USB-Festplatten werden die Daten aus der Quelle immer komplett in einen neuen Ordner im Format: 2015-04-24 gepackt
Ich suche eine Lösung die automatisch überprüft ob auf der Backup-Platte aktuell genug Platz vorhanden ist. Wenn der Platz nicht reicht soll das älteste Verzeichnis automatisch gelöscht werden und nochmals geprüft werden. Bis der Speicherplatz endlich für's Backup reicht...
Leider hab ich nicht genug Erfahrung um so eine Lösung zu realisieren.
Hier meine provisiorisch gebastelte Batch-Datei.
1.Block: Datum ermitteln und umschreiben nach JJJJ-MM-TT sowie provisorische Lösch-Tage/Monate setzen
2.Block: Altdaten löschen nach in Block 1 gesetzten Vorgaben
3.Block: Datensicherung mit Robocopy
_________________________________________
echo off
setlocal
set "datum=%date:~-4%-%date:~-7,2%-%date:~-10,2%"
set "monat=%date:~-7,2%"
set "delj=%date:~-4%"
IF "%monat%"=="01" set "delm=12"
IF "%monat%"=="01" set "delj=2016"
IF "%monat%"=="02" set "delm=01"
IF "%monat%"=="03" set "delm=02"
IF "%monat%"=="04" set "delm=03"
IF "%monat%"=="05" set "delm=04"
IF "%monat%"=="06" set "delm=05"
IF "%monat%"=="07" set "delm=06"
IF "%monat%"=="08" set "delm=07"
IF "%monat%"=="09" set "delm=08"
IF "%monat%"=="10" set "delm=09"
IF "%monat%"=="11" set "delm=10"
IF "%monat%"=="12" set "delm=11"
set "tag=%date:~-10,2%"
IF "%tag%"=="01" set "delt=0"
IF "%tag%"=="02" set "delt=0"
IF "%tag%"=="03" set "delt=0"
IF "%tag%"=="04" set "delt=0"
IF "%tag%"=="05" set "delt=0"
IF "%tag%"=="06" set "delt=0"
IF "%tag%"=="07" set "delt=0"
IF "%tag%"=="08" set "delt=0"
IF "%tag%"=="09" set "delt=0"
IF "%tag%"=="10" set "delt=0"
IF "%tag%"=="11" set "delt=1"
IF "%tag%"=="12" set "delt=1"
IF "%tag%"=="13" set "delt=1"
IF "%tag%"=="14" set "delt=1"
IF "%tag%"=="15" set "delt=1"
IF "%tag%"=="16" set "delt=1"
IF "%tag%"=="17" set "delt=1"
IF "%tag%"=="18" set "delt=1"
IF "%tag%"=="19" set "delt=1"
IF "%tag%"=="20" set "delt=2"
IF "%tag%"=="21" set "delt=2"
IF "%tag%"=="22" set "delt=2"
IF "%tag%"=="23" set "delt=2"
IF "%tag%"=="24" set "delt=2"
IF "%tag%"=="25" set "delt=2"
IF "%tag%"=="26" set "delt=2"
IF "%tag%"=="27" set "delt=2"
IF "%tag%"=="28" set "delt=3"
IF "%tag%"=="29" set "delt=3"
IF "%tag%"=="30" set "delt=3"
IF "%tag%"=="31" set "delt=3"
set "erase=%delj%-%delm%-%delt%"
Setlocal EnableDelayedExpansion
FOR /F %%i in ('dir /b "Z:\Datensicherung\%erase%*"') do (
set Name=%%i && del Z:\Datensicherung\!Name! /F /S /Q && RMDIR Z:\Datensicherung\!Name! /S /Q
)
set quelle=D:\SERVER\DATEN
md Z:\Datensicherung
set ziel=Z:\Datensicherung\%datum%
robocopy.exe "%quelle%" "%ziel%" /XJ /MIR /MT:8 >> "Z:\Datensicherung\Sicherung %datum%.txt"
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 270770
Url: https://administrator.de/contentid/270770
Ausgedruckt am: 22.11.2024 um 18:11 Uhr
11 Kommentare
Neuester Kommentar
evtl währe ja rsnapshot was für dich.
da kannst du Einstellen wieviele Backups max gemacht werden soll.
Und es Dupliziert beim Backup die Daten per "Symlink" somit verbraucht das Backup weniger Speicherplatz da die selben Daten in allen Ordner vorhanden sind....
Zudem währe ein Raspberry als Backup Server zu überlegen wo du nur Lesezugriff auf die Shares hast und sich das System per SMB die Daten sichert.
So hast du noch den vorteil das wenn dein PC ein Virus ect hat die Backupfiles nicht geändert werden können (Verschlüsselt/Gelöscht).
da kannst du Einstellen wieviele Backups max gemacht werden soll.
Und es Dupliziert beim Backup die Daten per "Symlink" somit verbraucht das Backup weniger Speicherplatz da die selben Daten in allen Ordner vorhanden sind....
Zudem währe ein Raspberry als Backup Server zu überlegen wo du nur Lesezugriff auf die Shares hast und sich das System per SMB die Daten sichert.
So hast du noch den vorteil das wenn dein PC ein Virus ect hat die Backupfiles nicht geändert werden können (Verschlüsselt/Gelöscht).
Powershell my friend ...
(hier nur fürs cleanup)
Gruß jodel32
p.s. rsync gibt auch für Windows
(hier nur fürs cleanup)
$quelle = 'D:\Server\Daten'
$ziel = 'Z:\Datensicherung'
$drive = $ziel.Substring(0,2)
$sizeSource = (gci $quelle -recurse | measure Length -Sum).Sum / 1MB
while (((gwmi "Win32_LogicalDisk" -Filter "DeviceID='$drive'").FreeSpace / 1MB) -lt $sizeSource){
gci $ziel | ?{$_.PSIsContainer} | sort CreationDate -Desc | select -First 1 | remove-item -Recurse -Force
}
p.s. rsync gibt auch für Windows
Moin.
Anyway, um Platz zu sparen könntest du deine Daten auch einfach komprimieren, z.B. mit 7Zip - das spart mit Einstellung "Ultra" und abhängig von den zu komprimierenden Daten bis zu 90% Speicherplatz, kostet dafür aber Rechenzeit und benötigt mehr Zeit.
Dann fällt mir noch DelAge32 ein:
http://www.horstmuc.de/wbat32d.htm
Cheers,
jsysde
Zitat von @SIGNUM21:
3. Die Anzahl der Backups möchte ich nicht festlegen. Weil die USB-Festplatten sollen evtl. ergänzt oder durch
größere getauscht werden können.
Es sollen auf jeder USB-Festplatte immer so viele Sicherungen wie möglich untergebracht werden.
Das widerspricht aber dem Löschvorgang....3. Die Anzahl der Backups möchte ich nicht festlegen. Weil die USB-Festplatten sollen evtl. ergänzt oder durch
größere getauscht werden können.
Es sollen auf jeder USB-Festplatte immer so viele Sicherungen wie möglich untergebracht werden.
Anyway, um Platz zu sparen könntest du deine Daten auch einfach komprimieren, z.B. mit 7Zip - das spart mit Einstellung "Ultra" und abhängig von den zu komprimierenden Daten bis zu 90% Speicherplatz, kostet dafür aber Rechenzeit und benötigt mehr Zeit.
Dann fällt mir noch DelAge32 ein:
http://www.horstmuc.de/wbat32d.htm
Cheers,
jsysde
Muss ich mich jetzt wirklich mühselig da rein arbeiten???
Warum, zwei Pfade anpassen kann wohl jeder, der Rest bleibt so ... musst du aber selber wissen, aber wer sich hier nur was zusammenstellen lassen will und nichts dabei lernen will ist hier IMHO fehl am Platze. Das Leben besteht nun mal aus lebenslangem Lernen ...Werde mich wahrscheinlich nie mehr damit beschäftigen müssen, wenn ich die Backup-Batch einmal fertig hätte.
Und beim ersten Fehler gleich wieder hier antanzen, das kennen wir nur zu gut ;-PWie man Powershell-Scripte ausführt erklärt @colinardo hier ganz gut:
Ein Script auf einem oder mehreren, entfernten Rechnern ausführen - Wie kann ich es umsetzen ?
Gängiges Problem, die Leute legen einfach zu tiefe Pfade an. Das muss man erst fixen... Deswegen ist dein Batch-Script vermutlich auch gescheitert. Und für die exakte Berechnung der Backup-Größe muss das Script natürlich auf alle Pfade zugreifen dürfen (Account unter dem das Script läuft am besten mit System-Account)
Moin, ist schon ähnlich
Automatisch Ordner löschen - nach Plattenplatz
Sollte mit RC auch umsetzbar sein.
Gruß Phil
Automatisch Ordner löschen - nach Plattenplatz
Sollte mit RC auch umsetzbar sein.
Gruß Phil