Разработчики) | Samsung Electronics , Motorola Mobility , Huawei и Google |
---|---|
Полное имя | Файловая система с поддержкой Flash |
Введено | v3.8, 2012-12-20 [1] с Linux |
Структуры | |
Содержимое каталога | многоуровневая хеш-таблица |
Размещение файлов | растровое изображение (свободное место), таблица |
Загрузочный | Да, начиная с GRUB 2.04 (2019-07-05) |
Пределы | |
Максимум. размер тома | 16 ТБ |
Максимум. размер файла | 3,94 ТБ |
Максимум. количество файлов | Зависит от размера тома |
Максимум. длина имени файла | 512 байт [2] |
Функции | |
Даты записаны | модификация (mtime), модификация атрибута (ctime), доступ (atime) |
Разрешение даты | 1 нс |
Атрибуты | POSIX, расширенные атрибуты |
Разрешения файловой системы | POSIX, ACL |
Прозрачное сжатие | LZO, LZ4 (начиная с Linux 5.6), [3] zstd (начиная с Linux 5.7) [4] |
Прозрачное шифрование | да |
Другой | |
Поддерживаемые операционные системы | Linux и Android |
Интернет сайт | f2fs |
F2FS ( Flash-Friendly File System ) - это файловая система для флэш-памяти, изначально разработанная Samsung Electronics для ядра Linux . [5]
Мотивом для F2FS было создание файловой системы, которая с самого начала учитывала характеристики запоминающих устройств на основе флэш-памяти NAND (таких как твердотельные диски , eMMC и SD- карты), которые широко используются в компьютерах. системы от мобильных устройств до серверов.
F2FS была разработана на основе подхода файловой системы с журнальной структурой , который адаптирован к новым формам хранения. Jaegeuk Ким, главный f2fs автор, заявил , что это средства правовой защиты некоторые известные проблемы [5] из старых файловых систем лог-структурированная, такие как эффект снежного кома из странствующих деревьев и высоких накладных расходов очистки. Кроме того, поскольку устройство хранения на основе NAND демонстрирует разные характеристики в зависимости от своей внутренней геометрии или схемы управления флэш-памятью (например, Flash Translation Layer или FTL), оно поддерживает различные параметры не только для настройки разметки на диске, но и для выбор алгоритмов распределения и очистки.
Этот раздел требует дополнительных ссылок для проверки . ( Май 2016 г. ) |
F2FS делит весь том на несколько сегментов, размер каждого из которых составляет 2 МБ. Раздел состоит из последовательных сегментов, а зона состоит из набора разделов. По умолчанию для размеров раздела и зоны задан одинаковый размер, но пользователи могут легко изменить размер с помощью mkfs
.
F2FS разбивает весь том на шесть областей, и все, кроме области суперблока, состоят из нескольких сегментов, как описано ниже.
Чтобы избежать несоответствия между файловой системой и флэш-памятью, 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 байтов, которые состоят из следующих атрибутов.
хэш | Хеш-значение имени файла |
---|---|
я нет | Дескриптор номер |
len | Длина имени файла |
тип | Тип файла, такой как каталог, символическая ссылка и т. Д. |
Блок dentry состоит из 214 слотов dentry и имен файлов. Растровое изображение используется для представления того, действительна ли каждая данность. Блок dentry занимает 4 КБ и имеет следующий состав:
Блок Дентри (4 КБ) = битовая карта (27 байтов) + зарезервировано (3 байта) + dentries (11 * 214 байт) + имя файла (8 * 214 байт)
F2FS реализует многоуровневые хеш-таблицы для структуры каталогов. На каждом уровне есть хеш-таблица с выделенным количеством хэш-сегментов, как показано ниже. Обратите внимание, что «A (2B)» означает, что сегмент включает 2 блока данных.
уровень # 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]