Forum: PC-Programmierung Wie Festplatten-Cache umgehen?


von Günter R. (galileo14)


Lesenswert?

Hallo,

bei einem selbstprogrammierten Delphi-Tool zum Kopieren von Dateien auf 
DVD-RAM's unter Windows (mit dem Packet-Driver Adaptec DirectCD) schlage 
ich mich mit dem Problem herum, daß mitunter die Daten fehlerhaft auf 
die DVD-RAM kopiert werden; Adaptec DirectCD meldet dann, daß nicht alle 
Daten korrekt kopiert werden konnten, und tatsächlich steht in einigen 
Ziel-Dateien Schrott drin.

Ich möchte nun so verfahren, daß ich von einer Quellendatei zunächst 
eine Prüfsumme berechne (CRC32), die Datei dann kopiere, anschließend 
vom Zieldatenträger zurücklese, wieder die CRC32 berechne und mit dem 
Original vergleiche. Dabei möchte ich aber vermeiden, daß die Daten vom 
Ziel-Cache geholt werden; sie sollen direkt vom Datenträger gelesen 
werden (DVD-RAM).

Weiß jemand auf die Schnelle, wie ich vermeide, daß aus einem Cache 
(Windows-Cache oder HD-Cache) gelesen wird? (D.h. es soll im 
übertragenen Sinne ein "volatile" gemacht werden wie bei einem 
C-Programm).

Danke.

Günter

von Philipp B. (philipp_burch)


Lesenswert?

Normalerweise nennt sich sowas "flushing", vielleicht findest du damit 
was...

von Andreas K. (a-k)


Lesenswert?

Siehe Doku vom Windows API, Funktion CreateFile mit Parameter 
FILE_FLAG_NO_BUFFERING.

von Rolf Magnus (Gast)


Lesenswert?

> Ich möchte nun so verfahren, daß ich von einer Quellendatei zunächst
> eine Prüfsumme berechne (CRC32), die Datei dann kopiere, anschließend
> vom Zieldatenträger zurücklese, wieder die CRC32 berechne und mit dem
> Original vergleiche.

Eigentlich machen DVD-RAM-Laufwerke schon selbst eine Verifizierung der 
geschriebenen Daten. Deshalb sind sie beim Schreiben so langsam. Mir ist 
auch nicht ganz klar, was dir die CRC bringen soll. Mit der erkennst du 
doch eh nur das, was du schon weißt.

von hellboy (Gast)


Lesenswert?

soweit ich weiss ist das umgehen des festplatten cache NICHT möglich 
.... das hat technische gründe ...

von Günter R. (galileo14)


Lesenswert?

@Philip Burch:

Danke; "flushing" ist klar; aber wahrscheinlich findet der Vorgang auf 
einer Ebene statt, die dem Flushing nicht zugänglich ist, den ein Flush 
leert wahrscheinlich nur den User-Buffer (File Control Block), aber 
nicht unbedingt den System-Cache; da mag hellboy recht haben.

@Andreas Kaiser:

Danke, werde ich mir ansehen. Wird aber möglicherweise nicht viel 
bringen, da ich die Windows-Funktion CopyFile verwende, da mach ich kein 
explizites CreateFile, sondern das steckt im CopyFile und ich habe 
keinen Einfluß darauf.

@Rolf Magnus:

>Eigentlich machen DVD-RAM-Laufwerke schon selbst eine Verifizierung der
>geschriebenen Daten. Deshalb sind sie beim Schreiben so langsam.

Das hatte ich auch gedacht; Du glaubst nicht, welche katastrophalen 
Schreibfehler vorgestern ständig - auch bei mehrfachem Wiederholen - 
passiert sind, beim Beschreiben einer DVD-RAM 1X mit EasyCDCreator 
5/DirectCD 5.3 (zugegeben: recht alte Software). Das hat mein Vertrauen 
schwer geschädigt, sodaß ich von jetzt ab Backups auf DVD-RAM zur 
Kontrolle immer verifiziere, und zwar, indem ich CRC32-Checks vom 
Original und dem Backup vergleiche; dies würde ich ggf. in mein 
Backup-Tool reinprogrammieren, nützt aber nur etwas, wenn auch immer 
direkt von der DVD-RAM gelesen wird (also ggf. mit den Fehlern) und 
nicht eine Ebene höher aus dem Cache, wo noch keine Fehler drinstehen.

>Mir ist auch nicht ganz klar, was dir die CRC bringen soll. Mit der >erkennst du 
doch eh nur das, was du schon weißt.

Ob auf die DVD-RAM fehlerhafte Daten geschrieben wurden, weiß ich eben 
nicht, das weiß ich erst nach einem Verify, z.B. mittels CRC32.


Möglicherweise ist aber auch die DVD-Software (EasyCDCreator 5) 
fehlerhaft; das glaube ich inzwischen, sodaß ich erstmal eine bessere 
Brennsoftware installieren werde, nämlich Nero und sein InCD.

von Uhu U. (uhu)


Lesenswert?

Was du beschrieben hast, sieht wie ein Problem im Filesystem-Treiber von 
EasyCDCreator aus.

Daß das Problem auf dem Laufwerk selbst entstanden ist, ist eher 
unwahrscheinlich.

Wenn du ganz sicher gehen willst, daß keine Daten aus irgend einem Cache 
deine CRC-Berechnung verfälschen, wirf einfach die Scheibe aus und lade 
sie nochmal, um kontrollzulesen.

InCD hat eine Verify-Funktion, die das Kontrollesen automatisch für dich 
erledigt (ohne auswerfen).

von Christian R. (supachris)


Lesenswert?

Das schöne an DVD-RAM ist ja gerade, dass das Laufwerk selbst die Daten 
kontrolliert. Offensichtlich macht dann der Treiber bzw die Software 
Murks, oder das Laufwerk ist hinüber. ich hatte noch nie fehlerhafte 
Daten auf DVD-RAM, hab das öfters nachher verifiziert. Und wozu braucht 
man da überhaupt eine Software? Windows kann das doch ganz normal wie 
eine festplatte behandeln. Einfach rüber kopieren, löschen, was auch 
immer. Sehr seltsam.

von Günter R. (galileo14)


Lesenswert?

Uhu Uhuhu wrote:
> Was du beschrieben hast, sieht wie ein Problem im Filesystem-Treiber von
> EasyCDCreator aus.
>
> Daß das Problem auf dem Laufwerk selbst entstanden ist, ist eher
> unwahrscheinlich.

Das sehe ich auch so.

> Wenn du ganz sicher gehen willst, daß keine Daten aus irgend einem Cache
> deine CRC-Berechnung verfälschen, wirf einfach die Scheibe aus und lade
> sie nochmal, um kontrollzulesen.
> InCD hat eine Verify-Funktion, die das Kontrollesen automatisch für dich
> erledigt (ohne auswerfen).

Das werde ich prüfen; habe eh den Eindruck, daß Nero die bessere 
Software ist.


Christian R. wrote:

>Und wozu braucht man da überhaupt eine Software? Windows kann das doch >ganz 
normal wie eine festplatte behandeln. Einfach rüber kopieren, >löschen, was auch 
immer. Sehr seltsam.

Ich verwende Win2000, das kann es m.W. nicht.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.