Meistens Loop-Gerät (V-Node-Disk) basiert auf einer Datei mit einer vorab zugewiesenen 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 vom Betriebssystem unterstützten Dateisystem formatiert werden, z. ext3.

Andererseits ermöglicht FUSE das Mounten von Archiven mit Schreibunterstützung, d. H. Archivierung . Es ist möglich, Dateien auf das bereitgestellte Laufwerk zu schreiben, und das zugrunde liegende Archiv wächst, um alle darauf geschriebenen Dateien aufzunehmen. In gewisser Weise verhält es sich also wie ein Blockgerät, jedoch ohne ein bestimmtes Dateisystem. Das Dateisystem wird durch den Archivtyp bestimmt, z. Reißverschluss, Teer.

Ich suche nach einer Implementierung eines dateibasierten Geräts, das dynamisch wachsen kann, um eine beliebige Anzahl von Dateien aufzunehmen (verhält sich wie ein mit FUSE gemountetes Archiv), aber mit einer effizienten Implementierung von Lese- / Schreib- / Suchoperationen (wie dies der Fall wäre) ein Dateisystem in einem Blockgerät).

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

Als Beispiel für das, was ich meine, betrachten wir ein unkomprimiertes tar-Archiv, das mit archivemount gemountet wurde. Es unterstützt Lese- / Schreibvorgänge, aber die Suchoperation ist nicht effizient, da Tar-Archive das Inhaltsverzeichnis nicht unterstützen - sie sollen mit Bandarchiven arbeiten.

Bei ZIP-Archiven, die mit archivemount gemountet wurden, ist das Lesen und Suchen effizient, da zip das Inhaltsverzeichnis unterstützt. Das Schreiben ist jedoch nicht effizient, da häufig das gesamte Archiv erneut komprimiert wird.

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

Ein weiteres Beispiel ist die dateibasierte CouchDB Datenbank oder die MBox Datei Format. In beiden Fällen werden Daten immer an die Datei angehängt (z. B. wird eine Datei nicht gelöscht, sondern als gelöscht markiert und eine neue Version angehängt). Und um den von Zeit zu Zeit von gelöschten Dateien belegten Speicherplatz wiederzugewinnen, muss die Datei komprimiert werden. Mit einer solchen Datei sind alle Operationen schnell, einschließlich der Suche, 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 dateibasierten Geräts?

Amiramix
quelle