Обычно устройство петли (диск v-узла) основано на файле с предварительно назначенным размером (например, образ дисковода гибких дисков или диска ISO). Устройство затем обрабатывается как блочное устройство и может быть отформатировано в любой файловой системе, поддерживаемой операционной системой, например ext3.
С другой стороны, FUSE позволяет монтировать архивы с записью поддержки, т.е. archivemount. Можно записывать файлы на подключенный диск, и основной архив будет увеличиваться для размещения всех файлов, записанных на него. Таким образом, он ведет себя как блочное устройство, но без определенной файловой системы - файловая система определяется типом архива, например, zip, tar.
Я ищу реализацию устройства с файловой поддержкой, которое может динамически расти, чтобы вместить любое количество файлов (ведет себя как архив, смонтированный с FUSE), но с эффективной реализацией операций чтения / записи / поиска (как это было бы в случае с файловая система в блочном устройстве).
Под эффективностью я подразумеваю более эффективный, чем линейный поиск в файле, поэтому, возможно, с некоторой распределенной индексацией файлов, содержащихся в файле.
В качестве примера того, что я имею в виду, давайте рассмотрим несжатый архив tar, смонтированный с archivemount. Он поддерживает чтение / запись, но операция поиска неэффективна, поскольку tar-архивы не поддерживают TOC - они должны работать с ленточными архивами.
В случае zip-архивов, смонтированных с помощью функции mountmount, чтение и поиск эффективны, потому что zip поддерживает TOC, однако запись неэффективна, поскольку часто включает повторное сжатие всего архива.
Другим примером может быть разреженный файл, монтируемый через петлевое устройство - он разреженный, поэтому он может динамически увеличиваться, но до указанного фиксированного максимального размера, что не соответствует моим требованиям.
Еще один пример - файл базы данных CouchDB или формат файла MBox . В обоих случаях данные всегда добавляются в файл (например, вместо удаления файла он помечает его как удаленный и добавляет новую версию). И чтобы освободить место, используемое время от времени удаленными файлами, файл должен быть сжат. С таким файлом все операции выполняются быстро, включая поиск, потому что он всегда читает последнюю версию файла. Однако я не знаю ни одной такой реализации для хранения произвольных файлов.
Итак, существует ли такая реализация устройства с файловой поддержкой?