F2FS
F2FS (Flash-Friendly File System) — это файловая система с журналированием, разработанная компанией Samsung Electronics в 2012 году специально для устройств хранения данных на основе флеш-памяти NAND, включая твердотельные накопители (SSD), карты памяти и встроенные решения (eMMC, UFS). Основное назначение F2FS — учет особенностей флеш-памяти, таких как необходимость выравнивания износа (wear leveling) и сборки мусора (garbage collection), для обеспечения высокой производительности и долговечности накопителя. Файловая система оптимизирована для работы с блоками данных на физическом уровне, что отличает её от традиционных файловых систем, разработанных для механических жёстких дисков (например, ext4 или NTFS).
История
Разработка F2FS была начата в Samsung в 2010 году как ответ на растущее распространение флеш-памяти в мобильных устройствах и серверах. Первая версия была выпущена в 2012 году для ядра Linux (начиная с версии 3.8). В 2013 году поддержка F2FS была включена в ядро Linux 3.8, что сделало её доступной для широкого круга пользователей. В 2014 году компания Google начала использовать F2FS в Android-устройствах для улучшения скорости работы флеш-памяти. С тех пор F2FS остаётся основной файловой системой для многих смартфонов на Android, особенно в сегменте высокопроизводительных моделей.
В 2016 году F2FS получила поддержку шифрования на уровне файлов (fs-encryption), что повысило её популярность в корпоративном сегменте и мобильных ОС. В 2020–2022 годах в F2FS были добавлены режимы для работы с новыми типами NAND (например, QLC, 3D NAND) и улучшен алгоритм сбора мусора.
Архитектура и принципы работы
F2FS основана на концепции «сегментированного хранения» (segment-based layout), которая позволяет адаптировать операции ввода-вывода к физическим характеристикам флеш-памяти. В отличие от традиционных файловых систем, F2FS оперирует не секторами (обычно 512 байт), а страницами (страницы NAND — от 4 КБ до 16 КБ) и блоками (от 64 КБ до 2 МБ). Структура на диске включает несколько ключевых областей:
Основные метаданные
- Суперблок — хранит общие сведения о файловой системе (размер, версия, контрольные суммы).
- Зона контрольных точек (Checkpoint Area) — содержит информацию о состоянии системы после каждой транзакции.
- Главная таблица сегментов (Segment Information Table, SIT) — отслеживает, какие блоки заняты, а какие свободны.
- Таблица адресов сегментов (Segment Address Table, SAT) — сопоставляет логические номера сегментов с физическими адресами на флеш-памяти.
- Зона восстановления (Node Area) — хранит метаданные inode (дескрипторы файлов).
Зона данных
Данные в F2FS организованы в сегменты (обычно по 2 МБ). Каждый сегмент содержит несколько страниц. При записи новых данных F2FS использует стратегию «добавочной записи» (append-only), когда новые данные пишутся в свободные блоки, а старые версии помечаются как устаревшие. Это минимизирует операции стирания, так как флеш-память требует полного стирания блока перед повторной записью.
Особенности и преимущества
F2FS включает ряд механизмов, критических для долговечности и производительности флеш-памяти:
Выравнивание износа
F2FS использует алгоритм LFS (Log-structured File System), при котором данные и метаданные записываются последовательно в новые сегменты. Это позволяет равномерно распределять операции стирания по всем блокам NAND, что предотвращает преждевременный отказ некоторых секторов.
Сборка мусора
Файловая система имеет встроенный механизм сборки мусора (garbage collection). В фоновом режиме F2FS перераспределяет данные из сегментов с большим количеством устаревших страниц в новые сегменты, затем освобождённые блоки стираются. У пользователя есть возможность настроить порог запуска сборки мусора (например, при заполнении диска на 80–90 %).
Журналирование
F2FS поддерживает журналирование для защиты от сбоев питания. В отличие от ext4, где журнал может быть отдельным файлом или областью, в F2FS журнал интегрирован в структуру контрольных точек. Это снижает накладные расходы и повышает надёжность.
Разреженные файлы
Поддержка разреженных файлов (sparse files) позволяет создавать файлы большого размера, занимающие на диске только фактически записанные данные. Это экономит место на носителях с ограниченной ёмкостью.
Применение
F2FS широко используется в следующих областях:
- Мобильные устройства — смартфоны и планшеты на базе Android (например, с 2015 года в устройствах Google Nexus, Samsung Galaxy и других). По данным Google на 2023 год, F2FS является стандартной файловой системой для всех новых Android-устройств с флеш-памятью UFS.
- Встраиваемые системы — мультимедийные плееры, роутеры, умные часы, где важна долговечность NAND.
- Серверные системы — реже, но F2FS применяется в высоконагруженных базах данных (например, MySQL, MariaDB) на SSD из-за низкой фрагментации.
- Бытовые SSD — некоторые современные внешние накопители (особенно на базе интерфейсов USB 3.0 и NVMe) могут использовать F2FS для повышения скорости записи.
Ограничения и критика
Несмотря на преимущества, F2FS имеет ряд ограничений:
- Задержки при сборке мусора — при высокой фрагментации данных и недостатке свободного места процесс сборки мусора может приводить к кратковременным падениям производительности (на 20–40 % по данным тестов 2019–2021 годов).
- Потребление оперативной памяти — для обслуживания больших таблиц сегментов требуется до 5–10 % больше RAM, чем для ext4, что критично на устройствах с 1–2 ГБ ОЗУ.
- Реализация для других ОС — в 2022–2023 годах появились версии для FreeBSD и macOS, но их стабильность ниже, чем в Linux.
- Отсутствие поддержки дедупликации — в отличие от ZFS или Btrfs, F2FS не имеет встроенной дедупликации данных.
- Проблемы с гибридными накопителями — на старых SSD (SATA, MLC) и картах памяти (SD, microSD) выигрыш в производительности по сравнению с ext4 не столь значителен, иногда на 5–15 % ниже при последовательных операциях.
Интересные факты
- Название F2FS произносится как «эф-ту-эф-эс»; часто расшифровывается как «Flash-Friendly File System».
- В 2021 году корпорация Microsoft заявила о тестировании F2FS для Windows 10 в рамках проекта поддержки альтернативных файловых систем (для IoT и мобильных устройств).
- F2FS поддерживает 64-битные указатели, что позволяет работать с разделами объёмом до 16 ТБ (при странице 4 КБ).
- Одна из главных тем критикой F2FS в сообществе Linux — недостаточная эффективность на файлах с высоким уровнем фрагментации (например, видеозаписи большого размера), что компенсируется включением режима «small blocks» (размер блока 1 КБ).
Источники
- Lee, C., & Park, S. (2012). F2FS: A New File System for Flash Storage. Proceedings of the USENIX Annual Technical Conference.
- Документация ядра Linux: Documentation/filesystems/f2fs.rst (актуально на 2023 г.).
- Официальное руководство Samsung по F2FS (версия 1.1, 2014 г.).
- Тесты производительности флеш-систем: LWN.net, статии от 2019–2023 гг. (архив).
- База знаний Google Android: раздел о файловых системах (2023 г.).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →