F2FS

редактировать
F2FS
Разработчик (и) Samsung Electronics, Motorola Mobility, Huawei и Google
Полное имяФайловая система с поддержкой Flash
Представлена ​​v3.8, 2012-12-20 с Linux
Структуры
Содержимое каталогамногоуровневая хэш-таблица
Размещение файловрастровое изображение (свободное пространство), таблица
ЗагрузочнаяДа, начиная с GRUB 2.04 (2019-07-05)
Пределы
Макс. размер тома16 TB
Макс. размер файла3,94 TB
Макс. количество файловЗависит от размера тома
Макс. длина имени файла512 байт
Характеристики
Записанные датыизменение (mtime), изменение атрибута (ctime), доступ (atime)
Разрешение даты1 нс
АтрибутыPOSIX, расширенные атрибуты
Разрешения файловой системы POSIX, ACL
Прозрачное сжатиеLZO, LZ4 (начиная с Linux 5.6), zstd (начиная с Linux 5.7)
Прозрачное шифрование Да
Другое
Поддерживаемые операционные системы Linux и Android
Веб-сайтf2fs.wiki.kernel.org

F2FS (Файловая система, совместимая с Flash ) - это файловая система для флэш-памяти, изначально разработанная Samsung. Электроника для ядра Linux.

Мотивом для F2FS было создание файловой системы, которая с самого начала учитывала характеристики флэш-памяти NAND устройства хранения (такие как твердотельные диски, eMMC и SD карты), которые широко используются в компьютерных системах, от мобильных устройств до серверы.

F2FS была разработана на основе подхода файловой системы с лог-структурой, который адаптирован для новых форм хранения. Jaegeuk Kim, главный автор F2FS, заявил, что он устраняет некоторые известные проблемы старых файловых систем с журнальной структурой, такие как эффект снежного кома и высокие накладные расходы на очистку. Кроме того, поскольку устройство хранения на основе NAND показывает разные характеристики в зависимости от своей внутренней геометрии или схемы управления флэш-памятью (например, Flash Translation Layer или FTL), оно поддерживает различные параметры не только для настройки на- структура диска, а также для выбора алгоритмов распределения и очистки.

Содержание
  • 1 Особенности
  • 2 Дизайн
    • 2.1 Структура на диске
    • 2.2 Структура метаданных
    • 2.3 Структура индекса
    • 2.4 Структура каталогов
    • 2.5 Размещение блоков по умолчанию
    • 2.6 Процесс очистки
  • 3 Принятие
  • 4 См. Также
  • 5 Ссылки
  • 6 Внешние ссылки
Функции
  • Многоголовое ведение журнала
  • Многоуровневая хеш-таблица для записей каталога
  • Статическое / динамическое разделение горячих и холодных данных
  • Схема адаптивного ведения журнала
  • Настраиваемые операционные блоки
  • Двойная контрольная точка
  • Откат и восстановление с повтором транзакций
  • Распределение блоков в стиле кучи
  • Поддержка TRIM / FITRIM
  • Online fs дефрагментация / дефрагментация файла
  • Inline xattrs / data / dir
  • Автономная проверка файловой системы (проверка и устранение несогласованности)
  • Атомарные операции
  • Шифрование на уровне файловой системы
  • Автономное изменение размера (сжатие не поддерживается.)
  • Внутренняя периодическая очистка данных
  • Экстентный кеш
  • Прозрачное сжатие файлов с использованием LZO или LZ4 (с Linux 5.6), или zstd (с Linux 5.7)
Дизайн

Расположение на диске

F2FS делит весь том на несколько сегментов, каждый из которых имеет фиксированный размер 2 МБ. Раздел состоит из последовательных сегментов, а зона состоит из набора разделов. По умолчанию для размеров раздела и зоны задан одинаковый размер, но пользователи могут легко изменить размер с помощью mkfs.

. F2FS разбивает весь том на шесть областей, и все, кроме области суперблока, состоят из нескольких сегментов, как описано ниже.

