Перейти до вмісту

F2FS

Очікує на перевірку
Матеріал з Вікіпедії — вільної енциклопедії.
F2FS
РозробникSamsung Electronics, спільнота розробників Linux
Повна назваFlash-Friendly File System
Представлено18 лютого 2013 року (Linux 3.8)[1] (Linux)
Структура
Вміст директорійбагаторівнева хеш-таблиця
Виділення простору під файлиіндексні вузли, прямі та непрямі блоки посилань; таблиця адрес вузлів (NAT)
Обмеження
Максимальний розмір файлуприблизно 3,94 ТіБ (за блоків 4 КіБ)[2]
Максимум файлівзалежить від обсягу файлової системи та доступних індексних вузлів
Максимальна довжина імені файлу255 байтів[3]
Максимальний розмір тому16 ТіБ (за блоків 4 КіБ)[4]
Можливості
Дати що записуютьсядоступ (atime), зміна вмісту (mtime), зміна метаданих (ctime), створення (crtime)
Точність збереження дати1 нс[3]
Атрибутирозширені атрибути, атрибути POSIX
Управління правами доступуPOSIX, POSIX ACL
СтисканняLZO, LZ4, Zstandard (zstd), LZO-RLE[2]
Шифруванняfscrypt
Операційні системи в яких підтримуєтьсяLinux, Android

