Tägliches Backup mit Bordmitteln und Skripten
Backupadmins und Windows und Kommandozeile haben es nicht leicht, vorallem wenn die Budgets klein sind.-> Gute Software ist sehr teuer oder doch nicht?
Ich habe in den tiefen des Internets viele viele Scripte ausprobiert, selbst Batchdatei mit Rsync, Cygwin, RoboCopy und Xcopy gemurkst. Diverseste downloadbare Exe Datein installiert und wieder deinsstalliert. Habe ich JETZT das Backupwerkzeug gefunden?
Ich glaube, daß ich zumindest MEINEN Favoriten gefunden habe... CSBackup
Bereits seit dem 25.08.2008 liegt das Schmuckstück bei Heise im Softwareverzeichnis und ich Dummlack ärgere mich mit meinen 2003 R2 und 2008 R2 Servern und deren Backups herum. Vielen Dank an dieser Stelle an Thomas Schmiereck
Ich habe täglich ca. 300 GB an Daten zu sichern. Dabei sind aber max. 25 GB wirklich verändert worden. Bisher konnten wir nur jeweils eine Version des Backups vorhalten. Versionierung oder gar ein Zurückgreifen auf Daten von vor einem Jahr war nicht möglich. Aus diesem Grund habe ich mich im Frühjahr 2010 auf die Suche nach einer besseren Backuplösung gemacht und bin bei den ersten Recherchen auf die sog. Hardlinks gestoßen. Diese waren mir aus der Linux Welt noch im ganz ganz weiten Sinne ein Begriff. Es ging um Inodes und sowas... Aber das ist ja für einen KlickiBuntiAdmin nicht wirklich das, was so richtig reizt.
Aber der Gedanke mit den Hardlinks ging mir nicht aus dem Kopf. Zwischenzeitlich habe ich mit VB herum experimentiert und dank TsikiSan habe ich auch tieferen Einblick in die VB-Programmierung bekommen.
Hardlinks auf Festplatten funktionieren folgendermaßen ->
und haben Datei folgende Vorteile ->
Mein Problem bestand bis Dato eigentlich aus der Problematik, daß alle Scripte, alle Programme die mit Hardlinks arbeiteten bei 256 Zeichen ausgestiegen sind. Wir kennen ja unsere Benutzer und stellen mit Freude fest, daß 256 Zeichen das kleinste Problem sind. Umlaute, ganze Sätze mit Satzzeichen oder ähnliches werden in Verzeichnisnamen genutzt. Dies ist bei mir, wie auch bei Euch nicht anders...
Weniger hatte ich das Problem, eine aktuelle VB bzw. .Net Umgebung auf die Maschinen zu bekommen. Wer allerdings keine .NET Umgebung auf den Servern hat, hat mit dieser Software natürlich auch verloren.... Sorry -> da musst Du jetzt weitersuchen...
Ich glaube, daß ich nun ein Script präsentieren kann, das Euch im Zusammenarbeit mit CSBackup helfen könnte, Eure Probleme beim täglichen Backupen in superkleinen Umgebungen mit wenig Geld zu optimieren. (Für Optimierungen am Code bin ich natürlich äußerst dankbar)
Das Script liegt bei mir im CSBackup Verzeichnis und wird per Schedule bzw. Aufgabenplaner einmal am Tag aufgerufen....
Weitere Informationen zum Thema Hardlinks bzw. Rsync hier im Heise Artikel
UPDATE 08.07.2012 +++++++++++++++++
Das ganze läuft bei mir jetzt seit einiger Zeit Problemlos.
Das ganze vll. nochmal als "kleine" Batchdatei, die etwas einfacher zu lesen ist?
Ich habe in den tiefen des Internets viele viele Scripte ausprobiert, selbst Batchdatei mit Rsync, Cygwin, RoboCopy und Xcopy gemurkst. Diverseste downloadbare Exe Datein installiert und wieder deinsstalliert. Habe ich JETZT das Backupwerkzeug gefunden?
Ich glaube, daß ich zumindest MEINEN Favoriten gefunden habe... CSBackup
Bereits seit dem 25.08.2008 liegt das Schmuckstück bei Heise im Softwareverzeichnis und ich Dummlack ärgere mich mit meinen 2003 R2 und 2008 R2 Servern und deren Backups herum. Vielen Dank an dieser Stelle an Thomas Schmiereck
Ich habe täglich ca. 300 GB an Daten zu sichern. Dabei sind aber max. 25 GB wirklich verändert worden. Bisher konnten wir nur jeweils eine Version des Backups vorhalten. Versionierung oder gar ein Zurückgreifen auf Daten von vor einem Jahr war nicht möglich. Aus diesem Grund habe ich mich im Frühjahr 2010 auf die Suche nach einer besseren Backuplösung gemacht und bin bei den ersten Recherchen auf die sog. Hardlinks gestoßen. Diese waren mir aus der Linux Welt noch im ganz ganz weiten Sinne ein Begriff. Es ging um Inodes und sowas... Aber das ist ja für einen KlickiBuntiAdmin nicht wirklich das, was so richtig reizt.
Aber der Gedanke mit den Hardlinks ging mir nicht aus dem Kopf. Zwischenzeitlich habe ich mit VB herum experimentiert und dank TsikiSan habe ich auch tieferen Einblick in die VB-Programmierung bekommen.
Hardlinks auf Festplatten funktionieren folgendermaßen ->
- Es wird ein zusätzlicher Eintrag in der Partitionstabelle auf eine Datei erstellt
- Hardlinks befinden sich immer innerhalb eines Dateisystems (Festplattenpartition)
und haben Datei folgende Vorteile ->
- Die Rechte sind für diese Links immer identisch
- Auf jede Art von Dateien können Hardlinks angelegt werden
- Erst wenn der letzte Hardlink auf eine Datei gelöscht wird, wird die Datei selbst gelöscht
Mein Problem bestand bis Dato eigentlich aus der Problematik, daß alle Scripte, alle Programme die mit Hardlinks arbeiteten bei 256 Zeichen ausgestiegen sind. Wir kennen ja unsere Benutzer und stellen mit Freude fest, daß 256 Zeichen das kleinste Problem sind. Umlaute, ganze Sätze mit Satzzeichen oder ähnliches werden in Verzeichnisnamen genutzt. Dies ist bei mir, wie auch bei Euch nicht anders...
Weniger hatte ich das Problem, eine aktuelle VB bzw. .Net Umgebung auf die Maschinen zu bekommen. Wer allerdings keine .NET Umgebung auf den Servern hat, hat mit dieser Software natürlich auch verloren.... Sorry -> da musst Du jetzt weitersuchen...
Ich glaube, daß ich nun ein Script präsentieren kann, das Euch im Zusammenarbeit mit CSBackup helfen könnte, Eure Probleme beim täglichen Backupen in superkleinen Umgebungen mit wenig Geld zu optimieren. (Für Optimierungen am Code bin ich natürlich äußerst dankbar)
' Backupscript moximo
' carsten.engelATmoximo.de
' Initialerstellung: 28.12.2010
' Nutzung von CSBackup basierend auf RSyncBackup Idee
' ------------------------------------------------------------------
' Dimensioniere Variablen
Dim objFileSystem, objOutputfile, Logbuch, PfadIniDatei
Dim ObjShell, objFSO, Fs
' Definieren der Variablen
Trennlinie = "--------------------------------------------------------------------"
Programmverzeichnis = "c:\csbackup"
Programmname = "csbackup.exe"
Batchdatei = "CSBackup-Start.bat"
IniDateiname = "config-vbs.xml"
PfadExeDatei = Programmverzeichnis & "\" & Programmname
PfadBatDatei = Programmverzeichnis & "\" & Batchdatei
PfadIniDatei = Programmverzeichnis & "\" & IniDateiname
Logbuch = Programmverzeichnis & "\vbs_csbackup_" & date()& "_log.txt"
Startdatum = date()
' Bei Pfadangaben sind KEINE Wildcards erlaubt.
Quelllaufwerk = "X"
QuellVerzeichnis = "\IT-Werkzeuge\Putty0"
Quellpfad = Quelllaufwerk&":"&Quellverzeichnis
Ziellaufwerk = "E"
ZielVerzeichnis = "\csbackup"
Zielpfad = Ziellaufwerk&":"&Zielverzeichnis
MinDiskSpace = 1 ' Angabe in GB (Wenn Dezimal -> 1.75)
' MinDiskSpace = 10000000000 ' 1000000000 entspricht 1GB
UmrechnungGB = 1073741824 ' entspricht einem GB
Debugmodus = "JA"
'Debugmodus = "NEIN"
' -----------------------------------------------------------------
' Ausgabe der Definitionen
if Debugmodus = "JA" Then Wscript.Echo "Programmverzeichnis: " & Programmverzeichnis & vbLf & Trennzeile &vbLf _
& "Pfad zur Exe: " & PfadExeDatei & vbLf & Trennzeile &vbLf _
& "Pfad zur Bat: " & PfadBatDatei & vbLf & Trennzeile &vbLf _
& "Pfad zur Ini: " & PfadIniDatei & vbLf & Trennzeile &vbLf _
& "Logverzeichnis: " & Logbuch & vbLf & Trennzeile &vbLf _
& "Minimaler Platz: " & MinDiskSpace & " GB" & vbLf & Trennzeile &vbLf
' Configdatei schreiben
ConfigInhalt = ""
ConfigInhalt = "<?xml version=""1.0"" encoding=""utf-8"" ?>"
ConfigInhalt = Configinhalt & VBCRLF & "<config>"
ConfigInhalt = Configinhalt & VBCRLF & "<backup>"
ConfigInhalt = Configinhalt & VBCRLF & "<source>"
ConfigInhalt = Configinhalt & VBCRLF & "<path>" & Quellpfad & "</path>"
ConfigInhalt = Configinhalt & VBCRLF & "</source>"
ConfigInhalt = Configinhalt & VBCRLF & "<targetPath>" & Zielpfad & "</targetPath>"
ConfigInhalt = Configinhalt & VBCRLF & "</backup>"
ConfigInhalt = Configinhalt & VBCRLF & "</config>"
if Debugmodus = "JA" Then Wscript.echo Configinhalt
' Bereite Dateien vor
Set objFileSystem = CreateObject ("Scripting.FileSystemObject")
' prüfen, ob Configdatei vorhanden
if (objFileSystem.FileExists(PfadIniDatei)) Then
set open_File = objFileSystem.OpenTextFile(PfadIniDatei,2)
open_File.Close()
else
set open_File = objFileSystem.CreateTextFile(PfadIniDatei,true)
open_File.Close()
End if
Set objIniFile = objFileSystem.OpenTextFile(PfadIniDatei,2)
objIniFile.Write (ConfigInhalt)
objIniFile.Close
' Logdateikopf schreiben
' prüfen, ob Logdatei vorhanden
if (objFileSystem.FileExists(Logbuch)) Then
set open_File = objFileSystem.OpenTextFile(Logbuch,8)
open_File.Close()
else
set open_File = objFileSystem.CreateTextFile(Logbuch,true)
open_File.Close()
End if
Set objLogFile = objFileSystem.OpenTextFile(Logbuch,8)
Logbuchkopf = Trennlinie & VbCrLF & "Dateisicherung vom: " & Date() & VbCrLF & Trennlinie & VbCrLF
Logbuchkopf = Logbuchkopf & VbCrLF & time & " Startparameter: " & PfadBatDatei & " " & PfadExeDatei & " " & PfadIniDatei & " " & Logbuch & VbCrLF & VbCrLF
objLogFile.Write (Logbuchkopf)
objLogFile.Close
' Start CSBackup mit der eingestellten XML ConfigDatei (PfadIniDatei)
set WshShell = Wscript.CreateObject("WScript.Shell")
WshShell.Run PfadBatDatei & " " & PfadExeDatei & " " & PfadIniDatei & " " & Logbuch,,true ' Starten der Anwendung und auf Rückmeldung warten -> True
Set WshShell = Nothing
Logbucheintrag = VbCrLF
' Prüfung, ob freier Speicherplatz ausreichend ist
'---------------50000000000 = 500 MB
'---------------10000000000 = 1 GB
'---------------1000000000000 = 100 GB
if Debugmodus = "JA" Then Wscript.echo "Prüfung HDD Platz"
Set objWMIService = GetObject("winmgmts:")
'set objLogicalDisk1 = objWMIService.Get("Win32_LogicalDisk.DeviceID='e:'")
Set objZielDisk = objWMIService.Get("Win32_LogicalDisk.DeviceID='"&Ziellaufwerk&":'")
Set objQuellDisk = objWMIService.Get("Win32_LogicalDisk.DeviceID='" & Quelllaufwerk & ":'")
' wenn zu wenig Platz auf Ziel
if (objZielDisk.FreeSpace/UmrechnungGB - MinDiskSpace < 0) then Speicherwarnung = "Kritisch -> Freier Speicherplatz: " & round(objZielDisk.FreeSpace/UmrechnungGB,2) & " GB"
' wenn Platz ausreicht
if (objZielDisk.FreeSpace/UmrechnungGB - MinDiskSpace > 0) then Speicherwarnung = "OK -> Freier Speicherplatz: " & round(objZielDisk.FreeSpace/UmrechnungGB,2) & " GB"
if Debugmodus = "JA" Then wscript.echo "Speicherwarnung: " & Speicherwarnung
Logbucheintrag = Logbucheintrag & VbCrLF & time () & " Status des Quelllfestplattenspeichers: " & round((objQuellDisk.Size-objQuellDisk.Freespace)/UmrechnungGB,2) & " GB benutzter Speicherplatz"
Logbucheintrag = Logbucheintrag & VbCrLF & time () & " Status des Zielfestplattenspeichers: " & Speicherwarnung
Logbucheintrag = Logbucheintrag & VbCrLF & time () & " Hinweis: Die Größe des Zielfestplattenspeichers sollte etwa " & round(((objQuellDisk.Size-objQuellDisk.Freespace)/UmrechnungGB/100*20),2) & " GB nicht unterschreiten."
' Verzeichnis umbenennen
' Für Debug -> Generiere Zufallszahl für Ordnername
Zufallszahl = Int(rnd - 87119)
Randomize
Ordnername = Int((10000 - 10 + 1) * Rnd + 10)
if Debugmodus = "JA" Then Wscript.echo "Zufallszahl für Ordner: " & Ordnername
set WshShell = Wscript.CreateObject("WScript.Shell")
if Debugmodus = "JA" Then WshShell.Run("%comspec% /c move " & Zielpfad & "\*_??~?? " & Zielpfad & "\" & date() & "_VBS_" & Ordnername),,true
WshShell.Run("%comspec% /c move " & Zielpfad & "\*_??~?? " & Zielpfad & "\" & Startdatum),,true
Logbucheintrag = Logbucheintrag & VbCrLF & time () & " Backupordner wurde umbenannt."
'Logdatei schreiben
if Debugmodus = "JA" Then Wscript.echo "Logdatei schreiben"
if Debugmodus = "JA" Then Wscript.echo Logbucheintrag
Logbucheintrag = Logbucheintrag & VbCrLF & time () & " Script beendet." & VbCrLF
'Set objFileSystem = CreateObject ("Scripting.FileSystemObject")
Set objLogFile = objFileSystem.OpenTextFile(Logbuch,8)
objLogFile.Write (Logbucheintrag)
objLogFile.Close
Set objFileSystem = Nothing
Das Script liegt bei mir im CSBackup Verzeichnis und wird per Schedule bzw. Aufgabenplaner einmal am Tag aufgerufen....
Weitere Informationen zum Thema Hardlinks bzw. Rsync hier im Heise Artikel
UPDATE 08.07.2012 +++++++++++++++++
Das ganze läuft bei mir jetzt seit einiger Zeit Problemlos.
Das ganze vll. nochmal als "kleine" Batchdatei, die etwas einfacher zu lesen ist?
rem @echo off
setlocal
:start
title RotationBackup
set batchpfad=c:\batch
set toolspfad=c:\batch\tools
set logbuch=c:\batch\logbuch\csbackup-Daten-%date%.txt
set trennzeile=+++++++++++++++++++++++++++++++++++++++++++++++++
set netzlaufwerk=yes
set CSBackuppfad=c:\batch\tools\CSBackup
set KonfigDatei=%appdata%\config.xml
rem ++++++++++++++++++++++++++
rem erste Backupaktion
rem ++++++++++++++++++++++++++
echo +++++++++++++++++++++++++++++++++++++++++++++++++
echo ++ START ++>>%logbuch%
echo ++ %time% ++>>%logbuch%
echo %trennzeile%>>%logbuch%
rem Backslash am Ende wenn keine UNC Pfade
set quelle=\\alderaan\freigabe
set ziel=\\alderaan\Freigabe\Backup\moximo
if not exist %quelle% mkdir %quelle%
if not exist %ziel% mkdir %ziel%
if %netzlaufwerk%==yes (
net use r: /d /yes
net use q: /d /yes
net use r: %quelle% /persistent:no
net use q: %ziel% /persistent:no
set quelle=r:\dokumente
set ziel=q:\dokumente
)
echo ^<?xml version^=^"1.0^" encoding^=^"utf-8^" ^?^>>%KonfigDatei%
echo ^<config^>>>%KonfigDatei%
echo ^<backup^>>>%KonfigDatei%
echo ^<source^>>>%KonfigDatei%
echo ^<path^>%quelle%^</path^>>>%KonfigDatei%
echo ^<^/source^>>>%KonfigDatei%
echo ^<targetPath^>%ziel%^<^/targetPath^>>>%KonfigDatei%
echo ^<^/backup^>>>%KonfigDatei%
echo ^<^/config^>>>%KonfigDatei%
%csbackuppfad%\csbackup.exe %konfigdatei% >>%logbuch%
rem +++++++++++++++++++++++++++
rem beenden und abschliessen
rem +++++++++++++++++++++++++++
echo %trennzeile%>>%logbuch%
echo +++++++++++++++++++++++++++++++++++++++++++++++++
echo ++ EOF ++>>%logbuch%
echo ++ %time% ++>>%logbuch%
echo %trennzeile%>>%logbuch%
:end
exit
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 157681
Url: https://administrator.de/contentid/157681
Ausgedruckt am: 22.11.2024 um 15:11 Uhr
4 Kommentare
Neuester Kommentar
Hey,
erstmal danke für die Tipps. Genau so etwas suche ich..
ich bin allerdings bei dem original script von heise stehen geblieben (http://www.heise.de/ct/ftp/06/09/126/) und das funktioniert an sich super... eines wundert mich jedoch:
ich habe ein verzeichnis mit einer datei (101MB) 2 mal gesichert. die datei wurde nciht verändert. nun wurden auch brav 2 backups erstellt .... sollte der platzbedarf dank harter links nun nicht nur 101 mb sein? ist er leider nicht... genau 202 werden belegt!
Denkfehler von mir? Kapiert Windows es nicht?
(Windows XP, Quelle und Ziel NTFS)
erstmal danke für die Tipps. Genau so etwas suche ich..
ich bin allerdings bei dem original script von heise stehen geblieben (http://www.heise.de/ct/ftp/06/09/126/) und das funktioniert an sich super... eines wundert mich jedoch:
ich habe ein verzeichnis mit einer datei (101MB) 2 mal gesichert. die datei wurde nciht verändert. nun wurden auch brav 2 backups erstellt .... sollte der platzbedarf dank harter links nun nicht nur 101 mb sein? ist er leider nicht... genau 202 werden belegt!
Denkfehler von mir? Kapiert Windows es nicht?
(Windows XP, Quelle und Ziel NTFS)