Backup Tool für Dateien bei Änderung

Hallo,

ich suche seit einiger Zeit ein Backup Tool welches Dateien vor Änderungen (lösche, ändern etc.) noch einmal extra Sichert. Dabei sollte die Datei immer wieder komplett neu gesichert werden und nicht einfach nur überschrieben. Sprich, wenn ich eine Datei ändere wird vorher ein Backup davon in z.B. Ordner „DATEINAME-DATUM-ZEIT“ erstellt und wenn ich die Datei dann noch einmal ändere und abspeichere wird ein neues Backup gemacht bevor die Datei letzten Endes gespeichert/geändert wird.

Die Dateien liegen alle in einer Freigabe auf einem Server mit Windows Server 2003 Betriebssystem. Die einzelnen Arbeitsplätze sind alle in einer Domäne die vom Server verwaltet wird und greifen dann über Netzlaufwerk auf die Dateien zu. Folglich wäre es auch sinnvoll das Backup Tool auf dem Server zu installieren.

Der Clou (aber kein muss) wäre noch, wenn man in dem Backup Tool einstellen könnte das er nur auf Änderungen von einzeln auszuwählenden Arbeitsplätzen reagieren soll und die Dateien dann entsprechend sichert. Wir haben hier in der Firma nämlich immer mal ein paar Praktikanten oder Neuzugänge welche ab und zu Dateien versehentlich löschen oder verändern und das wird meist erst Monate später bemerkt und unser eigentliches Backup (über Bandsicherung) hält nur 14 Tage vor.

Ich habe es schon mit robocopy versucht aber das überschreibt das Backup jedes mal wieder bzw. reagiert nicht direkt auf Änderungen sondern sichert nur nach einer speziell vorgegebenen Zeit.

Für Tipps wie bzw. mit welchem Tool oder Script man so etwas realisieren kann wäre ich sehr dankbar.

Freundliche Grüße,
Andy

Hallo!

Sorry, aber da kann ich nicht helfen… :frowning:

hallo,

ich hab grad nicht soviel zeit, aber ich schaue die tage mal. hatte da mal eines, aber eine desktoplösung. server k.a. könnte aber mal schauen.

Hallo,

ich suche seit einiger Zeit ein Backup Tool welches Dateien
vor Änderungen (lösche, ändern etc.) noch einmal extra
Sichert. Dabei sollte die Datei immer wieder komplett neu
gesichert werden und nicht einfach nur überschrieben. Sprich,
wenn ich eine Datei ändere wird vorher ein Backup davon in
z.B. Ordner „DATEINAME-DATUM-ZEIT“ erstellt und wenn ich die
Datei dann noch einmal ändere und abspeichere wird ein neues
Backup gemacht bevor die Datei letzten Endes
gespeichert/geändert wird.

Ich denke, du suchst ein Backup-Tool mit einer Art Versionsverwaltung. So etwas wie Subversion oder CVS, nur eben zum Zweck des Backups.

Zusätzlich müsste das Tool auch noch eine Dateisystem-Monitoring-Funktion beherrschen.

Die Frage ist nun, welche Art Software für dich hierfür in Frage kommt. Nach kurzem Überlegen fallen mir hierzu folgende Möglichkeiten ein:

  1. Fertige Backup-Software: Klicki-Bunti, zumeist kostenpflichtig, Anpassungsfähigkeit an deine individuellen Bedürfnisse nicht unbedingt gegeben.
  2. Selber ein Skript schreiben: Anfangs aufwendiger, kostenlos, sehr flexibel.

Zur Möglichkeit 1:
Nach kurzer Google-Suche bin ich auf folgendes Tool gestoßen. http://www.codessentials.com/products/yadisbackup.html
Scheint ganz passabel zu sein. Jedoch wäre mir persönlich ein professioneller wirkendes Tool oder noch besser eine Open Source-Lösung lieber.

Zur Möglichkeit 2:
Da dich ja auch mit robocopy beschäftigt hast, ist anzunehmen, dass du dich auch nicht unbedingt vor ein bisschen Kommandozeile und skripten abschrecken lässt. Folgenden Code-Schnipsel, der Änderungen am Dateisystem mittels Windows PowerShell registriert, habe ich gefunden: http://blog.figmentengine.com/2010/06/powershell-to-… und passend dazu hier http://msdn.microsoft.com/de-de/library/bb979388.aspx