F2FS (від англ. Flash-Friendly File System — «файлова система, пристосована до флешпам'яті») — файлова система для Linux, розроблена насамперед для флешпам'яті типу NAND, зокрема твердотілих накопичувачів (SSD), eMMC, карт пам'яті SD та вбудованих накопичувачів мобільних пристроїв. Її початкову реалізацію створили інженери Samsung Electronics; у жовтні 2012 року початковий код запропонували для включення до ядра Linux.[5] F2FS увійшла до основної гілки ядра у версії 3.8, випущеній у лютому 2013 року.[1]

За принципами роботи F2FS належить до журнально-структурованих файлових систем (англ. log-structured file system, LFS): вона переважно розміщує нові та змінені дані в інших блоках, замість багаторазового перезапису тих самих логічних адрес. На відміну від класичних LFS, F2FS має адаптивне виділення блоків, багаторівневе індексування й механізми очищення сегментів, спрямовані на зменшення накладних витрат під час роботи з флешнакопичувачами.[2][6]

Історія

[ред. | ред. код]

5 жовтня 2012 року інженер Samsung Jaegeuk Kim представив у розсилках розробників Linux набір виправлень із початковою реалізацією F2FS. До нього входили код файлової системи, опис формату даних на диску, механізми керування сегментами та відновлення після збоїв. Одночасно було представлено інструмент створення файлової системи mkfs.f2fs.[5]

Під час циклу розробки Linux 3.8 у грудні 2012 року код F2FS об'єднали з основною гілкою ядра. Офіційний випуск Linux 3.8 відбувся 18 лютого 2013 року.[7][1] Надалі підтримку й можливості F2FS розширювали в наступних випусках Linux. У 2015 році розробники Samsung опублікували докладний опис архітектури й експериментальних результатів у матеріалах конференції FAST '15.[6]

Принципи роботи

[ред. | ред. код]

Особливості флешпам'яті

[ред. | ред. код]

На відміну від жорстких дисків із рухомими механічними частинами, накопичувачі на основі NAND мають іншу організацію запису й стирання даних. Операції стирання виконують над більшими ділянками пам'яті, ніж операції читання та запису; комірки також мають обмежений ресурс циклів програмування й стирання. Більшість SSD, eMMC та SD-карт приховують фізичну будову NAND за рівнем трансляції флешпам'яті (англ. Flash Translation Layer, FTL), який зіставляє логічні адреси блоків із фізичними й реалізує, зокрема, розподіл зношування.[6]

F2FS працює поверх блокового інтерфейсу накопичувача й не замінює його FTL. Її мета — організувати розміщення даних так, щоб зменшувати зайві записи, враховувати просторову локальність звернень та полегшувати роботу контролера. Для пристроїв із різною геометрією доступні параметри налаштування розміру секцій і зон, виділення місця та очищення.[2][6]

Структура тома

[ред. | ред. код]

Простір F2FS поділено на сегменти розміром 2 МіБ. Послідовні сегменти утворюють секції, а секції об'єднуються в зони. Типово секція і зона містять по одному сегменту, проте їхні розміри можна змінювати під час форматування відповідно до властивостей накопичувача.[2]

У файловій системі передбачено шість основних областей:[2]

ОбластьПризначення
Superblock (SB)Суперблок із основними параметрами файлової системи; зберігається у двох копіях.
Checkpoint (CP)Дані контрольних точок, за якими відновлюють узгоджений стан файлової системи.
Segment Information Table (SIT)Таблиця сегментів із кількістю та бітовою картою дійсних блоків.
Node Address Table (NAT)Таблиця відповідності ідентифікаторів індексних вузлів адресам блоків, де вони зберігаються.
Segment Summary Area (SSA)Відомості про належність блоків даних та індексних вузлів.
Main AreaОсновна ділянка з даними файлів і каталогів, а також їхніми індексами.

Індексування файлів і каталогів

[ред. | ред. код]

Для адресації даних F2FS використовує індексні дескриптори (inode), прямі й непрямі блоки посилань. Таблиця NAT дозволяє знайти адресу блока індексного вузла за його ідентифікатором. Завдяки цьому під час переміщення вузла не потрібно щоразу переписувати весь ланцюг батьківських покажчиків. Такий підхід зменшує так звану проблему «блукального дерева» (англ. wandering tree), властиву деяким журнально-структурованим файловим системам.[2][6]

Для пошуку записів у каталогах застосовується багаторівнева хеш-таблиця. Ім'я файлу перетворюють на хеш, за яким визначають відповідний кошик на кожному рівні. Максимальна довжина імені становить 255 байтів.[2][3]

Запис і очищення сегментів

[ред. | ред. код]

F2FS розділяє дані за передбачуваною частотою змін на «гарячі», «теплі» й «холодні». У типовій конфігурації для даних та індексних вузлів підтримуються шість активних потоків запису. Таке розділення дає змогу не змішувати часто змінювані блоки з даними, які змінюються рідко, та зменшувати обсяг їхнього подальшого переміщення.[2]

Для виділення блоків застосовується гібридна стратегія: за наявності достатнього вільного місця перевагу надають послідовному заповненню вільних сегментів, а за інших умов можливе повторне використання незайнятих блоків у частково заповнених сегментах. Отже, F2FS не гарантує, що кожен запис буде суто послідовним.[6][2]

Оскільки після зміни або видалення файлів частина блоків стає застарілою, F2FS має механізм збирання сміття (англ. garbage collection). Він вибирає сегменти для очищення, переносить потрібні блоки й повертає звільнене місце до повторного використання. Очищення відбувається у фоновому режимі або під час нестачі вільних сегментів; для вибору сегментів передбачено стратегії за найменшою кількістю дійсних блоків та за співвідношенням витрат і вигоди. За підтримки накопичувачем можуть надсилатися команди TRIM/discard.[2]

Цілісність даних і відновлення

[ред. | ред. код]

Для підтримання узгодженості метаданих F2FS використовує контрольні точки (checkpoints). Вони містять інформацію про стан основних таблиць і активних сегментів. На диску зберігаються дві копії контрольних точок; під час монтування система визначає останню придатну. Додатковий механізм roll-forward recovery дає змогу відновлювати певні операції, завершені після останньої контрольної точки, з урахуванням записів синхронізації файлів.[2][6]

Контрольні точки не є повноцінною системою знімків стану (snapshots) для користувача: їх призначення — відновлення роботи файлової системи після збою, а не зберігання довільних історичних версій файлів.[2]

Можливості

[ред. | ред. код]

Окрім базових операцій із файлами й каталогами, F2FS підтримує низку можливостей, властивих сучасним файловим системам Linux:[2]

  • права доступу POSIX, списки контролю доступу (ACL), розширені атрибути й дискові квоти;
  • зберігання вмісту невеликих файлів і записів невеликих каталогів безпосередньо в індексному вузлі (inline data, inline dentries);
  • шифрування файлів через підсистему fscrypt, зокрема для використання в Android;[8]
  • перевірку цілісності незмінюваних файлів за допомогою fs-verity, підтримувану від Linux 5.4;[9]
  • стиснення даних алгоритмами LZO, LZ4, Zstandard та LZO-RLE; його можна вмикати для окремих файлів, каталогів або за розширеннями імен. Стиснення призначене насамперед для даних, що рідко перезаписуються, оскільки часті зміни можуть збільшувати обсяг запису;[2]
  • підтримку зонованих блокових пристроїв, зокрема накопичувачів із NVMe Zoned Namespaces, за відповідної конфігурації файлової системи та пристроїв.[4]

Використання та обслуговування

[ред. | ред. код]

F2FS підтримується безпосередньо ядром Linux і може застосовуватися як файлова система звичайних розділів або розділів даних вбудованих пристроїв. В Android вона є одним із підтримуваних варіантів для зберігання даних користувача; документація проєкту також рекомендує її для флешнакопичувачів, які використовують як прийняті (adoptable) носії.[10] Файли з розділів F2FS здатний читати також GNU GRUB; підтримка цієї файлової системи з'явилася у його коді перед випуском версії 2.04. [11] [12]

Окремий проєкт f2fs-tools містить програми для роботи з файловою системою:[2]

  • mkfs.f2fs — створення файлової системи;
  • fsck.f2fs — перевірка узгодженості й виправлення виявлених порушень;
  • dump.f2fs — перегляд службових структур;
  • resize.f2fs — зміна розміру файлової системи;
  • defrag.f2fs — дефрагментація;
  • f2fs_io — доступ до спеціалізованих операцій F2FS і діагностика.

Продуктивність F2FS залежить від типу накопичувача, його контролера, заповненості тома та характеру навантаження. У дослідженні розробників 2015 року на окремих тестах F2FS випереджала ext4, однак такі результати стосуються випробуваних конфігурацій і не означають універсальної переваги над іншими файловими системами.[6]

Див. також

[ред. | ред. код]
  • ext4 — широко використовувана файлова система Linux.
  • exFAT — файлова система, поширена на знімних носіях.
  • Btrfs — файлова система Linux з іншою архітектурою та набором можливостей.
  • UBIFS — файлова система для безпосередньої роботи з сирою флешпам'яттю через підсистему UBI.

Примітки

[ред. | ред. код]
  1. 1 2 3 Linux 3.8. KernelNewbies. Процитовано 11 листопада 2026.
  2. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Flash-Friendly File System (F2FS). The Linux Kernel documentation. Процитовано 11 листопада 2026.
  3. 1 2 3 include/linux/f2fs_fs.h. Linux kernel source. Процитовано 11 листопада 2026.
  4. 1 2 F2FS File System. Zoned Storage. Процитовано 11 листопада 2026.
  5. 1 2 Jaegeuk Kim (5 жовтня 2012). f2fs: introduce flash-friendly file system. LWN.net (архів розсилки Linux). Процитовано 11 листопада 2026.
  6. 1 2 3 4 5 6 7 8 Changman Lee; Dongho Sim; Joo-Young Hwang; Sangyeun Cho (2015). F2FS: A New File System for Flash Storage (PDF). 13th USENIX Conference on File and Storage Technologies (FAST '15). USENIX Association. с. 273—286. Процитовано 11 листопада 2026.
  7. ↑ Michael Larabel (22 грудня 2012). F2FS File-System Merged Into Linux 3.8 Kernel. Phoronix. Процитовано 11 листопада 2026.
  8. ↑ File-based encryption. Android Open Source Project. Процитовано 11 листопада 2026.
  9. ↑ fs-verity: read-only file-based authenticity protection. The Linux Kernel documentation. Процитовано 11 листопада 2026.
  10. ↑ Adoptable storage. Android Open Source Project. Процитовано 11 листопада 2026.
  11. ↑ Features. GNU GRUB Manual. GNU Project. Процитовано 11 листопада 2026.
  12. ↑ ChangeLog — GRUB 2.04. Debian Sources. Процитовано 11 листопада 2026.

Література

[ред. | ред. код]
  • Lee, Changman; Sim, Dongho; Hwang, Joo-Young; Cho, Sangyeun. F2FS: A New File System for Flash Storage // 13th USENIX Conference on File and Storage Technologies (FAST '15). — USENIX Association, 2015. — P. 273–286.

Посилання

[ред. | ред. код]
  • F2FS — офіційна документація ядра Linux (англійською).
  • f2fs-tools — репозиторій утиліт.
  • F2FS Tools — сторінка проєкту з утилітами.