4.8.4 Журналирующие файловые системы для флеш-памяти — JFFS and JFFS2

Предыдущая  Содержание  Следующая V*D*V

Традиционные файловые системы не были предназначены ни для встраиваемых систем, ни для механизмов хранения на основе флеш-памяти. Давайте кратко перечислим то, что мы хотим от файловой системы на основе флеш-памяти:

 

Выравнивание износа

Отсутствие повреждения данных при внезапном прекращении подачи электроэнергии

Прямое использование API на уровне MTD вместо уровней трансляции

 

В 1999 году компания Axis Communications выпустила JFFS для ядра Linux версии 2.0 со всеми вышеперечисленными возможностями. Она была быстро перенесена на серии ядер 2.2 и 2.3. Но тогда не хватало поддержки сжатия и таким образом был начат проект JFFS2. JFFS2 был выпущена для серии ядер версии 2.4 и быстро обогнала JFFS из-за расширенных возможностей. И JFFS, и JFFS2 являются журналирующими файловыми системами; любые изменения в файле записываются как  данные в журнале, который непосредственно хранится во флеш-памяти (журналы также называются узлами).

Такой журнал будет содержать:

 

Идентификатор файла, для которого ведётся журнал

Версия, которая является уникальной в журнале, принадлежащем данному файлу

Метаданные, например, временная метка

Данные и размер данных

Смещение данных в файле

 

Запись в файл создаёт журнал, в который записывается смещение в файле, где записываются данные, и размер записанных данных вместе с фактическими данными. Когда файл должен быть прочитан, журналы прочитываются, и используя размер данных и смещение, пересоздаются файлы. Со временем некоторые журналы устаревают частично или полностью; они должны быть очищены. Этот процесс называется уборкой мусора. Результат уборки мусора заключается в определении чистых стёртых блоков. Уборка мусора должна также предусматривать выравнивание износа, для уверенности, что все стёртые блоки имеют шанс появиться в списке свободных.

Основными особенностями JFFS2 файловой системы являются:

 

Управление стиранием блоков: в JFFS2 стёртые блоки размещены в трёх списках: чистом, грязном и свободном. Чистый список содержит только достоверные журналы (то есть журналы не ставшие недействительными из-за появления более новых). Грязный список содержит один или несколько журналов, которые являются устаревшими и, следовательно, могут быть удалены при вызове уборщика мусора. Свободный список не содержит журналы и, следовательно, может быть использован для сохранения новых журналов.

Уборка мусора: уборка мусора в JFFS2 происходит в контексте отдельного потока, который запускается, когда файловая система JFFS2 монтируется. Для обеспечения выравнивания износа в каждые 99 из 100 раз этот поток будет забирать блок из грязного списка и в один из 100 будет забирать блок из чистого списка. JFFS2 резервирует пять блоков для выполнения уборки мусора (это число, кажется, было выбрано эвристически).

Сжатие: отличительная особенность между JFFS и JFFS2 в том, что JFFS2 предоставляет несколько способов сжатия,  в том числе zlib и rubin.

 

Образ файловой системы JFFS/JFFS2 для целевой платформы может быть создан с помощью команд mkfs.jffs и mkfs.jffs2. Обе эти команды принимают в качестве аргумента дерево каталогов и создают образ на основном компьютере, используемом для разработки. Эти образы должны быть загружены на целевую платформу и записаны в соответствующие разделы флеш-памяти; такая возможность предоставляется большинством загрузчиков Linux.

 

Предыдущая  Содержание  Следующая