BTW: Zu robocopy noch ein Hinweis:

Ich habe es schon mit robocopy versucht aber das überschreibt
das Backup jedes mal wieder bzw. reagiert nicht direkt auf
Änderungen sondern sichert nur nach einer speziell
vorgegebenen Zeit.

robocopy kann mittels der Option /MON:n (im Gegensatz zu /MOT:m) dazu veranlasst werden nach n Änderungen am Dateisystem, einen neuen Durchlauf zu starten. In deinem Fall wäre /MON:1 der zu wählende Wert. Jedoch glaube ich nicht, dass robocopy für diesen Zweck optimiert ist und bei vielen Änderung pro Zeiteinheit Performanceeinbrüche festzustellen sein werden.

Zu deinem Wunschfeature:

Der Clou (aber kein muss) wäre noch, wenn man in dem Backup :Tool einstellen könnte das er nur auf Änderungen von einzeln :auszuwählenden Arbeitsplätzen reagieren soll und die Dateien :dann entsprechend sichert.

IMHO wäre das nur mit der selbst gebastelten PowerShell-Lösung möglich und selbst da wird es schwierig, denn auf Dateisystem-Ebene bemerkt Windows nur, dass eine Operation am Dateisystem durch einen bestimmten Benutzer durchgeführt wird. Man müsste dann versuchen herauszufinden, ob der Benutzer lokal oder über das Netzwerk angemeldet ist und falls er über das Netzwerk angemeldet ist, müsste man dann herausfinden von wo er kommt.

Es wäre bestimmt möglich dieses Wunschfeature mittels .NET oder PowerShell zu implementieren, jedoch nicht gerade trivial.

Noch etwas Grundsätzliches zu deinem Problem. Du hast erwähnt, dass man durch dieses Backup in der Lage sein soll Dateien oder Versionen von Dateien wiederherzustellen, die schon vor längerer Zeit gelöscht wurden.

Wir haben hier in der Firma :nämlich immer mal ein paar :stuck_out_tongue:raktikanten oder Neuzugänge :welche ab und zu Dateien :versehentlich löschen oder verändern :und das wird meist erst :Monate später bemerkt und unser :eigentliches Backup (über :Bandsicherung) hält nur 14 Tage vor.

Ich weiß nicht, wie stark auf der Freigabe, die du zu sichern gedenkst gearbeitet wird, aber bedenke, dass, wenn dort häufiger Änderungen stattfinden, die zu sichernden Datenmengen schnell ins Unermessliche steigen können. Denn wenn Nutzer beispielsweise Word-Dokumente auf dieser Freigabe bearbeiten und mehrmals beim Arbeiten speichern, wird jedes Mal eine neue Version gesichert. Eine Kompression der Daten ist auf jeden Fall empfehlenswert und selbst dann können es knapp werden.

Liebe Grüße
shreyder

Hallo Andy,

zuerst einmal Danke, für die ausführliche Schilderung Deiner Frage / Problemstellung.

Zuerst einmal muss ich Dich aber enttäuschen. Ein Tool / Programm, dass die Sicherungen wie von Dir gewünscht ausführt, kenne ich leider nicht. Im Serverbereich gibt es die Option „Shadowcopy“, bei der es möglich ist, dem Server mitzugeben, dass er festhält, wann Dateien verändert werden und diese ähnlich einem Snapshot dann zu einem bestimmten Zeitpunkt wieder hergestellt werden können. Da das aber sehr viel Plattenplatz erfordert, wird der Vorgang, wenn überhaupt, nur begrenzt möglich sein, da der Speicher nach einem parametriertem Zeitraum wieder freigegeben werden muss und erneut überschrieben wird (sonst würde man zuviel Plattenplatz benötigen!!)!

Aber es gibt einen anderen Lösungsansatz, der zum einem nicht soviel kostet und zum anderen auch aus Gründen der Datensicherheit so angewandt werden sollte!
Hierbei werden alle Daten am Wochenende komplett gesichert, und in der Woche inkrementell (nur die veränderten!).
Im Geamtkonzept sieht das ganze dann so aus:
10 Bänder für die tägliche Sicherung (inkrementell)
4 Bänder für die wöchentl. Sicherung (Vollbackup)
12 Bänder für die monatl. Sicherung (Vollbackup)

