F2FS (англ. Flash-Friendly File System) — файловая система, ориентированная на использование на флеш-памяти, в том числе для использования с SSD для серверов и персональных компьютеров, с картами памяти (eMMC/SD) и со встроенными в различные потребительские устройства флеш-чипами.

F2FS
Разработчик Ким Хэ Гык (Kim Jaegeuk, кор. 김재극), Samsung Electronics, Motorola Mobility, Huawei и Google
Файловая система Флеш-дружелюбная файловая система (англ. Flash-Friendly File System)
Дата представления 2013-02[1] (Linux)
Структура
Содержимое папок Многоуровневая хеш-таблица
Размещение файлов Битовые поля (свободное место), Таблица
Ограничения
Максимальный размер файла 3,94 ТБ
Максимум файлов Зависит от размера тома
Максимальная длина имени файла 255 байт, 512 unicode для лейбла тома
Максимальный размер тома 16 ТБ
Возможности
Свойства время модификации (mtime), время изменения атрибута (ctime), время доступа (atime)
Точность хранения даты 1 нс
Атрибуты POSIX, расширенные атрибуты (xattrs)
Права доступа POSIX, ACL
Фоновая компрессия LZO, LZ4, zstd
Фоновое шифрование Есть[2]
Поддерживается ОС Linux и Android

Автор — разработчик Samsung Ким Чэ Гык (Kim Jaegeuk, кор. 김재극). Исходный код системы был открыт Samsung в октябре 2012[3][4], после чего доработан инженерами «Samsung» с учётом замечаний сообщества.

Поддержка F2FS включена в ядро Linux начиная с версии 3.8[5]. Параллельно развивается пакет f2fs-tools, содержащий набор утилит для обслуживания разделов F2FS (mkfs.f2fs, fsck.f2fs).

Разработана специально с учётом специфики флеш-памяти и учитывает такие особенности, как неизменное время доступа и ограниченный ресурс количества циклов перезаписи данных.

Особенности

править

Хранение структур данных организовано в форме LSM-дерева, при обновлении информации используется механизм копирования при записи — при изменении данные не перезаписываются, а сохраняются в новом месте. Для ускорения выполнения операций в процессе работы индексы с информацией о распределении данных хранятся в оперативной памяти. Схема работы системы нацелена на продление жизни флеш-накопителей, учитывает внутреннюю геометрию расположения чипов в носителе и работу контроллера; данные по возможности распределяются равномерно, сводя к минимуму повторную запись в одни и те же блоки. С этой целью используется алгоритм последовательного заполнения накопителя, при котором новые данные всегда записываются только в области, следующие после ранее записанных данных, без оглядки на возможную фрагментацию. После достижения конца тома запись начинается с начала, занимая, по возможности, освобождённые блоки. Для исключения конфликтов с логикой контроллера накопителя в F2FS учитывается специфика работы прослойки FTL (Flash Translation Layer), выполняющего на многих накопителях подобную задачу по равномерному заполнению. Для адаптации F2FS к различным видам флеш-накопителей, различающихся своими характеристиками в зависимости от внутренней геометрии и схемы управления, предусмотрен широкий спектр параметров для управления структурой распределения данных в разделе и предоставлена возможность выбора различных алгоритмов очистки и выделения блоков.

Система защищена от «эффекта снежного кома», проявляющегося при использовании гуляющих деревьев (wandering tree): в ситуации, когда вместо перезаписи создаются новые элементы (меняется номер блока), для деревьев, в которых родительский узел ссылается на дочерние узлы, изменение узла приводит к перестройке всех вышележащих узлов. Системе необходим сборщик мусора, выполняющийся в фоне в моменты простоя системы.

Для обеспечения целостности используется модель с фиксацией точек выполнения и возможностью отката изменений (англ. rollback) к точкам сохранения в случае возникновения проблем.

Раздел F2FS формируется из сегментов размером 2 МБ, сегменты группируются в секции, которые в свою очередь объединяются в зоны.

Поддерживается как традиционная для Unix схема разграничения доступа, так и такие расширенные механизмы, как xattr[англ.] и POSIX ACL.

Начиная с GRUB 2.04 (5 Июля 2019) можно использовать раздел с F2FS как загрузочный. Для ранних версий приходилось создавать отдельный загрузочный раздел на ext4 или других файловых системах, поддерживаемых GRUB.

Примечания

править
  1. Pull new F2FS filesystem from Jaegeuk Kim Архивная копия от 30 июня 2016 на Wayback Machine merged by Linus Torvalds
  2. Jaegeuk Kim. f2fs updates for v4.2 (24 июня 2015). Дата обращения: 7 октября 2020. Архивировано 17 января 2016 года.
  3. This is a new patch set for the f2fs file system Архивная копия от 18 января 2013 на Wayback Machine, LKML, 2012-10-05
  4. Samsung открыл код F2FS, новой файловой системы для Flash-накопителей Архивная копия от 18 апреля 2021 на Wayback Machine // opennet.ru, 05.10.2012
  5. "В состав ядра Linux 3.8 войдёт файловая система F2FS". OpenNET. Архивировано 12 октября 2020. Дата обращения: 7 октября 2020.

Ссылки

править