Суперблок (SB)
SB расположен в начале раздела. Есть две копии, чтобы избежать повреждения файловой системы. Он содержит основную информацию о разделах и некоторые параметры F2FS по умолчанию.
Контрольная точка (CP)
CP содержит информацию о файловой системе, битовые карты для допустимых наборов NAT / SIT, списки потерянных inode и сводные записи текущие активные сегменты.
Таблица информации о сегментах (SIT)
SIT содержит действительное количество блоков и битовую карту действительности всех блоков основной области.
Таблица адресов узлов (NAT)
NAT - это таблица адресов для блоков узлов основной области.
Сводная область сегмента (SSA)
SSA содержит записи, которые содержат информацию о владельце основной области. Данные области и блоки узлов.
Основная область
Основная область содержит данные файлов и каталогов и их индексы.

Чтобы избежать несоответствия между файловой системой и флэш-хранилищем, F2FS выравнивает адрес начального блока CP с размером сегмента. Он также выравнивает адрес начального блока основной области с размером зоны, резервируя некоторые сегменты в области SSA.

Структура метаданных

F2FS использует схему контрольных точек для поддержания целостности файловой системы. Во время монтирования F2FS сначала пытается найти последние действительные данные контрольной точки, сканируя область CP. Чтобы сократить время сканирования, F2FS использует только две копии CP. Один из них всегда указывает на последние достоверные данные, что называется механизмом теневого копирования. Помимо CP, NAT и SIT также используют механизм теневого копирования. Для согласованности файловой системы каждый CP указывает, на какие копии NAT и SIT действительны.

Структура индекса

Ключевой структурой данных является «узел». Подобно традиционным файловым структурам, F2FS имеет три типа узлов: inode, прямой узел, косвенный узел. F2FS назначает 4 КБ блоку inode, который содержит 923 индекса блока данных, два прямых указателя узла, два косвенных указателя узла и один указатель двойного косвенного узла, как описано ниже. Блок прямого узла содержит 1018 индексов блока данных, а блок косвенного узла содержит 1018 индексов блока узла. Таким образом, один блок inode (т.е. файл) покрывает:

4 КБ × (923 + 2 × 1018 + 2 × 1018 + 1018) = 3,94 ТБ

Обратите внимание, что все блоки узлов отображаются NAT, что означает, что местоположение каждого узла транслируется NAT. Чтобы смягчить проблему блуждающего дерева, F2FS может отключать распространение обновлений узлов, вызванных записью конечных данных.

Структура каталога

Запись каталога (dentry) занимает 11 байтов, которые состоят из следующих атрибутов.

Структура записи каталога
hashЗначение хэша имени файла
inoInode number
lenДлина имени файла
типТип файла, такой как каталог, символическая ссылка и т. Д.

Блок dentry состоит из 214 слотов dentry и имен файлов. Растровое изображение используется для представления того, действительна ли каждая данность. Блок dentry занимает 4 КБ и имеет следующий состав:

Блок Dentry (4 КБ) = битовая карта (27 байтов) + зарезервировано (3 байта) + dentries (11 * 214 байтов) + имя файла (8 * 214 байт)

F2FS реализует многоуровневые хеш-таблицы для структуры каталогов. На каждом уровне есть хеш-таблица с выделенным количеством хеш-сегментов, как показано ниже. Обратите внимание, что «A (2B)» означает, что сегмент включает 2 блока данных.

Срок
A указывает сегмент
B указывает блок
N указывает MAX_DIR_HASH_DEPTH
уровень # 0 A (2B) уровень # 1 A (2B) - A (2B) уровень # 2 A (2B) - A (2B) - A (2B) - A (2B)... уровень # N / 2 A (2B) - A (2B) - A (2B) - A ( 2B) - A (2B) -... - A (2B)... уровень #NA (4B) - A (4B) - A (4B) - A (4B) - A (4B) -... - A (4B)