Je nach Sicherheitsempfinden werden dann Bänder von den Monatssicherungen ausgetauscht und sicher verschlossen verstaut (staubfrei, in einem dafür vorgesehenen Schrank o. ä.!!). In vielen Unternehmen wird außerdem auch noch eine Sicherung auf Platte (Storage) für einen gewissen Zeitraum festgehalten, um an kurzfristige Sicherungen schneller heranzukommen (die Rücksicherung von Platte ist wesentlich schneller als vom Band!). Z. B. die Vollsicherung wird dort dann zuerst auf Platte und erst später auf Band geschrieben. Das bedeuted auch weniger Last für die zu sichernden Systeme.
Aber das ist natürlich auch alles eine Frage des Geldes. Wenn Du da was absolut günstiges für den kleinen Rahmen (bzw. für das schmale IT-Budget) suchst. dann google doch mal nach dem Produkt „Folderclone“. Das ist zwar nicht ganz dass, was Du suchst, aber vielleicht kommst Du damit dann weiter…

Viel Erfolg und weiterhin viel Spass

R. Brinkhaus, MvB-Consulting GmbH

Hallo shreyder,

danke erst einmal für deine ausführliche Antwort!

Ich denke, du suchst ein Backup-Tool mit einer Art
Versionsverwaltung. So etwas wie Subversion oder CVS, nur eben
zum Zweck des Backups.

Im Grunde ist das ein recht guter Vergleich. Ähnlich wie es Tools zur Versionsverwaltung machen suche ich ein Backup-Tool für normale Dateien. Allerdings sollte dieses Tool/Script ebenfalls kostenlos oder besser OpenSource sein, ganz wie die CVS.

Zur Möglichkeit 1:
Nach kurzer Google-Suche bin ich auf folgendes Tool gestoßen.
http://www.codessentials.com/products/yadisbackup.html
Scheint ganz passabel zu sein. Jedoch wäre mir persönlich ein
professioneller wirkendes Tool oder noch besser eine Open
Source-Lösung lieber.

Das Tool sieht schon nicht schlecht aus und ich werde es mir auf jeden Fall noch genauer angucken aber eine OpenSouce Lösung wäre mir natürlich auch lieber!

robocopy kann mittels der Option /MON:n (im Gegensatz zu
/MOT:m) dazu veranlasst werden nach n Änderungen am
Dateisystem, einen neuen Durchlauf zu starten. In deinem Fall
wäre /MON:1 der zu wählende Wert. Jedoch glaube ich nicht,
dass robocopy für diesen Zweck optimiert ist und bei vielen
Änderung pro Zeiteinheit Performanceeinbrüche festzustellen
sein werden.

Das wusste ich schon das robocopy eine Monitoring-Funktion beinhaltet. Allerdings prüft es dennoch nur mindestens aller 60 Sekunden und nicht in Echtzeit. Das ist aber das kleinste Problem und wäre mir sogar noch ganz lieb. Was allerdings das endgültige K.O.-Kriterium für robocopy war, es überschreibt sofort wieder das alte Backup und legt keinen neuen Ordner an! Zumindest habe ich dafür noch keinen Schalter etc. in robocopy gefunden. Klar, man könnte jetzt eine Batch anlegen die jedes mal vor Aufruf einen neuen Zielordner anlegt. Aber das kann nicht Sinn und Zweck der Sache sein da robocopy dann auch immer wieder alle Dateien sichern würde und nicht inkrementell speichert.

Zu deinem Wunschfeature:
IMHO wäre das nur mit der selbst gebastelten PowerShell-Lösung
möglich und selbst da wird es schwierig, denn auf
Dateisystem-Ebene bemerkt Windows nur, dass eine Operation am
Dateisystem durch einen bestimmten Benutzer durchgeführt wird.
Man müsste dann versuchen herauszufinden, ob der Benutzer
lokal oder über das Netzwerk angemeldet ist und falls er über
das Netzwerk angemeldet ist, müsste man dann herausfinden von
wo er kommt.

Es wäre bestimmt möglich dieses Wunschfeature mittels .NET
oder PowerShell zu implementieren, jedoch nicht gerade
trivial.

