Wird beim Überschreiben einer Datei der vorherige Speicherplatz freigegeben?

Wird beim Überschreiben einer Datei der vorherige Speicherplatz freigegeben?

Angenommen, Sie haben eine Datei mit dem Namen , die Bytes groß foo.txtist . Angenommen, Sie erstellen eine neue Datei mit der Größe Bytes und speichern sie als , wodurch die Datei überschrieben wird. Stellt das Betriebssystem (Windows und Linux) automatisch sicher, dass der nicht mehr verwendete Speicherplatz ( Bytes) freigegeben wird?50010foo.txt410

Stellen Sie sich in einem zweiten Szenario vor, Sie hätten diedd-Dienstprogrammum sowohl die alte als auch die neue foo.txt wie oben beschrieben zu erstellen. Stellt das Betriebssystem automatisch sicher, dass der nicht mehr verwendete Speicherplatz freigegeben wird?

Ich stelle mir vor, dass hinter den Kulissen beim Schreiben aller Dateien dieselben Systemaufrufe des Betriebssystems verwendet werden und das Überschreiben daher programmübergreifend einheitlich behandelt wird ...

Antwort1

Es klingt, als ob Ihre Frage darauf zurückzuführen ist, dass der Prozess mehrere Dinge umfasst: Der gesamte ungenutzte Speicherplatz steht für andere Zwecke zur Verfügung und das Schreiben einer Datei mit demselben Namen wie eine vorhandene Datei wird an denselben Speicherort geschrieben. Beide Prämissen sind ungenau. Außerdem sprechen Sie davon, dass der nicht mehr verwendete Speicherplatz freigegeben wird. So wie es funktioniert, sind diese Begriffe irgendwie synonym; Speicherplatz wird entweder einer Datei zugewiesen oder nicht.

Wie davidgo beschrieben hat, arbeiten Laufwerke in ganzen Sektoren oder Blöcken. Ich werde die Speicherzuweisungseinheiten der Einfachheit halber einfach als „Blöcke“ bezeichnen. Der Speicherplatz wird in ganzen Blockeinheiten zugewiesen. Einer 1-Byte-Datei wird der gesamte Block zugewiesen. Wenn Sie also über winzige Dateien sprechen, wird allem, was kleiner als ein Block ist, immer noch ein ganzer Block zugewiesen. Kleine (Unterblock-)Dateien haben ungenutzten Speicherplatz im Block, der nicht für andere Zwecke zugänglich ist. Man könnte sagen, dass eine große Datei, die mehrere Blöcke verwendet, durch eine kleinere Datei ersetzt wird, die weniger Blöcke verwendet. In diesem Fall gibt es ganze Blöcke, die nicht mehr benötigt werden.

Die alte Datei wird nicht wirklich überschrieben. Die neue Datei wird an einem anderen Ort gespeichert und verwendet dabei so viele Blöcke wie nötig. Der Verweis in der Dateitabelle des Dateisystems auf die Blöcke der alten Datei wird geändert. Diese Blöcke werden keiner Datei mehr zugewiesen und stehen zur Wiederverwendung zur Verfügung. Der Inhalt der alten Datei wird im Rahmen dieses Vorgangs nicht gelöscht, sondern nur ignoriert, bis der Speicherplatz benötigt wird. Aus diesem Grund können Sie gelöschte Dateien wiederherstellen.

Sie haben gefragt, ob dies anders wäre, wenn Sie dd verwenden. dd kann auf viele Arten verwendet werden. Wenn Sie die Diskussion darauf beschränken, einfach eine neue Datei mit demselben Namen zu schreiben, würde das auf die gleiche Weise funktionieren.

Antwort2

Wie @KamilMaciorowski sagte, ist die Blockgröße auf der Festplatte ein Schlüsselelement der Frage. Es wäre verschwindend selten, ein modernes Dateisystem mit einer Blockgröße von weniger als 512 Byte zu finden (und die meisten haben viel größere Blockgrößen). Dies ist relevant, weil es bedeutet, dass, wenn Sie mit Dateioperationen arbeiten, die kleiner als die Blockgröße sind, diese Operationen genauso viele Ressourcen verbrauchen wie die Blockgröße -Die Antwort auf Ihre Frage lautet also NEIN - die 400-Byte-Datei, die 1 Block einnimmt, wird durch eine andere Datei ersetzt, die 1 Block verwendet. Der ursprüngliche Block wird wahrscheinlich freigegeben (aber möglicherweise überschrieben), aber Sie haben keinen Speicherplatz gespart

Ich vermute, Sie wissen das, aber für andere gilt: Es ist auch erwähnenswert, dass ein freigegebener Block normalerweise nicht überschrieben/gelöscht wird und oft wiederhergestellt werden kann. Dies gilt doppelt für SSDs, die das, was auf der Festplatte ist, noch weiter von dem abstrahieren, was das Betriebssystem sieht (dank Wear Leveling).

verwandte Informationen