Когда F2FS находит имя файла в каталоге, сначала вычисляется хеш-значение имени файла. Затем F2FS просматривает хеш-таблицу на уровне # 0, чтобы найти файл dentry, состоящий из имени файла и его номера inode. Если не найден, F2FS сканирует следующую хеш-таблицу на уровне №1. Таким образом, F2FS сканирует хэш-таблицы на каждом уровне постепенно от 1 до N. На каждом уровне F2FS необходимо сканировать только один сегмент, определяемый следующим уравнением, которое показывает сложность O (журнал (# файлов)).

номер сегмента для сканирования на уровне #n = (значение хэша)% (количество сегментов на уровне #n)

В случае создания файла F2FS находит пустые последовательные слоты, которые покрывают имя файла. F2FS ищет пустые слоты в хеш-таблицах целых уровней от 1 до N так же, как и операция поиска.

Распределение блоков по умолчанию

Во время выполнения F2FS управляет шестью активными журналами внутри «основной области»: узел Hot / Warm / Cold и данные Hot / Warm / Cold.

Политика выделения блоков
Горячий узелСодержит блоки прямых узлов каталогов.
Горячий узелСодержит блоки прямых узлов, кроме блоков горячих узлов.
Холодный узелСодержит блоки косвенного узла.
Горячие данныеСодержит блоки dentry.
Горячие данныеСодержит блоки данных, кроме горячих и холодных блоков данных.
Холодные данныеСодержит мультимедийные данные или перенесенные блоки данных.

LFS имеет две схемы управления свободным пространством: многопоточный журнал и копирование и сжатие. Схема копирования и сжатия, известная как очистка, хорошо подходит для устройств, демонстрирующих очень хорошую производительность последовательной записи, поскольку свободные сегменты постоянно обслуживаются для записи новых данных. Однако при высокой загрузке он страдает от накладных расходов на очистку. И наоборот, многопоточная схема журнала страдает от случайных записей, но процесс очистки не требуется. F2FS использует гибридную схему, в которой по умолчанию используется схема копирования и сжатия, но политика динамически изменяется на схему потокового журнала в соответствии с состоянием файловой системы.

Чтобы выровнять F2FS с базовым хранилищем на основе флэш-памяти, F2FS выделяет сегмент в единице раздела. F2FS ожидает, что размер раздела будет таким же, как размер единицы сборки мусора в FTL. Что касается детализации отображения в FTL, F2FS распределяет каждый раздел активных журналов по как можно большему количеству различных зон. FTL может записывать данные активного журнала в одну единицу распределения в соответствии с гранулярностью отображения.

Процесс очистки

F2FS выполняет очистку как по запросу, так и в фоновом режиме. Очистка по требованию запускается, когда недостаточно свободных сегментов для обслуживания вызовов VFS. Средство очистки фона выполняется потоком ядра и запускает задание очистки, когда система простаивает.

F2FS поддерживает две политики выбора жертвы: жадный и рентабельный. В жадном алгоритме F2FS выбирает сегмент жертвы, имеющий наименьшее количество допустимых блоков. В алгоритме рентабельности F2FS выбирает сегмент жертвы в соответствии с возрастом сегмента и количеством допустимых блоков, чтобы решить проблему переброса блоков журнала, присутствующую в жадном алгоритме. F2FS использует жадный алгоритм очистки по требованию, очиститель фона использует алгоритм рентабельности.

Чтобы определить, верны ли данные в сегменте жертвы, F2FS управляет битовой картой. Каждый бит представляет действительность блока, а битовая карта состоит из потока битов, охватывающего целые блоки в основной области.

Принятие

Motorola Mobility использует F2FS в своих телефонах Moto G / E / X и Droid с 2012 года. Google впервые применил F2FS в своих Nexus 9 в 2014 году. Однако другие продукты Google не использовали F2FS до Pixel 3, когда F2FS была обновлена ​​с поддержкой встроенного криптографического оборудования.

Huawei использовала F2FS с Huawei P9 в 2016 году. OnePlus использует F2FS с OnePlus 3T в 2016 году. ZTE использует F2FS с момента выхода ZTE Axon 10 Pro в 2019 году.

См. также
Ссылки
Внешние ссылки

.

Последняя правка сделана 2021-05-20 06:34:43
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте