Введение

Файловая система с лог-структурой

Файловая система с журнальным ведением (англ. Journaling Flash File System, JFFS) — это лог-структурированная файловая система, предназначенная для использования на устройствах NOR flash-памяти в операционной системе Linux. Она была вытеснена JFFS2.

Дизайн

Флэш-память (в частности, флэш-память NOR) должна быть стерта перед записью. Процесс стирания имеет ряд ограничений: стирание очень медленное (обычно 1–100 мс на блок стирания, что в 103–105 раз медленнее, чем чтение данных из того же региона). Стирание флэш-памяти возможно только большими сегментами (обычно 64 КБ или более), в то время как чтение и запись могут выполняться в меньших блоках (часто 512 байт). Флэш-память можно стереть лишь ограниченное количество раз (обычно 103–106), прежде чем она выйдет из строя. Эти ограничения в совокупности создают существенную асимметрию между схемами чтения и записи доступа к флэш-памяти. В отличие от этого, магнитные жесткие диски обеспечивают почти симметричный доступ на чтение и запись: скорость чтения и скорость записи почти одинаковы (поскольку обе ограничены скоростью вращения диска), можно читать и записывать небольшие блоки или секторы (обычно 512 или 4096 байт), и практически нет ограничений на количество циклов записи и перезаписи магнитных носителей. Традиционные файловые системы, такие как ext2 или FAT, разработанные для использования на магнитных носителях, обычно обновляют свои структуры данных на месте, при этом структуры данных, такие как inode и каталоги, обновляются на диске после каждого изменения. Эта концентрация отсутствия выравнивания износа делает обычные файловые системы непригодными для использования с флэш-устройствами в режиме чтения-записи. JFFS обеспечивает выравнивание износа, рассматривая флэш-устройство как кольцевой журнал. Все изменения файлов и каталогов записываются в конец журнала в виде узлов. В каждом узле сначала записывается заголовок, содержащий метаданные, а затем, при наличии, данные файла. Узлы связываются друг с другом с помощью указателей смещения в заголовке. Узлы изначально являются действительными, а затем становятся устаревшими при создании новой версии. Свободное пространство в файловой системе – это промежуток между концом и началом журнала. Когда свободного места становится мало, сборщик мусора копирует действительные узлы от начала к концу журнала, пропуская устаревшие, тем самым освобождая место.