Fossil (файловая система)
Последнее изменение этой страницы: 23:09, 8 мая 2016.
Полное название | Fossil |
---|---|
Содержимое каталога | Hash tree |
Распределение файлов | VAC |
Limits | |
Макс. размер тома | 16 TiB |
Макс. размер файла | 1 EiB (8 TiB) |
Макс. количество файлов | 232−3 (~4 billion) |
Макс. длина имени файла | 4032 bytes |
Разрешенные символы в именах файлов |
All bytes except NUL and '/' |
Features | |
Даты зарегистрирован | archive (/archive/yyyy/mmdds), snapshots (/snapshot/yyyy/mmdd/hhmm) |
Прозрачное сжатие | No |
Транспорантное шифрование | No |
Другие | |
Операционная система | Plan 9 |
Fossil - файловая система, созданная фирмой Bell Labs в 2003 году и устанавливаемая в ОС Plan 9 по умолчанию. Fossil идеально подходит для частого архивирования данных благодаря технологии "снимков" (snapshots). "Снимки" или копии данных, создающиеся по команде или автоматически, хранятся на диске, пока это позволяет объем свободного места.
Содержание
Plan 9
Plan 9 — операционная система, разработанная Bell Labs (позже Lucent Technologies, сейчас подразделение в Alcatel-Lucent) с конца 1980-х гг. Идеология UNIX — «Всё есть файл» легла в основу системы.
- В 2000 году система вышла с открытыми исходными кодами и в 2002 году под свободной лицензией (Lucent Public License), одобренной OSI.
- В феврале 2014 года Калифорнийский университет в Беркли получил от компании Alcatel-Lucent право публикации исходного кода Plan 9 под GNU GPLv2.
- Plan 9 имеет компактный код, и таким образом с лёгкостью может быть портирована на любую процессорную архитектуру, поддерживающую аппаратный MMU.
Введение
Fossil - это архивный файловый сервер, созданный для ОС Plan 9. В обычной конфигурации, он является традиционной файловой системой в разделе локального диска и периодически архивирует (делает снимки) файловой системы на Venti сервере. Архивы(снимки) доступны через интерфейс файловой системы. Также Fossil может работать и без Venti сервера, в этом случае снимки (если таковые имеются) сохраняются на диск.
Venti деревья и иерархии каталога
Venti - это архивный сервер хранения блоков. После того, как блок сохранится, он может быть извлечен путем предоставления 20-байтного хеша SHA1, называемого меткой. Блоки на Venti имеют максимальную длину около 56 килобайт, хотя на практике используются меньшие блоки. Чтобы сохранить поток байтов произвольной длины, Venti использует хэш - дерево. Поток данных разбивается на куски фиксированного размера (dsize), которые хранятся на сервере Venti. Полученные метки объединяются в новый поток указателей, который также разбивается на куски фиксированного размера (psize) и также хранятся на Venti сервере. Psize отличается от dsize, так что мы можем гарантировать, что каждый блок-указателей содержит целое число указателей. В итоге полученная структура выглядит следующим образом :
gen[4] | Номер поколения |
---|---|
psize[2] | размер указателя блоков |
dsize[2] | размер блоков данных |
flags[1] | флаги |
size[6] | длина файла |
score[20] | метка корневого блока в дереве |
Листья это исходный поток данных. Эти блоки имеют тип VtDataType. Первый поток указатель имеет тип VtPointerType0, следующий имеет тип VtPointerType1, и так далее. Фигура заканчивается одиночным блоком типа VtPointerType2, но в целом деревья могут иметь высоту до VtPointerType6. Для dsize 8192 байт и psize из 8180 байт (409 указателей), это дает максимальный размер потока приблизительно 10 зеттабайт,
Для восстанавливая потока данных требует метка и тип самого верхнего блока в дереве, размер порции данных, размер указателя куска, и размер потока данных. Вся эта информация хранится в 40-байтовых структурах, называемых VtEntry:
Формат файловых систем VAC (venti archive)
VAC строит традиционную файловую систему, используя иерархию Venti. Каждый VAC файл реализован в виде файла Venti. Каждый VAC каталог реализован в виде каталога Venti и Venti файлов, что обеспечивает традиционность метаданных в файловой системе. Метаданные хранятся в структуре, называемой DirEntry: DirEntry:
|
Связь между Venti файлов и каталогов и VAC файлов и каталогов можно увидеть на этом рисунке. |
Формат ФС Fossil
Fossil использует формат VAC, с некоторыми небольшими изменениями. Изменения затрагивают только данные на локальном диске. Данные архивируются в Venti именно в VAC формате. Блоки, хранящиеся на локальном диске, могут содержать указатели на локальные дисковые блоки или Venti блоки. Локальные адреса блоков хранятся в виде 20-байтовых указателей, в которых первые 16 байт все равны нулю и последние 4 байта определяют номер блока на диске. Перед архивированием блока, все блоки на которые он указывает, должны быть заархивированы, а локальные указатели в блоке должен быть изменен на VENTI указатели. Использование адресов блоков, а не хэшей для локальных данных упрощает управление файловой системой: если содержание локального блока изменится, указатель на блок не нужно будет менять.
Снимки (Snapshots)
Fossil является архивным файл-сервером. Она делает периодические снимки файловой системы, которые доступными через саму файловую систему. В частности, активный файловая система представлена в /active. Текущие снимки (те, которые хранятся на локальном диске и в конце концов удаляются) представлены в /snapshot/yyyy/mmdd/hhmm. Архивные снимки (те, которые находятся в архиве Venti и сохраняются навсегда) в: /archive/yyyy/mmdds (s - порядковый номер снимка)
Источники
- Gregory R. Ganger, Marshall Kirk McKusick, Craig A. N. Soules, and Yale N. Patt. ‘‘Soft Updates: A Solution to the Metadata Update Problem in File Systems,’’ ACM Transactions on Computer Systems, Vol 18., No. 2, May 2000, pp. 127-153.
- Sean Quinlan, ‘‘A Cached WORM File System,’’ Software—Practice and Experience, Vol 21., No 12., December 1991, pp. 1289-1299.
- Sean Quinlan and Sean Dorward, ‘‘Venti: A New Approach to Archival Storage,’’ Usenix Conference on File and Storage Technologies, 2002.
ISSN 2542-0356
Следуй за Полисом
Оставайся в курсе последних событий
Лицензия
Если не указано иное, содержание этой страницы доступно по лицензии Creative Commons «Attribution-NonCommercial-NoDerivatives» 4.0, а примеры кода – по лицензии Apache 2.0. Подробнее см. Условия использования.