F2FS


Из Википедии, свободной энциклопедии
  (Перенаправлено с F2fs )
Перейти к навигации Перейти к поиску

F2FS ( Flash-Friendly File System ) - это файловая система для флэш-памяти, изначально разработанная Samsung Electronics для ядра Linux . [5]

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

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

Функции

  • Многоголовочный каротаж
  • Многоуровневая хеш-таблица для записей каталога
  • Статическое / динамическое разделение горячих и холодных данных
  • Схема адаптивного ведения журнала
  • Настраиваемые операционные блоки
  • Двойной контрольно-пропускной пункт
  • Откат и восстановление с повтором транзакций
  • Распределение блоков в стиле кучи
  • TRIM / FITRIM поддержка [6]
  • Online фс дефрагментации / дефрагментация файлов [7]
  • Встроенные xattrs [8] / data [9] / dir [10]
  • Автономная проверка файловой системы (Проверить и исправить несоответствие [11] )
  • Атомарные операции [12]
  • Шифрование на уровне файловой системы [13]
  • Автономное изменение размера (сжатие не поддерживается) [14]
  • Внутренняя периодическая очистка данных [15]
  • Кэш экстента [16]
  • Прозрачное сжатие файлов с использованием LZO или LZ4 (с Linux 5.6), [3] или zstd (с Linux 5.7) [4]

Дизайн

Макет на диске

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

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

Суперблок (SB)
SB находится в начале раздела. Есть две копии, чтобы избежать повреждения файловой системы. Он содержит основную информацию о разделах и некоторые параметры F2FS по умолчанию.
Контрольно-пропускной пункт (КП)
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 2 + 1018 3 ) = 3,94 ТБ

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

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

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

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

Блок Дентри (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.

В 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 году. [17] Однако другие продукты Google не использовали F2FS до Pixel 3, когда F2FS была обновлена. со встроенной аппаратной поддержкой шифрования. [18]

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

С другой стороны, SUSE , коммерческий коммерческий дистрибутив Linux , ориентированный на серверы и рабочие станции, а не на мобильные устройства, по умолчанию отключает загрузку модулей ядра F2FS, ссылаясь на потенциальные проблемы безопасности из-за недостаточного обслуживания. [23]

Arch Linux [24] и Gentoo Linux [25] поддерживают F2FS, Debian также поддерживает ее начиная с версии 10 и выше. [26]

Смотрите также

  • Сравнение файловых систем
  • Список файловых систем флеш-памяти

использованная литература

  1. ^ Майкл Ларабель (2012-12-22). «Файловая система F2FS, объединенная с ядром Linux 3.8» . Фороникс . Проверено 25 мая 2016 .
  2. ^ Чангман Ли (2013-04-03). «f2fs: обновить f2fs.txt, связанный с сбросом в mkfs» . Проверено 12 февраля 2020 .
  3. ^ a b Майкл Ларабель (23 декабря 2019 г.). «Сжатие данных F2FS с использованием выборочной обработки расширений файлов LZO / LZ4 + для выхода в 2020 году» . Фороникс . Проверено 7 апреля 2020 .
  4. ^ a b Майкл Ларабель (07.04.2020). «F2FS представляет поддержку сжатия Zstd с ядром Linux 5.7» . Фороникс . Проверено 7 апреля 2020 .
  5. ^ a b Jaegeuk Ким (2012-10-05). «f2fs: представить файловую систему, совместимую с флеш-памятью» . Проверено 25 мая 2016 .
  6. ^ Jaegeuk Ким (2014-09-22). «f2fs: введите FITRIM в f2fs_ioctl» .
  7. ^ Чао Ю (2015-10-26). «f2fs: поддержка дефрагментации файла» .
  8. ^ Jaegeuk Ким (2013-08-26). «f2fs: добавить флаги для встроенных xattrs» .
  9. ^ Huajun Li (2013-11-10). «f2fs: включить поддержку встроенных данных f2fs» .
  10. ^ Чао Ю (2014-09-24). "f2fs: поддержка встроенного каталога" .
  11. ^ Jaegeuk Ким (2014-09-20). «f2fs-tools: выпуск 1.4.0» .
  12. ^ Jaegeuk Ким (2014-09-25). «f2fs: поддержка функции atomic_write для базы данных» .
  13. ^ Jaegeuk Ким (2015-06-24). "Обновления f2fs для v4.2" .
  14. ^ Jaegeuk Ким (2016-04-25). «resize.f2fs: поддержка увеличения размера раздела» .
  15. ^ Чао Ю (2015-12-17). «f2fs: поддержка сброса данных в фоновом режиме» .
  16. ^ Чао Ю (2015-01-25). "f2fs: включить кеширование экстентов rb-дерева" .
  17. ^ Смит, Джошуа Хо, Райан. «Обзор Google Nexus 9» . www.anandtech.com . Проверено 10 мая 2019 .
  18. ^ Frumusanu, Андрей (2018-11-02). «Обзор Google Pixel 3» . www.anandtech.com . Проверено 11 мая 2019 .
  19. ^ Ларабель, Майкл (2018-12-28). «F2FS получает больше исправлений в Linux 4.21 с файловой системой, теперь поддерживаемой Google Pixel» . www.phoronix.com . Проверено 10 мая 2019 .
  20. ^ Хамрик, Мэтт (2017-05-12). «Huawei P10 и P10 Plus» . www.anandtech.com . Проверено 11 мая 2019 .
  21. ^ Честер, Брэндон. «Обзор OnePlus 3T» . www.anandtech.com . Проверено 10 мая 2019 .
  22. ^ "ZTE Axon 10 Pro официально обнародован: первый, кто использует F2FS" . Gizchina.com . 2019-05-06 . Проверено 10 мая 2019 .
  23. ^ Уилк, Мартин (2019-01-30). "Отключение устаревших файловых систем по умолчанию?" . opensuse-factory (список рассылки). Архивировано 12 ноября 2020 года.
  24. ^ "Arch Linux Wiki" . wiki.archlinux.org . Проверено 27 июня 2021 года .
  25. ^ "Gentoo Wiki" . wiki.gentoo.org . Проверено 27 июня 2021 года .
  26. ^ "Debian Wiki" . wiki.debian.org . Проверено 27 июня 2021 года .

внешние ссылки

  • FAST '15 - F2FS: новая файловая система для флеш-хранилища (17 февраля 2015 г.)
  • ЧТО ТАКОЕ документация по файловой системе с поддержкой Flash (F2FS) для Linux
  • Flash Friendly File System (F2FS), Embedded Linux Conference (22 февраля 2013 г.)
  • LWN.net: Разборка f2fs (10.10.2012)
  • eMMC / SSDFile SystemTuningMethodology (2013-05-24)


Источник « https://en.wikipedia.org/w/index.php?title=F2FS&oldid=1031719590 »