![]() |
exklusiven Harddisk Zugriff für Snapshot [Mutex/Semaphor]
Hallo,
da mein letzter Thread ![]() Anklang fand, :cry: habe ich mir zu meinem Problem etwas neues überlegt: Soweit ich mich noch erinnere ist bei Windows die Harddisk eine exklusiv nutzbare Ressource, d.h. die App. die gerade damit arbeitet macht das exklusiv, alle anderen müssen warten bis sie vom BS eine Zuteilung erhalten (extrem vereinfacht). Ich möchte zu einem bestimmten Zeitpunkt einen Snapshot von einem beliebigen Verzeichnis machen (daher die Idee mit dem absperren s.o.). Ich dachte mir nun, solange ich das Verzeichnis durchsuche und Datei für Datei wegsichere, könnte ich mir doch mit Hilfe eines Semaphores / Mutex o.ä. für die gesamte Zeit die Festplatte reservieren, damit keine andere Applikation noch etwas in das Verzeichnis schreiben kann. Hat jemand eine Idee dazu ? |
Re: exklusiven Harddisk Zugriff für Snapshot [Mutex/Semaphor
Moin Armin,
eine unmittelbare Idee zu Deinem Problem habe ich nicht, allerdings dürfte das Sperren der Systemplatte nicht funktionieren. Ich hätte allerdings eine Idee, die das Problem von Veränderungen während des Scans verringert: Wenn ich mal NT ff als Betriebssystem voraussetze, könntest Du mit ReadDirectoryChangesW während des Scans überwachen (und aufzeichnen), so dass das Du evenutelle Veränderungen trotzdem mitbekommst. Werden Scan und Überwachung jeweils in einen eigenen Thread gelegt, dürfte das machbar sein. |
Re: exklusiven Harddisk Zugriff für Snapshot [Mutex/Semaphor
1. Chris' Variante könnte u.U. funktionieren
2. Ich würde lieber (wie zB von DriveImage benutzt -> V2i) einen FSD (File System Driver) schreiben. Der kann nen Snapshot online halten, obwohl auf das System geschrieben wird. Selbst das Zurückschreiben funktioniert damit ;) ... es steckt aber noch ein bischen mehr dahinter *g* |
Re: exklusiven Harddisk Zugriff für Snapshot [Mutex/Semaphor
Hallo Christian und Assarbad,
tja, ich benutze ReadDirectoryChangesW zum Überwachen der Zielverzeichnisse, aber, wenn ich nun einen Snapshot machen möchte, während eine Applikation in das Zielverzeichnis schreibt ist alles für den "Hugo" bzw. von vorne beginnen (im schlechtesten Fall mehrmals). Ich überwache zwar brav, aber niemand kann sagen, wann für längere Zeit keine Daten geändert werden, daher die Idee mit dem Snapshot und dem exklusiven Zugriff. Mir sind nur 2 Möglichkeiten eingefallen: 1. kurzfristiger exklusiver Zugriff auf das Verzeichnis 2. Prüfen ob die Dateien vom Zielverzeichnis geöffnet sind -> ![]() (zu 2. funkt leider nicht, benötige ausserdem Adminrechte, was nicht gut ist) |
Re: exklusiven Harddisk Zugriff für Snapshot [Mutex/Semaphor
Dann schlage ich mal ganz frech nen FSD vor. Da kannst du die alten (unveränderten Daten) nämlich für dich vorhalten und dennoch kann jeder auf die Platte schreiben (Speicherplatz oder Plattenplatz vorausgesetzt). Jedenfalls brauchst du eine ähnliche Methode wie DriveImage 7
|
Re: exklusiven Harddisk Zugriff für Snapshot [Mutex/Semaphor
Moin Armin,
besteht 'ne Möglichkeit, dass Du mal genauer beschreibst, wozu der Snapshot dienen soll, welche Datenmengen es betrifft (Speicherplatz, Dateienanzahl), und, ggf., von welchen Programmen die Daten stammen? Vielleicht erleichtert das die Ideenfindung. Ausserdem könntest Du Dir auch mal SHChangeNotifyRegister usw. ansehen. Vielleicht wäre das ja auch was für Dich. |
Re: exklusiven Harddisk Zugriff für Snapshot [Mutex/Semaphor
Hallo Christian,
die Daten kommen von einer Programmierumgebung für Industrieautomaten. Dort gibt es keinen "speichern" Knopf und keine "undo" Funktion, daher möchte ich so eine Art Versionstracking/Undo Funktion basteln. Die Anzahl der Dateien/Verzeichnisse hängt von der Projektgröße ab, von einigen wenigen bis ca. 10 MB mit +1000 Dateien. Diese Daten können exklusiv geöffnet, Datenbankfiles, oder "normale" Dateien sein. p.s. Da die Daten auch von anderen Programmen verändert werden können, reicht es auch nicht, zu Prüfen ob bestimmte Prozesse laufen. p.p.s. SHChangeNotify und Konsorten habe ich mir schon angesehen, aber die Funken nicht, z.B. wenn eine schon erstellte Datei verändert wird, gibt es kein Ereignis. p.p.p.s Assarbads Vorschlag mit dem FSD habe ich für eine Minute :mrgreen: ernsthaft in Erwägung gezogen, allerdings mußte ich (nach einer Googel-Session) rasch feststellen,dass meine Programmierfähigkeiten ein KLEINWenig :cry: zu bescheiden sind für so ein Ding. |
Re: exklusiven Harddisk Zugriff für Snapshot [Mutex/Semaphor
Moin Armin,
dann mach' einen permanenten Snapshot. Soll heissen: Initial wird erst einmal alles ausgelesen, dann wird das Verzeichnis überwacht, und sobald eine Datei verändert wurde wird diese in das zugehörige Snapshot Verzeichnis geschrieben. Für den Moment, in dem der Snapshot tatsächlich durchgeführt werden soll (10 MB sollten sich ja noch recht schnell kopieren lassen), wird die Veränderung Deines Snapshot Verzeichnisses gesperrt (das betrifft ja dann ausschliesslich Dein Programm), und der Überwachungsthread merkts sich derweil alle Veränderungen, um das Snapshotverzeichnis anschliessend aktualisieren zu können. |
Re: exklusiven Harddisk Zugriff für Snapshot [Mutex/Semaphor
Hallo Christian,
so ähnlich habe ich mir das Vorgestellt, Danke :hello: Aber das verstehe ich leider nicht Zitat:
1. 1:1 Kopie des Projekts 2. alle geänderten Files nachführen 3. zum Snapshotzeitpunk nicht mehr nachführen nur mehr merken 4. Snapshot machen 5. weiter mit 1 Das Problem ist nur, wenn eine Datei während des Snapshots 2 mal geändert wird, dann habe ich möglicherweise einen Versionssprung versäumt, oder? Vielleicht könnte ich bei Pkt. 4 stoppen und mit Pkt. 2 neu starten? ------ Was mir auch noch unklar ist, was passiert, wenn während des Nachführens des geänderten Files (welches z.B. sehr groß ist) eine Änderung in anderen Dateien des Projekts passiert (oder 2 malige Änderung der selben Datei). Der Überwachungsthread merkt das zwar, aber ist das sicher? Eigentlich könnte ich ja in so einem Spezialfall einen Versionssprung verkraften, aber sind meine Daten dann noch konsistent? Sollten sie eigentlich sein, da ja die letzten Änderungen "ziehen", oder? |
Re: exklusiven Harddisk Zugriff für Snapshot [Mutex/Semaphor
Moin Armin,
Zitat:
Zitat:
Ich meine damit folgendes: Ein Snapshot kann nur ausgeführt werden, wenn der Überwachungsthread gerade keine Veränderung mehr in das, eigene, Snapshotverzeichnis zu kopieren hat. Damit sollten dann auch die Daten konsistent sein. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:25 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz