Unterstützt Windows (oder NTFS) Platzhalterdateien mit falschen Größen?

6

Jedes Mal, wenn ich Photoshop starte, wird sofort eine temporäre 2-GB-Datei auf der Festplatte erstellt, auf der sich der Cache befindet. Es ist ein Plattentellerlaufwerk, und ich höre keine Festplattengeräusche, die normalerweise mit dem Schreiben von 2 GB Daten verbunden sind. Ist es möglich, eine leere Platzhalterdatei mit einer "falschen" Größe zu erstellen, um Speicherplatz zu reservieren, falls später tatsächlich Daten zwischengespeichert werden müssen?

user45623
quelle

Antworten:

6

Es gibt zwei verschiedene Möglichkeiten, wie dies auf einem NTFS-Volume erreicht werden kann.

Die SetEndOfFileFunktion reserviert auf NTFS-Dateisystemen den Speicherplatz für die Datei, füllt diesen Speicherplatz jedoch nicht mit irgendetwas. Beim Aktualisieren der NTFS-Buchhaltung kann es zu geringfügigen Festplattenaktivitäten kommen. Wenn ein Programm eine Datei nach dem letzten zuvor geschriebenen Byte bearbeitet, kritzelt NTFS den Lauf zwischen dem zuletzt geschriebenen (letzten "gültigen") Byte und dem angeforderten Byte (um Sicherheitsprobleme zu vermeiden ) und aktualisiert den gültigen Datenzeiger .

Dann gibt es spärliche Dateien . Im Gegensatz zu normalen Dateien, die mit erweitert wurden SetEndOfFile, verfolgt NTFS, welche Sektoren tatsächliche Daten enthalten und nicht nur welches Byte das letzte mit gültigen Daten ist. Lange Nullenläufe, in denen nichts geschrieben wurde, werden nicht auf der physischen Festplatte gespeichert.

Sie können überprüfen, ob eine Datei spärlich ist, fsutil sparse queryflaggefolgt vom Pfad zur Datei. Wenn es nicht spärlich ist, verwendet das Programm den ersten Ansatz.

Lesen Sie weiter: Warum dauert mein Einzelbyte-Schreiben ewig?

Ben N.
quelle
2
Ich vermute, dass Photoshop keine Dateien mit geringer Dichte verwendet, da diese plötzlich Fehler "Festplatte voll" in der Mitte von etwas Wichtigem zurückgeben können, während erweiterte SetEndOfFileDateien den physischen Speicherplatz im Voraus festschreiben.
Ben N
4

Ja, dies wird als "Sparse-Datei" bezeichnet.

NTFS und ReFS unterstützen dies, FAT32 und ExFAT jedoch nicht.

Ein Programm kann dem Betriebssystem explizit mitteilen, in welchen Bytebereichen einer Datei Speicherplatz auf der Festplatte vorhanden sein soll (standardmäßig ist dies alles). Die anderen, nicht zugewiesenen Teile werden so behandelt, als ob sie nur viele Bytes mit dem Wert 0 enthalten, wenn sie vom Programm gelesen werden.

Im Dialogfeld "Dateieigenschaften" sehen Sie eine "normale" Dateigröße, die "gefälschte", und eine Größe, wie viel auf der Festplatte verwendet wird, das ist der zugewiesene Teil (plus einige Bytes, um vollständige Festplattenblöcke zu erhalten).

Siehe auch https://en.wikipedia.org/wiki/Sparse_file

deviantfan
quelle
Nach meinem Verständnis ist NTFS dafür verantwortlich, spärlichen Dateien realen Speicherplatz zuzuweisen. Anwendungen bewirken lediglich, dass Abschnitte durch Schreiben an sie zugewiesen werden. Weitere Informationen finden Sie in meiner Antwort.
Ben N
@ BenN Schreiben bedeutet Zuweisen, ja. Eine manuelle Zuordnung / Freigabe von Bytebereichen ist jedoch möglich.
Deviantfan
Ah, ich denke, wir suchen nach dem FSCTL_SET_ZERO_DATACode, der eine Region auf Null setzt und dazu führen kann, dass NTFS die Zuordnung aufhebt.
Ben N