Fossil (файловая система)

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 23:09, 8 мая 2016.
Fossil File System
Полное название Fossil
Содержимое каталога Hash tree
Распределение файлов VAC
Ограничения
Макс. размер тома 16 TiB
Макс. количество файлов 232−3 (~4 billion)
Макс. длина имени файла 4032 bytes
Разрешенные символы
в именах файлов
All bytes except NUL and '/'
Особенности
Даты зарегистрирован archive (/archive/yyyy/mmdds), snapshots (/snapshot/yyyy/mmdd/hhmm)
Другие
Операционная система 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, так что мы можем гарантировать, что каждый блок-указателей содержит целое число указателей. В итоге полученная структура выглядит следующим образом :

Fossil0.png


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:

magic[4] 0x1c4d9072 (DirMagic)
version[2] 9
elem[s] Имя (только конечный элемент пути )
entry[4] номер записи для Venti файла или каталога
gen[4] номер поколения
mentry[4] номер записи для Venti метаданных файла
mgen[4] номер поколения
qid[8] уникальный серийный номер файла
mid[s] владелец
gid[s] группа
mid[s] Автор последнего изменения
mtime[4] Время последнего изменения
ctime[4] время создания
atime[4] время последнего доступа
mode[4] биты режима
Fossil Venti VAC.png

Связь между 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.