5 Stimmen

Wie man einige Blöcke aus einer Sparse-Datei auf einem ext2/ext3-Dateisystem entfernt

Das ext2/ext3-Dateisystem weist automatisch Blöcke zu, wenn Sie eine Sparse-Datei schreiben, aber wenn ich einige Blöcke nicht mehr benötige, habe ich keine Möglichkeit gefunden, dies zu tun. Es fühlt sich an wie die Verwendung von malloc() ohne free(). Ist es möglich, einige Blöcke einer Sparse-Datei "freizugeben"? Wenn ja, wie? Sagen Sie mir nicht, dass ich sie in eine neue Datei kopieren soll. Das ist zu langweilig und braucht eine Menge Speicherplatz.

6voto

MvG Punkte 54213

Seit Linux 2.6.38 gibt es ein Flag, das fallocate genannt. FALLOC_FL_PUNCH_HOLE die das tun sollte, was Sie wollen, nämlich die Freigabe von Dateispeicherplatz an beliebigen Stellen.

fallocate(fd, FALLOC_FL_PUNCH_HOLE|FALLOC_FL_KEEP_SIZE, offset, len);

wird ein Loch in die durch den Deskriptor fd angegebene Datei stanzen. Das Loch beginnt bei offset und haben die Länge len , beide gemessen in Bytes. Nur ganze Blöcke werden tatsächlich entfernt, Teilblöcke werden stattdessen mit Nullen versehen.

1 Stimmen

Diese Funktion wurde nun endlich in den Linux-Kernel aufgenommen. Vielen Dank für die Beantwortung meiner 3 Jahre alten Frage :D

2voto

Das einzige, was Sie tun können, ist ftruncate() aufzurufen, um Blöcke am Ende der Datei zu entfernen.

0voto

Bombe Punkte 77831

Dateisysteme weisen nur Blöcke für die Teile der Sparse-Datei zu, die tatsächlich einen Inhalt haben. Entfernen von die Blöcke wären ziemlich dumm, denn das sind Ihre Daten. Die anderen Blöcke können nicht entfernt werden, weil sie nicht existieren.

0 Stimmen

Aber es gibt tatsächlich Situationen, in denen ich einige Blöcke einer Datei nicht mehr benötige und den Platz an das Dateisystem zurückgeben möchte.

-2voto

erk Punkte 1

Schreiben Sie Nullen in die Teile, die Sie nicht wollen.

2 Stimmen

Dies wird nicht funktionieren, da der Block nun Nullen anstelle des "Lochs" enthält, nach dem die ursprüngliche Frage sucht.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X