Файловая система f2fs что это

Обновлено: 06.07.2024

Инженеры из компании Samsung представили в списке рассылки разработчиков ядра Linux набор патчей с реализацией новой файловой системы F2FS (Flash-Friendly File System), разработанной специально для использования на накопителях, использующих NAND Flash, таких как SSD, eMMC и SD карты. Кроме патчей для ядра Linux также опубликован первый релиз пакета f2fs-tools, содержащего коллекцию утилит для обслуживания разделов F2FS (пока в состав входит только mkfs.f2fs, но в ближайшее время обещают добавить утилиту fsck и набор отладочных инструментов). Код всех составных частей распространяется в рамках лицензии GPLv2.

В отличие от файловых систем общего назначения, проект F2FS разработан специально с учётом специфичных особенностей NAND Flash и оптимизирован для памяти с неизменным временем доступа. Для минимизации случаев перезаписи данных в F2FS используются структуры в форме лога, обеспечивающие равномерное использование блоков данных для снижения износа NAND Flash. Отмечается, что в процессе разработки F2FS были учтены проблемы ранее доступных специализированных ФС на основе структур в форме лога и предприняты все усилия для устранения известных недостатков, таких как большое потребление памяти, высокие накладные расходы при выполнении операций очистки и эффект снежного кома для Wandering-деревьев (в ситуации когда вместо перезаписи создаются новые элементы (меняется номер блока), для деревьев в которых родительский узел ссылается на дочерние узлы, изменение узла приводит к перестроению всех вышележащих узлов). Кроме традиционной для UNIX схемы разграничения доступа, F2FS предоставляет такие механизмы, как xattr и POSIX ACL.

Раздел F2FS формируется из сегментов размером 2 Мб, сегменты группируются в секции, которые в свою очередь объединяются в зоны. Для адаптации F2FS к различным видам NAND Flash, которые отличаются своими характеристиками в зависимости от внутренней геометрии и схемы управления, предусмотрен широкий спектр параметров для управления структурой распределения данных в разделе и предоставлена возможность выбора различных алгоритмов очистки и выделения блоков. Для выполнения операций чистки реализован специальный сборщик мусора, выполняемый в фоне в моменты простоя системы. Для обеспечения целостности используется модель с фиксацией контрольных точек и возможностью отката изменений (roll-back) в случае проблем. Для ускорения выполнения операций в процессе работы основные индексы с информацией о распределении данных хранятся в оперативной памяти.

Представлены результаты оценки производительности файловых систем EXT4 и NILFS2 в сравнении F2FS, новой файловой системы для Flash-накопителей, разработанной в компании Samsung. Тестирование проводилось как на обычном ПК с CPU Core i5 2500, так и на смартфоне a Galaxy S3 с прошивкой на базе Android 4.0.4. В обоих конфигурация использовалась SD-карта Transcend 16GB class 10;

Производительность F2FS оказалась выше конкурентов в тестах на случайную и последовательную буферизированную запись, запись cо сбросом буферов через fsync и случайное чтение данных. При оценке времени монтирования лидером стала ФС EXT4, F2FS оказалась на втором месте.


В среде моддеров и энтузиастов Android, как и в любой секте, есть несколько святынь, которые принято почитать несмотря ни на что. Это оптимизированные кастомные ядра, скрипты и приложения для оптимизации системы, «улучшатели» звука и многое другое. В последнее время к ним добавилась файловая система F2FS, которая, согласно многим свидетельствам, существенно поднимает производительность работы с NADN-памятью и сохраняет ее от износа. Но так ли это на самом деле?

Начало

Впервые F2FS (Flash Friendly File System) предстала людскому взору в октябре 2012 года, когда компания Samsung опубликовала патчи с ее реализацией для ядра Linux. По словам разработчиков, ФС была с нуля спроектирована специально для flash-памяти и позволяла повысить производительность чтения/записи таких накопителей и использовать их особенности для некоторых оптимизаций и защиты от износа.

Уже к концу года F2FS стала официальной частью Linux 3.8, а еще через некоторое время ее поддержка появилась в CyanogenMod 10.2 и кастомном рекавери TWRP. С тех пор моддеры и оптимизаторы включают ее во все свои каcтомные ядра, пишут массу хвалебных отзывов, публикуют скриншоты с доказательством феноменальной производительности файловой системы.

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

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

Производительность

В Сети можно найти множество примеров сравнения производительности ext4 и F2FS. Они очень похожи и очень часто показывают огромный выигрыш последней в скорости записи данных. Вот, например, результаты сравнения AndroBench для смартфона Sony Experia Z1:

Реверс малвари

Выглядит странно, не так ли? Скорость случайной записи возросла в 150 раз в сравнении с ext4 и в шесть раз в сравнении со скоростью чтения. Впервые такую аномалию заметили журналисты Phoronix, когда проводили тестирование F2FS в начале 2013 года:

Аномально высокая производительность F2FS

Аномально высокая производительность F2FS

Тогда они резонно предположили, что на самом деле F2FS пишет данные на диск не сразу, а вместо этого кеширует их для последующей записи. Если взглянуть на архитектуру F2FS, становится очевидно, что это действительно так. F2FS работает с блоками данных размером 4 Кбайт, объединяя их в сегменты размером 2 Мбайт, а те, в свою очередь, объединяются в секции, которых может быть до шести штук.

Зачем нужна такая система, мы поговорим позже, а пока остановимся только на том, что перед записью в память секции должны быть заполнены блоками. Другими словами, F2FS собирает записываемые 4-килобайтные блоки данных в куски большего размера, а затем скидывает их на диск одновременно. Это и есть причина аномально высокой производительности F2FS в скорости записи случайного 4-килобайтного блока и вполне сравнимой с ext4 производительности последовательной записи множества блоков.

Последние тесты Phoronix также подтверждают практически равную производительность обеих файловых систем. F2FS заметно вырвалась вперед только в тесте на одновременную работу с тысячами файлов, что обусловлено ее внутренними оптимизациями. Однако ни один смартфон не работает одновременно с таким количеством файлов. Такая ситуация редкость даже на десктопе и специфична для серверов.

Тест скорости случайной записи в разных версиях ядер (4.4–4.7)

Тест скорости случайной записи в разных версиях ядер (4.4–4.7)

Бережное отношение к накопителю

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

Именно так работает F2FS, и именно поэтому многие люди считают ее лучшим выбором для flash-памяти в сравнении с ext4, работающей по классической схеме, которая предполагает изменение данных на месте. Но есть один нюанс. Дело в том, что абсолютно любая современная флеш-память, начиная от USB-флешек и заканчивая серверными SSD, содержит в себе контроллер FTL (Flash Translation Layer), отвечающий за то, чтобы представить совсем непохожую на магнитные диски флеш-память как обычный диск, на который можно записать определенное количество блоков данных.

Помимо таких вещей, как объединение нескольких чипов flash-памяти в один «диск» и выполнение операции TRIM, которая очищает уже не используемые блоки, FTL также ответственен за выбор физического размещения записываемого блока в памяти. И здесь он использует (сюрприз!) log-структурированную мини-ФС. Другими словами, любая современная флеш-память сама занимается увеличением своего срока службы независимо от того, какую файловую систему ты на ней создашь: F2FS, ext4, FAT32 или любую другую, — результат будет один.

На самом деле причина, по которой F2FS называется «дружественной к флеш-памяти» (Flash Friendly), вовсе не в бережном отношении к памяти, а в том, что она умеет учитывать некоторые ее особенности, чтобы сделать работу с памятью более эффективной. Один из примеров увеличения эффективности — это тот самый механизм объединения данных в секции.

Но и здесь не все так просто. Все оптимизации F2FS требуют индивидуальной настройки файловой системы для каждой модели flash-памяти. Файловая система будет настолько эффективной, насколько точно ее настроили. И делать это должен не пользователь кастомной прошивки, а сам производитель памяти, потому как только он может знать все нюансы ее устройства.

Итого

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

Евгений Зобнин

Редактор рубрики X-Mobile. По совместительству сисадмин. Большой фанат Linux, Plan 9, гаджетов и древних видеоигр.

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