Oder aber über die Windows API! So würde ich es jedenfalls machen und ich denke mal darüber machen es auch die meisten professionellen Tools.

Noch etwas Grundsätzliches zu deinem Problem. Du hast erwähnt,
dass man durch dieses Backup in der Lage sein soll Dateien
oder Versionen von Dateien wiederherzustellen, die schon vor
längerer Zeit gelöscht wurden.
Ich weiß nicht, wie stark auf der Freigabe, die du zu sichern
gedenkst gearbeitet wird, aber bedenke, dass, wenn dort
häufiger Änderungen stattfinden, die zu sichernden Datenmengen
schnell ins Unermessliche steigen können. Denn wenn Nutzer
beispielsweise Word-Dokumente auf dieser Freigabe bearbeiten
und mehrmals beim Arbeiten speichern, wird jedes Mal eine neue
Version gesichert. Eine Kompression der Daten ist auf jeden
Fall empfehlenswert und selbst dann können es knapp werden.

Daher wäre es mir ja am liebsten wenn man einzelne Benutzer festlegen kann bei denen dann nur auf Änderung mit einem Backup reagiert wird. Aber auch so wäre es nicht sehr dramatisch da die menge der täglich bearbeiteten Dateien recht überschaubar ist.

Ich habe noch 2 interessante Programme gefunden die einigermaßen an meine Vorstellung ran kommen. Allerdings sind diese aber auch nicht kostenlos!

http://www.docshield.com/overview.html
und
http://www.hermetic.ch/mfb/mfb.htm

Das nur zur Vollständigkeit damit diese nicht noch einmal von anderen genannt werden müssen.

Falls du noch ein paar Ideen hast würde ich mich sehr darüber Freuen!

Freundliche Grüße,
Andy

Hallo Reiner,

danke erst einmal für deine ausführliche Antwort!

Eine Schattenkopie der Daten wird bei uns schon täglich auf Band gesichert. Ich suche daher eher einer ergänzenden Lösung auf Festplatte. Es sollen auch nur einzelne Dateien überwacht bzw. gesichert werden und nicht alle.

Um den Plattenplatz mache ich mir am wenigsten Sorgen da es sich wie gesagt nur um eine geringe Menge an zu überwachenden Dateien handelt bzw. diese auch nicht allzu oft geändert werden (vielleicht 1 bis max. 5 mal am Tag).

Folderclone kannte ich auch schon aus dem Heimbereich. Aber leider erfüllt das nicht meine o.g. Wünsche bzw. Anforderungen und ist für mich daher unbrauchbar.

Ich habe noch 2 interessante Programme gefunden die einigermaßen an meine Vorstellung ran kommen. Allerdings sind diese aber auch nicht kostenlos!

http://www.docshield.com/overview.html
und
http://www.hermetic.ch/mfb/mfb.htm

Das nur zur Vollständigkeit damit diese nicht noch einmal von anderen genannt werden müssen.

Falls du noch ein paar Ideen hast würde ich mich sehr darüber Freuen!

Freundliche Grüße,
Andy

Hallo Andy,

eine Tool oder eine Script lösung kann ich dir nicht anbieten, Ich gehe davon aus das deine Dartein hauptsächlich aus Office Dokumenten bestehen.
Also bräuchtest du eine Dokomentenmanagment.

Ich selber komme aus der Lotus Domino Ecke,
und ich bin überzeugt das ein halbwegs guter entwickler das was du forderst dort abbilden kann,
aber wie du dir denken kannst, wird das sicherlich eine stange geld kosten, aber du könntest dort archive anlegen versionen verwalten und alles moegliche an einschränkzungen und adons einbinden.

Das grösste problem ist es bei dir ja mitzubekommen wann sich was ändert, die normale dokumenten history kann hinterlegen wer wann welche änderungen gemacht hat, man kann das löschen nur bestimmten leuten erlauben, und auch gelöschte daten sind wiederherstellbar aus dem entsprechenden backup, man kann aber auch eine zweite person auffordern der löschung zuzustimmen, oder festlegen das ein dokument erst dann veroeffentlicht /geändert werden kann wenn jemand anderes zugestimmt hat.

das alles ist allerdings nicht ganz billig denke ich mal.

