franc
Goto Top

Backupprogramm das auf FTP sichert und Archivbit verwendet

Hallo,

ich suche für Windows XP ein Backup Programm, das so wie das kostenlose Personal Backup unter Benutzung des Archivbits (mit Zurücksetzen) auf einen FTP-Server (adrive.com) sichern kann und die Dateien vorher verschlüsselt.
Es sollte kostenlos sein, kann aber ruhig was kosten, wenn es problemlos funktioniert.
Es kann auch eine Batchdatei sein, wenn das irgendwie geht.
Es muss über den Taskplaner (oder sonst einen Planer) täglich ausgeführt werden.

Also ich brauche:

-sichere Verschlüsselung
-FTP als Sicherungsziel
-Archivbit muss verwendet werden (wg. großer Mengen an zu sichernden Dateien, von denen sich nur wenige ändern, ein Datumsvergleich wäre schon zu lange)
-per Taskplaner automatisch zu starten

Gibt es sowas?
Personal Backup verwende ich nun schon lange, aber beim FTP-Einsatz versagt es immer wieder, dann wird nur teilweise oder gar nichts gesichert.

Gruß, franc

Content-Key: 169495

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

Printed on: May 22, 2024 at 01:05 o'clock

Member: Friemler
Friemler Jul 11, 2011 at 15:17:14 (UTC)
Goto Top
Hallo franc,

per Batch könnte das so gehen:
@echo off & setlocal


set "SrcDir=E:\Test"  
set "EncryptedFilesDir=%Temp%\Encrypted"  
set "FilePwd=Geheim"  

set "FTPServer=ftp.DerServer.de"  
set "FTPDir=/Sicherung"  
set "FTPUser=anonymous"  
set "FTPPwd=anonymous@example.com"  


set "StartDir=%~dp0"  
md "%EncryptedFilesDir%" 2>NUL  
pushd "%SrcDir%"  

for /f "delims=" %%f in ('xcopy /al *.* dummy ^| find /v "Datei(en) kopiert"') do (  
  "%StartDir%7za.exe" a -tzip "%EncryptedFilesDir%\%%~nf.zip" "%%~nxf" -mx9 -mem=AES256 -p%FilePwd% > NUL  
  attrib -a "%%~nxf"  
)

popd

if not exist "%EncryptedFilesDir%\*.zip" rd "%EncryptedFilesDir%" & exit /b  

set "FTPScript=%Temp%\FTPScript.txt"  

> "%FTPScript%" echo open %FTPServer%  
>>"%FTPScript%" echo user %FTPUser% %FTPPwd%  
>>"%FTPScript%" echo binary  
>>"%FTPScript%" echo cd "%FTPDir%"  
>>"%FTPScript%" echo lcd "%EncryptedFilesDir%"  
>>"%FTPScript%" echo mput *.*  
>>"%FTPScript%" echo bye  

ftp -n -i -s:"%FTPScript%"  

del "%FTPScript%"  
rd /s /q "%EncryptedFilesDir%"  

Die Variablen in den Zeilen 4 bis 11 musst Du auf Deine Bedürfnisse anpassen.

Zum Verschlüsseln der Dateien wird die Konsolenversion von 7-Zip verwendet, erhältlich hier (die 7-Zip Command Line Version laden). 7za.exe muss im gleichen Verzeichnis wie das obige Script gespeichert werden.

Der XCOPY-Befehl in Zeile 18 ermittelt alle Dateien im Quellverzeichnis, deren Archivbit gesetzt ist. Er kopiert jedoch nicht, sondern listet die Dateien nur auf. Es werden dabei nur die Dateien in dem angegebenen Verzeichnis berücksichtigt, Dateien in evtl. vorhandenen Unterverzeichnissen nicht. Auch versteckte bzw. System-Dateien werden nicht berücksichtigt. Dazu müsste man statt /al die Optionen /ahl an XCOPY übergeben.

In Zeile 19 wird dann jede Datei einzeln mit 7-Zip in ein passwortgeschütztes ZIP-Archiv mit AES256-Verschlüsselung und maximaler Kompression gepackt. Alle Ausgabedateien landen im in Zeile 15 temporär angelegten Verzeichnis, das durch die Variable EncryptedFilesDir aus Zeile 5 angegeben wurde. Durch den Verzeichniswechsel in das Verzeichnis der Quelldateien in Zeile 16 enthalten die ZIP-Dateien keine Verzeichnisstruktur.

In Zeile 20 wird nach dem Verschlüsseln/Komprimieren das Archivattribut jeder verarbeiteten Datei gelöscht.

Wenn die Prüfung in Zeile 25 ergibt, dass keine ZIP-Dateien erstellt wurden, wird das temporäre Verzeichnis wieder gelöscht und das Script beendet.

