Wie macht man Dateien spärlich?

8

Wenn ich eine große Datei habe, die viele Nullen enthält, wie kann ich sie effizient zu einer Sparse-Datei machen?

Ist die einzige Möglichkeit, die ganze Datei zu lesen (einschließlich aller Nullen, die möglicherweise nur spärlich gespeichert werden) und sie in eine neue Datei zu schreiben, indem Sie versuchen, die Nullstellen zu überspringen?

Oder gibt es eine Möglichkeit, dies in einer vorhandenen Datei zu machen (z. B. File.setSparse (langer Anfang, langes Ende))?

Ich suche nach einer Lösung in Java oder einigen Linux-Befehlen, Dateisystem ist ext3 oder ähnlich.

    
rurouni 13.05.2011, 08:38
quelle

4 Antworten

3

Einige Dateisysteme unter Linux / UNIX können Löcher in eine bestehende Datei "stanzen". Siehe:

Es ist nicht sehr portabel und nicht auf die gleiche Weise auf der ganzen Linie; Von jetzt an glaube ich, dass die IO-Bibliotheken von Java keine Schnittstelle dafür bieten.

Wenn die Lochung entweder über fcntl(F_FREESP) oder über einen anderen Mechanismus möglich ist, sollte sie wesentlich schneller sein als eine Kopier / Such-Schleife.

    
FrankH. 13.05.2011, 10:41
quelle
2

Ich denke, es wäre besser, wenn Sie die gesamte Datei vorbelegen und eine Tabelle / BitSet der Seiten / Abschnitte verwalten, die belegt sind.

Wenn Sie eine Datei spärlich erstellen, werden diese Abschnitte fragmentiert, wenn sie erneut verwendet werden. Vielleicht ist das Speichern von ein paar TB Speicherplatz auf der Festplatte den Leistungshit einer stark fragmentierten Datei nicht wert.

    
Peter Lawrey 13.05.2011 09:33
quelle
0

Laut diesem Artikel scheint es derzeit keine einfache Lösung zu geben, außer der Verwendung von FIEMAP ioctl. Ich weiß jedoch nicht, wie Sie "nicht spärliche" Nullblöcke zu "spärlichen" Blöcken machen können.

    
shodanex 13.05.2011 09:20
quelle
0

Sie können $ truncate -s filename filesize auf linux teminal verwenden, um Sparse-Dateien mit

zu erstellen

nur Metadaten.

HINWEIS --Filesize ist in Bytes.

    
Anil Kumar Arya 25.01.2012 05:48
quelle

Tags und Links