als tipp kann ich dir nur raten, kauf dir noch ein paar bänder
1 Jahresicherung halten
12 Monatsicherungen
4 wochensicherungen
dazu die letzten 10 werktage die immer wieder ueberschrieben werden (aber denk drann die haben auch nur eine begrenzte lebensdauer beim ueberschreiben )

auf die art und weise hast du nach einigerzeit ein solides backup, vieleicht etwas paranoid aber als admin fuehle ich mich damit wohler :smile:

gruss

arno

Aber das kann nicht Sinn und Zweck der Sache sein da robocopy
dann auch immer wieder alle Dateien sichern würde und nicht
inkrementell speichert.

Wenn du selbst ein Skript schreibst, das die von dir beschriebene Aufgabe erledigen soll, wirst du IMHO auf inkrementelle Sicherung der Daten verzichten müssen, das ist nur mit einem vollwertigen Backup-Programm möglich. Komprimieren wirst du sie Daten jedoch können. Z.B. Einfach alle Versionen einer Datei in ein Archiv packen.

Oder aber über die Windows API! So würde ich es jedenfalls
machen und ich denke mal darüber machen es auch die meisten
professionellen Tools.

Dein Einwurf wirkt mir ein bisschen ideologisch :wink:. So als ob
System.IO.FileSystemWatcher quick’n’dirty wäre und Windows API schön und sauber. Eben genannte .NET-Klasse wird intern sicherlich auch alles an die Windows-API delegieren. Außerdem wird sie bestimmt viel einfacher zu bedienen sein, als die Windows API, da man auf weniger Dinge achten muss. Das, meiner Ansicht nach sehr viel versprechende Tool DocShield, das du erwähnt hast, benötigt .NET, ich gehe deshalb stark davon aus, dass dieses Programm System.IO.FileSystemWatcher nutzt. Wie du siehst wird System.IO.FileSystemWatche also genauso von professionellen Tools genutzt.

Ob du direkt mit C oder C++ die Windows-API benutzt oder es mittels anderer Sprachen, Schnittstellen, Werkzeuge, usw. realisierst solltest von folgenden Kriterien abhängig machen:

  1. Was kann ich? C, C++, C#, Java, PowerShell?
  2. Wie lange brauche ich, um mein Ziel zu erreichen? Ein PowerShell-Skript ist sicherlich schneller geschrieben, als eine vollwertige Win32-Anwendung mit C++. Man muss ja nicht gleich mit Kanonen auf Spatzen schießen.
  3. Wie schnell ist das Ganze? Wenn die Skript-Lösung wirklich eine Performancebremse sein sollte, dann muss man sicherlich umsteigen, aber das muss man testen.

Liebe Grüße,
shreyder

Hallo shreyder,

Wenn du selbst ein Skript schreibst, das die von dir
beschriebene Aufgabe erledigen soll, wirst du IMHO auf
inkrementelle Sicherung der Daten verzichten müssen, das ist
nur mit einem vollwertigen Backup-Programm möglich.

Wieso soll das nur mit einem Vollwertigen Backup Programm möglich sein? Ich selber habe zwar noch nie eins geschrieben aber kann mir gut vorstellen wie das gemacht wird. Man vergleicht einfach die Dateinamen miteinander bzw. ob eine Datei schon im Backup existiert und wenn ja ob diese geändert wurde. Das kann man entweder ganz einfach ermitteln indem man von beiden Dateien eine Prüfsumme (CRC32 oder MD5 Hash) erstellt und diese dann Vergleicht. Wenn gleich dann nicht sichern wenn ungleich dann inkrementell sichern. Das sollte eigentlich mit jeder Sprache (auch Scriptsprache) gehen da MD5 eigentlich überall implementiert ist. Alternativ kann man auch das Änderungsdatum aus der Datei auslesen das ist dann aber nicht so zuverlässig wohl aber schneller und benötigt die WinAPI.

Apropos aus den Dateiattributen auslesen, dort steht ja auch drin wer die Datei erstellt und zuletzt geändert hat. Das könnte man verwenden um meine Idee mit dem „Sichern nur bei Änderung von bestimmten User“ zu realisieren. Einfach vorher prüfen wer die Datei zuletzt geändert hat und dann darauf reagieren.

Dein Einwurf wirkt mir ein bisschen ideologisch :wink:. So als ob
System.IO.FileSystemWatcher quick’n’dirty wäre und Windows API
schön und sauber. Eben genannte .NET-Klasse wird intern
sicherlich auch alles an die Windows-API delegieren. Außerdem
wird sie bestimmt viel einfacher zu bedienen sein, als die
Windows API, da man auf weniger Dinge achten muss. Das, meiner
Ansicht nach sehr viel versprechende Tool DocShield, das du
erwähnt hast, benötigt .NET, ich gehe deshalb stark davon aus,
dass dieses Programm System.IO.FileSystemWatcher nutzt. Wie du
siehst wird System.IO.FileSystemWatche also genauso von
professionellen Tools genutzt.

Das war vielleicht etwas unglücklich von mir ausgedrückt. Freilich können auch .NET Programme die WinAPI nutzen so wie jede andere Hochsprache auch. Aber bei Scriptsprachen sieht das schon anders aus. Mir wäre es lieber ohne die WinAPI aus zu kommen als mit. Im Grunde sollten sich die Dateiattribute doch auch irgendwie ohne WinAPI auslesen lassen. Da müsste ich mich mal schlau machen. Mit der PowerShell habe ich mich bisher auch noch nicht befasst. Hat man damit Zugriff auf die WinAPI? Welche Möglichkeiten gibt es damit Dateiattribute auszulesen?

Freundliche Grüße und ein schönes Wochenende,
Andy

Hallo Andy,

Wieso soll das nur mit einem Vollwertigen Backup Programm
möglich sein? Ich selber habe zwar noch nie eins geschrieben
aber kann mir gut vorstellen wie das gemacht wird. Man
vergleicht einfach die Dateinamen miteinander bzw. ob eine
Datei schon im Backup existiert und wenn ja ob diese geändert
wurde. Das kann man entweder ganz einfach ermitteln indem man
von beiden Dateien eine Prüfsumme (CRC32 oder MD5 Hash)
erstellt und diese dann Vergleicht. Wenn gleich dann nicht
sichern wenn ungleich dann inkrementell sichern. Das sollte
eigentlich mit jeder Sprache (auch Scriptsprache) gehen da MD5
eigentlich überall implementiert ist. Alternativ kann man auch
das Änderungsdatum aus der Datei auslesen das ist dann aber
nicht so zuverlässig wohl aber schneller und benötigt die
WinAPI.

Du scheinst unter einer inkrementellen Sicherung der Daten etwas anderes zu verstehen als ich. Ich denke, du redest von einer inkrementellen Sicherung auf Ordner-Ebene. Das bedeutet in deinem Fall, wenn ein Benutzer Dateien auf einer eurer Freigaben, die überwacht wird, bearbeitet, dann wird verglichen, welche Dateien sich geändert haben. Die geänderten Dateien werden dann komplett gesichert. Es wird also gespeichert, wie sich der Ordner im Laufe der Zeit verändert. So etwas ist sicherlich mit einem Skript problemlos möglich. Ich würde so etwas jedoch nicht als inkrementelles Backup im engeren Sinne bezeichnen.

