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