Для разных операционных систем и типов устройств существуют отдельные ФС и гаджеты на ОС Android, не являются исключением. Давайте разберемся, какие файловые системы поддерживает Android и для каких целей используется каждая из них?

Файловые системы Android

1. Yaffs и Yaffs2


Создателем файловой системы Yaffs (Yet Another Flash File System) является Чарльз Мэннинг, родом из Новой Зеландии. Данная ФС предназначается для организации работы флеш-накопителей и оперативной памяти. Основным ее преимуществом является повышение сроков эксплуатации модулей памяти, так как система автоматически пропускает ячейки, предназначенный для однократной записи. Yaffs2 использовалась для организации работы внутренней памяти гаджетов Android версии 2.2 и 2.3.

2. VFAT


Vfat не является полноценной самостоятельной файловой системой, а представляет собой расширение FAT. Доработанная версия позволяет сохранять файлы с длинными именами, но по всем остальным характеристикам является морально устаревшей. Vfat может использоваться на картах памяти, а операционные системы на базе ОС Андроид полностью их поддерживают. В основном, это файловая система флешки android.

3. F2FS

F2FS (Flash Friendly File System) – файловая система, которая предназначена в первую очередь на работу с флеш-памятью и SSD-накопителями. Разработал ее сотрудник компании Samsung, Ким Чэ Гык, а после публикации исходного кода она была доработана другими инженерами компании. F2FS может использоваться на картах памяти SD/MMC, а также со множеством других типов памяти. Для полноценной кастомизации существует целый набор утилит. Из преимуществ можно отметить хорошую гибкость в настройке, высокие показатели сохранения жизненного цикла блоков памяти, а также хранение данных в виде журнала. Хорошую скорость работы обеспечивает то, что индексы данных сохраняются в оперативную память, а поддержка F2FS включена в ядро Linux, начиная с версии 3.8.

4. Ext2-Ext4

Ext2-Ext4 – основные файловые системы Android. Именно они используются для организации работы внутреннего хранилища на большинстве современных гаджетов, и если первые устройства работали под версиями Ext2, то начиная с версии Android 4, основными стали Ext3, а потом и Ext4. Основное отличие между вариациями заключается в наличие журналирования. То есть, если в процессе записи или чтения данных происходит системный сбой, например, неожиданное отключение питания, не произойдет потери или повреждения данных. Несмотря на то, что в основном ФС формата Ext используется в основном в блочных накопителях, пользователи могут установить данный тип и для карт памяти, но без сторонних утилит получить к ним доступ из операционных систем, помимо Linux, будет невозможно. Файловая система флэшки Android обычно форматируются в FAT (VFAT) или NTFS, а флеш-память — в Ext3 или Ext4.

5. UBIFS


mSATA SSD 16 GB Sandisk - SDSA3DD-016G

UBIFS – файловая система, предназначенная исключительно для памяти по типу NAND (флеш-накопители, применяемые на мобильных устройствах). Ее основное преимущество — это снижение износа носителей данных. Состоит такая ФС из двух слоев — UBI (отвечает за работу и связь с физическим носителем) и UBIFS (сама файловая система). Разработчиком UBIFS является компания Nokia, но встретить подобную файловую систему можно не только на оригинальных устройствах от данного производителя, но и на других гаджетах, например, китайского изготовления.

6. Samsung RFS

Samsung RFS – разработанная корейской компанией Samsung файловая система для устройств на базе ОС Linux, а одной из разновидностей последнего является Android. Предназначается фирменная ФС для флеш-памяти NAND и используется во многих гаджетах собственного производства. Для облегчения работы с файлами используется таблица формата FAT, что позволяет максимально просто произвести запись файлов на флэш-память и их чтение. Специфика RFS учитывает особенности NAND накопителей, что позволяет увеличить длительность их эксплуатации, а также снизить вероятность потери данных при системных сбоях и случайных отключениях питания.

7. SDCardFS

Компания Google долгое время использовала в своих устройствах файловую систему FUSE, но она имела ряд недостатков, среди которых необходимо отметить малое количество памяти, выделяемой под приложения под приложения, а также большое потребление хранилища при кэшировнии данных. На замену FUSE пришла SDCardFS, которая решала эти проблемы, но представляла собой своего рода оболочку, эмулирующую FAT32. Она отправляет данные файловым системам нижнего уровня, что позволяет оптимизировать работу смартфонов, а также исправляет ошибки, связанные с передачей данных на компьютер и обратно. SDCardFS по своей сути не является классической файловой системой, но значительно сказывается на скорости работы смартфонов или планшетов на Android.

Выводы

Файловые системы Android самые разнообразные. Среди них есть как общие ФС, предназначенные для работы с ОС на базе Linux, так и специфические, которые используются в NAND-накопителях. Несмотря на такое разнообразие, производители все же прикладывают совместные усилия для продвижения и улучшения той или иной файловой системы, так как именно от работы внутренних составляющих зависит будущее рынка Android-гаджетов.

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


Владельцы смартфонов и планшетов на Android знают: сразу после покупки девайс работает, как молния, но через определенное время начинает больше напоминать черепаху. Этому есть много причин, и одна из главных – флэш-память, а именно ее фрагментация. Ежесекундно в Android происходят сотни или тысячи операций считывания-записи, но существующие файловые системы плохо приспособлены для мобильных девайсов. И в индустрии создали новую файловую систему F2FS, которая должна бороться с замедлением девайса со временем.

Что такое файловая система

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

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

Существуют десятки файловых систем. Самыми известными являются FAT (File Allocation Table) и ее модификация FAT32, которая сегодня используется на большинстве USB-накопителей, карт памяти и т. п. Также известна NTFS (New Technology File System), которая является основой для Microsoft Windows. Еще Microsoft создала exFAT – модификацию FAT для девайсов на базе флэш-памяти.

Файловая система Android сегодня

Смартфоны Android базируются на Linux, а потому сегодня преимущественно используют файловую систему ext4 (Fourth Extended File System). Она является эволюцией самой популярной файловой системы в операционной системе Linux – еxt3, которая также является эволюцией предыдущих версий ext. В еxt3 главное внимание уделили журналам для ведения истории операций. В еxt4 пошли дальше и модифицировали важные структуры для хранения данных.

Файловую систему еxt4 создали в период 2003-2006 годов, и она лучше всего адаптирована для работы с механическими жесткими дисками. У флэш-памяти совсем другой принцип: она имеет относительно низкую скорость работы, но это компенсируется распараллеливанием процедур записи и чтения на десятки каналов.

В ext4 также не учитывается одно из главных ограничений флэш-памяти – количество циклов записи в одну ячейку. С каждым поколением флэш-памяти оно уменьшается, и в памяти QLC достигает нескольких сотен. Журналы операций в ext4 быстро изнашивают флэш-память.

Потребность в альтернативе

Долгое время над файловой системой смартфонов не задумывались потому, что основным тормозом при работе с данными была аппаратная часть. Однако с появлением флэш-памяти в формате UFS на замену старому eMMC узким местом стала именно ext4.

Для учета особенностей флэш-памяти и максимального использования ее преимуществ в 2012 году в Samsung представили файловую систему F2FS.

F2FS является файловой системой с открытым исходным кодом, и она адаптирована к флэш-памяти типа NAND (существует еще флэш-память NOR). После презентации первого варианта разработчиками Samsung эта файловая система заинтересовала других производителей. Одной из первых внедрять ее начала Motorola, вслед за ней новинку стали использовать и другие производители, включая OnePlus и Huawei.

Что дает F2FS

Новая файловая система значительно ускоряет работу флэш-памяти: смартфоны загружаются быстрее, можно записывать «тяжелые» файлы 4K, фильмы на 360 градусов. Также снизилась латентность (задержка) между операционной системой и физическим накопителем, благодаря чему программы открываются и реагируют на действия пользователя быстрее. Она также потребляет меншьше энергии при записи-чтении.


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

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

За скорость файловая система F2FS «расплачивается» увеличением занятого пространства, используемого для кэша и рутинных операций. На девайсах с 64 ГБ флэш это может быть незаметным, но на бюджетных аппаратах с 8 ГБ или 16 ГБ может оказаться проблемой.

Что тормозит F2FS

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

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

Читайте также: