Dateibasiertes Loop-Gerät mit Schreibunterstützung und dynamischer Größe

670
Amiramix

Normalerweise basiert das Loop-Gerät (v-node-Diskette) auf einer Datei mit vorab zugewiesener Größe (z. B. einem Image eines Diskettenlaufwerks oder einer ISO-Diskette). Das Gerät wird dann als Blockgerät behandelt und kann mit jedem Dateisystem formatiert werden, das vom Betriebssystem unterstützt wird, z. B. ext3.

Auf der anderen Seite ermöglicht FUSE das Anhängen von Archiven mit Schreibunterstützung, dh Archivierung . Es ist möglich, Dateien auf das angehängte Laufwerk zu schreiben, und das zugrunde liegende Archiv wird so erweitert, dass alle darin gespeicherten Dateien gespeichert werden können. In gewisser Weise verhält es sich wie ein Blockgerät, jedoch ohne ein bestimmtes Dateisystem - das Dateisystem wird vom Archivtyp bestimmt, z. B. zip, tar.

Ich bin auf der Suche nach einer Implementierung eines dateigesicherten Geräts, das dynamisch wachsen kann, um eine beliebige Anzahl von Dateien aufzunehmen (verhält sich wie ein mit FUSE eingehängtes Archiv), jedoch mit einer effizienten Implementierung von Lese- / Schreib- / Suchoperationen (wie es der Fall wäre.) ein Dateisystem in einem Blockgerät).

Mit effizient meine ich effizienter als das lineare Durchsuchen der Datei, also möglicherweise mit einer Art verteilter Indizierung der in der Datei enthaltenen Dateien.

Als ein Beispiel dessen, was ich meine, betrachten wir ein unkomprimiertes tar-Archiv, das mit archivemount gemountet ist. Es unterstützt Lesen / Schreiben, aber der Suchvorgang ist nicht effizient, da tar-Archive kein Inhaltsverzeichnis unterstützen - sie sollen mit Bandarchiven arbeiten.

Im Falle von ZIP-Archiven, die mit Archivmount geladen und gelesen und gesucht werden, ist dies effizient, da ZIP das Inhaltsverzeichnis unterstützt. Das Schreiben ist jedoch nicht effizient, da es häufig erforderlich ist, das gesamte Archiv zu rekomprimieren.

Ein anderes Beispiel wäre eine spärliche Datei, die über ein Loop-Gerät eingehängt wird - sie ist spärlich, sodass sie dynamisch wachsen kann, jedoch bis zu einer festgelegten festen Größe, die meine Anforderung nicht erfüllt.

Ein weiteres Beispiel ist die Dateizugabe der CouchDB- Datenbank oder des MBox- Dateiformats. In beiden Fällen werden Daten immer an die Datei angehängt (zB anstatt sie zu löschen, werden sie als gelöscht markiert und eine neue Version angehängt). Und um den Speicherplatz für gelöschte Dateien von Zeit zu Zeit wiederzugewinnen, muss die Datei komprimiert werden. Mit einer solchen Datei sind alle Vorgänge einschließlich der Suche schnell, da immer die letzte Version der Datei gelesen wird. Ich kenne jedoch keine solche Implementierung, um beliebige Dateien zu speichern.

Gibt es eine solche Implementierung eines Datei-unterstützten Geräts?

1

0 Antworten auf die Frage