Ein inkrementelles Backup arbeitet meiner Ansicht nach auf tieferer Ebene, also zumindest auf Dateiebene. Wenn eine Datei geändert wurde, dann wird nicht die komplette Datei neu gesichert, sondern es wird gespeichert, was sich in dieser Datei im Vergleich zur vorherigen Version der Datei geändert hat. Genau das, was bspw. diff (http://de.wikipedia.org/wiki/Diff) tut, nur das dieses Programm für Textdateien und Lesbarkeit durch Menschen optimiert ist. Bei diesem Ansatz wird also gespeichert, wie sich die Datei im Laufe der Zeit verändert und nicht der Ordner. Damit spart man sich wesentlich mehr Speicherplatz als mit zuerst genannten Lösung. Um so etwas umzusetzen braucht man jedoch nicht gerade einfache Algorithmen, diese kann man zwar in jeder touring-vollständigen Sprache, also auch in Skriptsprachen implementieren, welche sich aber meist kaum für so etwas eignen.

Apropos aus den Dateiattributen auslesen, dort steht ja auch
drin wer die Datei erstellt und zuletzt geändert hat. Das
könnte man verwenden um meine Idee mit dem „Sichern nur bei
Änderung von bestimmten User“ zu realisieren. Einfach vorher
prüfen wer die Datei zuletzt geändert hat und dann darauf
reagieren.

Das wäre mir neu. NTFS weiß AFAIK, nur wann eine Datei erstellt wurde (Creation Time), wann sie zuletzt geändert wurde (Modification Time), wann auf sie zuletzt zugegriffen wurde (Access Time), wem die Datei gehört (Owner), wer damit was anstellen darf (DACL), welche Operationen an dieser Datei im Sicherheitsprotokoll protokolliert (Ereignisanzeige) werden sollen (SACL) und zusätzlich noch die Attribute versteckt, System usw…

Mit der PowerShell habe ich mich bisher auch noch nicht
befasst. Hat man damit Zugriff auf die WinAPI? Welche
Möglichkeiten gibt es damit Dateiattribute auszulesen?

Mit der PowerShell hast du Zugriff auf das .NET-Framework. Damit sollte eigentlich geklärt, was du damit alles machen kannst :wink:: Nämlich fast alles.

Ebenfalls ein schönes Wochenende und liebe Grüße,
shreyder

Hallo Andy,

Wieso soll das nur mit einem Vollwertigen Backup Programm
möglich sein? Ich selber habe zwar noch nie eins geschrieben
aber kann mir gut vorstellen wie das gemacht wird. Man
vergleicht einfach die Dateinamen miteinander bzw. ob eine
Datei schon im Backup existiert und wenn ja ob diese geändert
wurde. Das kann man entweder ganz einfach ermitteln indem man
von beiden Dateien eine Prüfsumme (CRC32 oder MD5 Hash)
erstellt und diese dann Vergleicht. Wenn gleich dann nicht
sichern wenn ungleich dann inkrementell sichern. Das sollte
eigentlich mit jeder Sprache (auch Scriptsprache) gehen da MD5
eigentlich überall implementiert ist. Alternativ kann man auch
das Änderungsdatum aus der Datei auslesen das ist dann aber
nicht so zuverlässig wohl aber schneller und benötigt die
WinAPI.

Du scheinst unter einer inkrementellen Sicherung der Daten etwas anderes zu verstehen als ich. Ich denke, du redest von einer inkrementellen Sicherung auf Ordner-Ebene. Das bedeutet in deinem Fall, wenn ein Benutzer Dateien auf einer eurer Freigaben, die überwacht wird, bearbeitet, dann wird verglichen, welche Dateien sich geändert haben. Die geänderten Dateien werden dann komplett gesichert. Es wird also gespeichert, wie sich der Ordner im Laufe der Zeit verändert. So etwas ist sicherlich mit einem Skript problemlos möglich. Ich würde so etwas jedoch nicht als inkrementelles Backup im engeren Sinne bezeichnen.

Ein inkrementelles Backup arbeitet meiner Ansicht nach auf tieferer Ebene, also zumindest auf Dateiebene. Wenn eine Datei geändert wurde, dann wird nicht die komplette Datei neu gesichert, sondern es wird gespeichert, was sich in dieser Datei im Vergleich zur vorherigen Version der Datei geändert hat. Genau das, was bspw. diff (http://de.wikipedia.org/wiki/Diff) tut, nur das dieses Programm für Textdateien und Lesbarkeit durch Menschen optimiert ist. Bei diesem Ansatz wird also gespeichert, wie sich die Datei im Laufe der Zeit verändert und nicht der Ordner. Damit spart man sich wesentlich mehr Speicherplatz als mit zuerst genannten Lösung. Um so etwas umzusetzen braucht man jedoch nicht gerade einfache Algorithmen, diese kann man zwar in jeder touring-vollständigen Sprache, also auch in Skriptsprachen implementieren, welche sich aber meist kaum für so etwas eignen.

Apropos aus den Dateiattributen auslesen, dort steht ja auch
drin wer die Datei erstellt und zuletzt geändert hat. Das
könnte man verwenden um meine Idee mit dem „Sichern nur bei
Änderung von bestimmten User“ zu realisieren. Einfach vorher
prüfen wer die Datei zuletzt geändert hat und dann darauf
reagieren.

Das wäre mir neu. NTFS weiß AFAIK, nur wann eine Datei erstellt wurde, wann sie zuletzt geändert wurde, wann auf sie zuletzt zugegriffen wurde, wem die Datei gehört (Owner), wer damit was anstellen darf (DACL) und welche Operationen an dieser Datei im Sicherheitsprotokoll protokolliert (Ereignisanzeige) werden sollen (SACL).

Mit der PowerShell habe ich mich bisher auch noch nicht
befasst. Hat man damit Zugriff auf die WinAPI? Welche
Möglichkeiten gibt es damit Dateiattribute auszulesen?

Mit der PowerShell hast du Zugriff auf das .NET-Framework. Damit sollte eigentlich geklärt, was du damit alles machen kannst :wink:: Nämlich fast alles.

Ebenfalls ein schönes Wochenende und liebe Grüße,
shreyder

Hallo shreyder,

Du scheinst unter einer inkrementellen Sicherung der Daten
etwas anderes zu verstehen als ich. Ich denke, du redest von
einer inkrementellen Sicherung auf Ordner-Ebene. Das bedeutet
in deinem Fall, wenn ein Benutzer Dateien auf einer eurer
Freigaben, die überwacht wird, bearbeitet, dann wird
verglichen, welche Dateien sich geändert haben. Die geänderten
Dateien werden dann komplett gesichert. Es wird also
gespeichert, wie sich der Ordner im Laufe der Zeit verändert.
So etwas ist sicherlich mit einem Skript problemlos möglich.
Ich würde so etwas jedoch nicht als inkrementelles Backup im
engeren Sinne bezeichnen.
Ein inkrementelles Backup arbeitet meiner Ansicht nach auf
tieferer Ebene, also zumindest auf Dateiebene. Wenn eine Datei
geändert wurde, dann wird nicht die komplette Datei neu
gesichert, sondern es wird gespeichert, was sich in dieser
Datei im Vergleich zur vorherigen Version der Datei geändert
hat. Genau das, was bspw. diff
(http://de.wikipedia.org/wiki/Diff) tut, nur das dieses
Programm für Textdateien und Lesbarkeit durch Menschen
optimiert ist. Bei diesem Ansatz wird also gespeichert, wie
sich die Datei im Laufe der Zeit verändert und nicht der
Ordner. Damit spart man sich wesentlich mehr Speicherplatz als
mit zuerst genannten Lösung. Um so etwas umzusetzen braucht
man jedoch nicht gerade einfache Algorithmen, diese kann man
zwar in jeder touring-vollständigen Sprache, also auch in
Skriptsprachen implementieren, welche sich aber meist kaum für
so etwas eignen.

Im Grunde hast du recht und ein inkrementelles Backup speichert nur die reinen binären Änderungen im Bezug auf das vorherige Backup. Aber inkrementell hat viele Bedeutungen. So kann man auch sagen das nur die geänderten Dateien aus einem Ordner im Bezug zum vorhergehenden Backup gespeichert werden also wie du sagtest auf höherer Ebene. Aber nicht zu verwechseln mit einem differenziellen Backup! Wobei ich damit zur Not auch einverstanden wäre. Ich möchte es ja nicht komplizierter machen als es sein muss und inkrementell im Sinne von die einzelnen Bitmuster die sich geändert haben zu speichern wäre viel zu aufwendig selber mittels Script zu programmieren.

Das wäre mir neu. NTFS weiß AFAIK, nur wann eine Datei
erstellt wurde (Creation Time), wann sie zuletzt geändert
wurde (Modification Time), wann auf sie zuletzt zugegriffen
wurde (Access Time), wem die Datei gehört (Owner), wer damit
was anstellen darf (DACL), welche Operationen an dieser Datei
im Sicherheitsprotokoll protokolliert (Ereignisanzeige) werden
sollen (SACL) und zusätzlich noch die Attribute versteckt,
System usw…

Doch, unter Windows (auf jeden Fall ab 2000) wird auch gespeichert wer eine Datei zuletzt geändert/bearbeitet/zugegriffen hat. Auch über eine Freigabe im Netzwerk hinaus. Das sieht man auch in den Dateieigenschaften unter Details.

Mit der PowerShell hast du Zugriff auf das .NET-Framework.
Damit sollte eigentlich geklärt, was du damit alles machen
kannst :wink:: Nämlich fast alles.

Danke, dann werde ich mich wohl mal damit beschäftigen wenn ich keine andere Lösung finde.

Freundliche Grüße,
Andy