Ansonsten wird ab Zeile 29 ein temporäres FTP-Script erzeugt, das wegen dem MPUT-Befehl alle Dateien aus dem Verzeichnis, in dem die verschlüsselten ZIP-Dateien gespeichert wurden, auf den FTP-Server in das angegebene Verzeichnis lädt. Dieses FTP-Script wird in Zeile 37 ausgeführt.

Zum Schluss wird das FTP-Script und das temporäre Verzeichnis mit den verschlüsselten ZIP-Dateien gelöscht.

Was Dir jetzt noch zu tun bleibt, ist für die Absicherung des FTP-Transfers zu sorgen, indem Du die Meldungen des FTP-Servers auswertest und darin nach Fehlern suchst. Das könntest Du z.B. dadurch bewerkstelligen, indem Du die Ausgaben des FTP-Befehls in eine Datei umleitest und diese Datei nach dem Transfer auf Fehlermeldungen bzw. auf positive Rückmeldungen untersuchst (je nach dem was einfacher ist) und bei Abweichungen vom erwarteten Ergebnis entsprechend reagierst (Log-Datei schreiben oder z.B. mit BLAT eine EMail verschicken oder Archivattribut der betroffenen Datei wieder setzen o.ä.).

Gruß
Friemler
Member: franc
franc Jul 11, 2011 at 19:13:24 (UTC)
Goto Top
Vielen Dank für dieses Skript. Das schaut ja schon mal gut aus!
So wie ich das verstehe müsste ich noch etwas rumbasteln, damit auch alle Unterverzeichnisse gesichert werden:


Zitat von @Friemler:
Es werden dabei nur die Dateien in dem angegebenen Verzeichnis berücksichtigt, Dateien in
evtl. vorhandenen Unterverzeichnissen nicht.

Ich habe nämlich sehr viele Verzeichnisse und Unterverzeichnisse...
Member: Friemler
Friemler Jul 11, 2011 at 20:13:45 (UTC)
Goto Top
Hallo franc,

in dem Fall wird es kompliziert. Du müsstest ja dann die Verzeichnisstruktur der Quelldateien im Verzeichnis für die gezippten Dateien abbilden oder nur ein großes ZIP-File erzeugen, was eine Verzeichnisstruktur mit den herausgefilterten Dateien enthält (das wäre relativ einfach).

Der FTP-Befehl MPUT kann außerdem keine kompletten Verzeichnisbäume auf den FTP-Server hochladen, nur alle Dateien aus einem Verzeichnis. Wenn Du vorher ein großes ZIP-File erzeugst, wäre das kein Problem und Du könntest statt MPUT einfach PUT verwenden. Wenn Du viele einzelne ZIP-Files in einer Kopie der originalen Verzeichnisstruktur hochladen willst, wird es auch hier kompliziert.

Für den einfachen Fall habe ich diesen Vorschlag:
@echo off & setlocal


set "SrcDir=E:\Test"  
set "DestFile=%Temp%\Backup.zip"  
set "FilePwd=Geheim"  

set "FTPServer=ftp.DerServer.de"  
set "FTPDir=/Sicherung"  
set "FTPUser=anonymous"  
set "FTPPwd=anonymous@example.com"  


set "StartDir=%~dp0"  
set "ListFile=%Temp%\7ZListFile.txt"  
set "FTPScript=%Temp%\FTPScript.txt"  

del "%ListFile%" 2>NUL  
pushd "%SrcDir%"  

for /f "tokens=1* delims=:" %%e in ('xcopy /alsi "*.*" "%Temp%\dummy" ^| findstr /v "^[0-9]"') do (  
  >>"%ListFile%" echo %%f  
  attrib -a "%%f"  
)

if not exist "%ListFile%" exit /b  

"%StartDir%7za.exe" a -tzip "%DestFile%" @"%ListFile%" -scsDOS -mx9 -mem=AES256 -p%FilePwd%  
popd

> "%FTPScript%" echo open %FTPServer%  
>>"%FTPScript%" echo user %FTPUser% %FTPPwd%  
>>"%FTPScript%" echo binary  
>>"%FTPScript%" echo cd "%FTPDir%"  
>>"%FTPScript%" echo put "%DestFile%"  
>>"%FTPScript%" echo bye  

ftp -n -s:"%FTPScript%"  

del "%FTPScript%"  
del "%ListFile%"  
del "%DestFile%"  

Die Namen der zu verarbeitenden Dateien werden inkl. relativem Pfad zum Quellverzeichnis in eine Datei geschrieben, die von 7Za.exe eingelesen wird. Aus den Dateien wird ein ZIP-File erzeugt und mit PUT auf den FTP-Server hochgeladen.

Gruß
Friemler