AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi exklusiven Harddisk Zugriff für Snapshot [Mutex/Semaphor]
Thema durchsuchen
Ansicht
Themen-Optionen

exklusiven Harddisk Zugriff für Snapshot [Mutex/Semaphor]

Ein Thema von APP · begonnen am 11. Sep 2003 · letzter Beitrag vom 13. Sep 2003
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von APP
APP

Registriert seit: 24. Feb 2003
Ort: Graz (A)
705 Beiträge
 
Delphi 7 Enterprise
 
#1

exklusiven Harddisk Zugriff für Snapshot [Mutex/Semaphor]

  Alt 11. Sep 2003, 20:44
Hallo,

da mein letzter Thread
Verzeichnis "locken" (absperren bzw. exklusiv öffnen) keinen großen
Anklang fand, 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 ?
Armin P. Pressler

BEGIN
...real programmers are using C/C++ - smart developers Delphi;
END;
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: exklusiven Harddisk Zugriff für Snapshot [Mutex/Semaphor

  Alt 11. Sep 2003, 23:35
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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#3

Re: exklusiven Harddisk Zugriff für Snapshot [Mutex/Semaphor

  Alt 12. Sep 2003, 00:00
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*
  Mit Zitat antworten Zitat
Benutzerbild von APP
APP

Registriert seit: 24. Feb 2003
Ort: Graz (A)
705 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: exklusiven Harddisk Zugriff für Snapshot [Mutex/Semaphor

  Alt 12. Sep 2003, 07:05
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 -> http://www.delphipraxis.net/topic973...tml&highlight=

(zu 2. funkt leider nicht, benötige ausserdem Adminrechte, was nicht gut ist)
Armin P. Pressler

BEGIN
...real programmers are using C/C++ - smart developers Delphi;
END;
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#5

Re: exklusiven Harddisk Zugriff für Snapshot [Mutex/Semaphor

  Alt 12. Sep 2003, 10:04
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
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: exklusiven Harddisk Zugriff für Snapshot [Mutex/Semaphor

  Alt 12. Sep 2003, 12:13
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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von APP
APP

Registriert seit: 24. Feb 2003
Ort: Graz (A)
705 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: exklusiven Harddisk Zugriff für Snapshot [Mutex/Semaphor

  Alt 12. Sep 2003, 19:44
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 ernsthaft
in Erwägung gezogen, allerdings mußte ich (nach einer Googel-Session)
rasch feststellen,dass meine Programmierfähigkeiten
ein KLEINWenig zu bescheiden sind für so ein Ding.
Armin P. Pressler

BEGIN
...real programmers are using C/C++ - smart developers Delphi;
END;
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: exklusiven Harddisk Zugriff für Snapshot [Mutex/Semaphor

  Alt 12. Sep 2003, 20:03
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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von APP
APP

Registriert seit: 24. Feb 2003
Ort: Graz (A)
705 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: exklusiven Harddisk Zugriff für Snapshot [Mutex/Semaphor

  Alt 12. Sep 2003, 20:34
Hallo Christian,

so ähnlich habe ich mir das Vorgestellt, Danke

Aber das verstehe ich leider nicht
Zitat:
wird die Veränderung Deines Snapshot Verzeichnisses gesperrt
Ah! jetzt verstehe ich, oder?

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?
Armin P. Pressler

BEGIN
...real programmers are using C/C++ - smart developers Delphi;
END;
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: exklusiven Harddisk Zugriff für Snapshot [Mutex/Semaphor

  Alt 12. Sep 2003, 22:26
Moin Armin,

Zitat von APP:
wenn eine Datei während des Snapshots 2 mal
geändert wird, dann habe ich möglicherweise einen Versionssprung
versäumt, oder?
Ja, und? Wieviele Änderungen an den einzelnen Dateien stattfinden ist doch für den Snapshot völlig uninteressant, ausser Du willst jede Änderung protokollieren. Dann fände ich den Begriff Snapshot aber irreführend.

Zitat von APP:
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).
Das Problem liesse sich in den Griff bekommen, wenn Du die Überwachung und das Bilden eines Snapshots synchronisieren kannst.
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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz