» »

Что такое файловая система. Файловые системы Windows. Выбираем лучшую Популярные файловые системы

16.04.2020

Файлы на компьютере создаются и размещаются на базе системных принципов. Благодаря их реализации, пользователь получает возможность комфортно обращаться к нужной информации, не задумываясь о сложных алгоритмах доступа к ней. Каким образом организована работа файловых систем? Какие из них самые популярные сегодня? Каковы различия между файловыми системами, адаптированными для ПК? И теми, что используются в мобильных устройствах - смартфонах или планшетах?

Файловые системы: определение

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

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

Принципы работы файловых систем

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

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

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

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

Разновидности

Какие виды файловых систем можно назвать самыми распространенными? Вероятно, в первую очередь те, что используются самой популярной ОС для ПК в мире - Windows. Основные файловые системы Windows - это FAT, FAT32, NTFS и их различные модификации. Наряду с компьютерами популярность обрели смартфоны и планшеты. Большинство из них, если говорить о глобальном рынке и не рассматривать различия в технологических платформах, управляется ОС Android и iOS. Эти ОС задействуют свои алгоритмы работы с данными, отличные от тех, которыми характеризуются файловые системы Windows.

Стандарты, открытые для всех

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

Структура файловой системы

Несмотря на то что виды файловых систем представлены в достаточно большом количестве, работают они в целом по очень схожим принципам (общую схему мы изложили выше) и в рамках сходных структурных элементов или объектов. Рассмотрим их. Каковы основные объекты файловой системы?

Один из ключевых - Он являет собой изолированную область данных, в которой могут размещаться файлы. Структура каталогов - иерархическая. Что это значит? Один или несколько каталогов могут размещаться в другом. Который, в свою очередь, входит в состав "вышестоящего". Самым "главным" считается корневой каталог. Если говорить о принципах, на базе которых работает файловая система Windows - 7, 8, XP или же другой версии, - корневым каталогом считается логический диск, обозначаемый буквой - как правило, C, D, E (но можно настроить любую, что есть в английском алфавите). Что касается, к примеру, ОС Linux, то там корневым каталогом выступает магнитный носитель в целом. В этой и других ОС, основанных на ее принципах - к таковым относится Android - логические диски не используются. Можно ли хранить файлы без каталогов? Да. Но это не очень удобно. Собственно, комфорт в пользовании ПК - одна из причин внедрения в файловых системах принципа распределения данных по каталогам. Называться, кстати, они могут по-разному. В Windows каталоги именуются папками, в Linux - в основном так же. Но традиционное, используемое в течение многих лет название каталогов в этой ОС - "директории". Как и в предшествующих Windows и Linux ОС - DOS, Unix.

В среде IT-специалистов нет однозначного мнения касательно того, считать ли файл структурным элементом соответствующей системы. Те, кто полагает, что это не совсем корректно, аргументируют свою точку зрения тем, что система вполне может существовать и без файлов. Пусть это с практической точки зрения и бесполезное явление. Даже если на диске никаких файлов не записано, соответствующая система все равно может присутствовать. Как правило, магнитные носители, продаваемые в магазинах, не содержат каких-либо файлов. Но на них уже присутствует соответствующая система. Согласно другой точке зрения, файлы нужно считать неотъемлемой составляющей систем, которыми они управляются. Почему? А потому, что, как считают эксперты, алгоритмы их задействования адаптированы прежде всего под работу именно с файлами в рамках тех или иных стандартов. Ни для чего другого рассматриваемые системы не предназначены.

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

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

Имена файлов и каталогов в разных системах

Если условиться, что файлы - это все же составные элементы соответствующих им систем, то стоит рассмотреть их базовую структуру. Что можно отметить в первую очередь? Для удобства организации доступа к ним в большинстве современных систем управления данными предусмотрена двухуровневая структура именования файлов. Первый уровень - это название. Второй - расширение. Возьмем для примера музыкальный файл Dance.mp3. Dance - это название. Mp3 - расширение. Первое призвано раскрывать для пользователя суть содержания файла (а для программы быть ориентиром для быстрого доступа). Второе обозначает тип файла. Если он Mp3, то нетрудно догадаться, что речь идет о музыке. Файлы с расширением Doc - это, как правило, документы, Jpg - картинки, Html - веб-страницы.

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

Общее правило для всех ОС и соответствующих им систем управления данными - в одном каталоге не могут находиться файлы с одинаковыми наименованиями. В Linux при этом присутствует некая "либерализация" этого правила. В одном каталоге могут быть файлы с одинаковыми буквами, но в разном регистре. Например, Dance.mp3 и DANCE.mp3. В ОС Windows это невозможно. Эти же правила установлены также и в аспекте размещения каталогов внутри других.

Адресация файлов и каталогов

Адресация файлов и каталогов - важнейший элемент соответствующей системы. В ОС Windows ее пользовательский формат может выглядеть так: C:/Documents/Music/ - это доступ к каталогу Music. Если нас интересует какой-то конкретный файл, то адрес может выглядеть так: C:/Documents/Music/Dance.mp3. Почему "пользовательский"? Дело в том, что на уровне программно-аппаратного взаимодействия компонентов компьютера структура доступа к файлам гораздо более сложная. Файловая система определяет местоположение файловых блоков и взаимодействует с ОС по большей части в рамках скрытых от пользователя операций. Однако у пользователя ПК крайне редко возникает необходимость пользоваться иными форматами "адресов". Практически всегда доступ к файлам осуществляется в указанном стандарте.

Сравнение файловых систем для Windows

Мы изучили общие принципы функционирования файловых систем. Рассмотрим теперь особенности самых распространенных их видов. В Windows чаще всего используются такие файловые системы, как FAT, FAT32, NTFS, а также exFAT. Первая в этом ряду считается устаревшей. Она, вместе с тем, долгое время была неким флагманом индустрии, но по мере роста технологичности ПК ее возможности перестали удовлетворять запросам пользователей и потребностям в ресурсах со стороны программного обеспечения.

Призванная заменить FAT файловая система - это FAT32. Как считают многие IT-эксперты, сейчас она самая популярная, если говорить о рынке ПК под управлением Windows. Она чаще всего используется при хранении файлов на жестких дисках и флешках. Также можно отметить, что эта система управления данными достаточно регулярно используется в модулях памяти различных цифровых устройств - телефонах, фотоаппаратах. Основное преимущество FAT32, которое выделяют IT-эксперты, таким образом, Несмотря на то что создана была данная файловая система компанией Microsoft, работать с данными в рамках заложенных в ней алгоритмов могут большинство современных ОС, включая те, что инсталлированы на указанные типы цифровой техники.

Есть у системы FAT32 и ряд недостатков. Прежде всего можно отметить ограничение на размер одного взятого файла - он не может быть больше 4 Гб. Также в системе FAT32 нельзя встроенными средствами Windows задать логический диск, размер которого был бы больше 32 Гб. Но это можно сделать, установив дополнительное специализированное ПО.

Другая популярная система управления файлами, что разработана Microsoft - это NTFS. Как считают некоторые IT-эксперты, по большинству параметров она превосходит FAT32. Но этот тезис справедлив, если речь идет о работе компьютера под управлением Windows. Система NTFS не настолько универсальна, как FAT32. Особенности ее функционирования делают использование данной файловой системы не всегда комфортным, в частности, в мобильных устройствах. Одно из ключевых преимуществ NFTS - надежность. Например, в тех случаях, когда у жесткого диска внезапно отключается питание, вероятность того, что файлы повредятся, сводится к минимуму, благодаря предусмотренным в NTFS алгоритмам дублирования доступа к данным.

Одна из новейших файловых систем от Microsoft - exFAT. Наилучшим образом она адаптирована для флешек. Базовые принципы работы в ней те же, что и в FAT32, но присутствует также и значимая модернизация в некоторых аспектах: например, нет никаких ограничений по размеру единичного файла. Вместе с тем система exFAT, как отмечают многие IT-эксперты, в числе тех, что обладают низкой универсальностью. На компьютерах под управлением ОС, отличных от Windows, работа с файлами при использовании exFAT может быть затруднена. Более того, даже в некоторых версиях самой Windows, таких как XP, данные на дисках, отформатированных по алгоритмам exFAT, могут не читаться. Потребуется установка дополнительного драйвера.

Отметим, что по причине задействования достаточно широкого спектра файловых систем в ОС Windows у пользователя могут возникать периодические сложности в аспекте совместимости различных устройств с компьютером. В ряде случаев, например, требуется установить драйвер файловой системы WPD (Windows Portable Devices - технологии, используемой при работе с переносными устройствами). Иногда его может не оказаться под рукой у пользователя, вследствие чего внешний носитель ОС может не распознать. Файловая система WPD может потребовать дополнительных программных средств адаптации к операционной среде на конкретном компьютере. В ряде случаев пользователь будет вынужден обращаться к IT-специалистам для решения проблемы.

Как определить, какая именно файловая система - exFAT или NTFS, а может быть, FAT32 - оптимальна для использования в конкретных случаях? Рекомендации IT-специалистов в целом следующие. Можно задействовать два основных подхода. Согласно первому следует разграничивать типичные файловые системы жестких дисков, а также те, что лучше адаптированы к флеш-накопителям. FAT и FAT32, как считают многие специалисты, лучше подходят для "флешек", NTFS - для винчестеров (в силу технологических особенностей работы с данными).

В рамках второго подхода значение имеет величина носителя. Если речь идет об использовании сравнительно небольшого объема диска или флешки, отформатировать их можно в системе FAT32. Если диск большего размера, то можно попробовать exFAT. Но только в том случае, если не предполагается использование носителей на других компьютерах, особенно тех, где стоят не самые свежие версии Windows. Если речь идет о больших жестких дисках, в том числе и внешних, то их целесообразно форматировать в NTFS. Примерно таковы критерии, по которым может быть выбрана оптимальная файловая система - exFAT или NTFS, FAT32. То есть использовать какую-либо из них следует, учитывая размер носителя, его тип, а также версию ОС, на котором накопитель преимущественно используется.

Файловые системы для Mac

Другая популярная программно-аппаратная платформа на мировом рынке компьютерной техники - Macintosh от Apple. ПК данной линейки работают под управлением операционной системы Mac OS. Каковы особенности организации работы с файлами в компьютерах Mac? В самых современных ПК от Apple используется файловая система Mac OS Extended. Ранее в компьютерах Mac работа с данными управлялась в соответствии со стандартами HFS.

Главное, что можно отметить в аспекте ее характеристик: на диске, которым управляет файловая система Mac OS Extended, могут размещаться файлы очень большого объема - речь может идти о нескольких миллионах терабайт.

Файловая система в Android-устройствах

Самая популярная ОС для мобильных устройств - виде электронной техники, не уступающей по популярности ПК, - это Android. Каким образом осуществляется управление файлами на девайсах соответствующего типа? Отметим прежде всего, что данная операционная система - фактически "мобильная" адаптация ОС Linux, которая, благодаря открытому программному коду, может быть модифицирована с перспективой использования на самом широком спектре устройств. Поэтому управление файлами в мобильных девайсах под управлением Android осуществляется в целом по тем же принципам, что и в Linux. Некоторые из них мы отметили выше. В частности, управление файлами в Linux осуществляется без деления носителя на логические диски, как это происходит в Windows. Что еще интересного заключает в себе файловая система Android?

Корневым каталогом в Android, как правило, выступает область данных, именуемая /mnt. Соответственно, адрес нужного файла может выглядеть примерно так: /mnt/sd/photo.jpg. Кроме того, есть еще одна особенность системы управления данными, что реализована в данной мобильной ОС. Дело в том, что флеш-память девайса, как правило, классифицирована на несколько разделов, таких как, например, System или Data. При этом, изначально заданный размер каждого из них изменить нельзя. Приблизительную аналогию касательно данного технологического аспекта можно обнаружить, вспомнив, что нельзя (если не использовать специального ПО) менять размер логических дисков в Windows. Он должен быть фиксированным.

Еще одна интересная особенность организации работы с файлами в Android - соответствующая операционная система, как правило, записывает новые данные в конкретную область диска - Data. Работа, к примеру, с разделом System при этом не осуществляется. Поэтому, когда пользователь задействует функцию сброса программных настроек смартфона или планшета до уровня "заводских", то на практике это означает, что те файлы, что записаны в область Data, попросту стираются. Раздел System же, как правило, остается неизменным. Более того, какие-либо корректировки содержимого в System пользователь, не обладая специализированным ПО, осуществлять не может. Процедура, связанная с обновлением системной области носителя в Android-устройстве, называется перепрошивкой. Это не форматирование, хотя обе операции часто осуществляются одновременно. Как правило, перепрошивка применяется с целью установки на мобильное устройство более новой версии ОС Android.

Таким образом, ключевые принципы, на базе которых работает файловая система Android - отсутствие логических дисков, а также жесткое разграничение доступа к системным и пользовательским данным. Нельзя сказать, что данный подход принципиально отличается от того, что реализован в Windows, однако, как считают многие IT-эксперты, в ОС от Microsoft для пользователей присутствует несколько большая свобода в работе с файлами. Впрочем, как полагают некоторые специалисты, это нельзя считать однозначным преимуществом Windows. "Либеральный" режим в аспекте управления файлами задействуют, конечно же, не только пользователи, но и компьютерные вирусы, к которым Windows очень восприимчива (в отличие от Linux и ее "мобильной" реализации в виде Android). В этом, как считают эксперты, заключается одна из причин того, что вирусов для Android-устройств столь немного - чисто с технологической точки зрения они не могут в полной мере функционировать в операционной среде, работающей по принципам строгого контроля доступа к файлам.

Было время, когда вопрос, вынесенный в заголовок статьи, просто не стоял перед пользователями. Несмотря на то что файловых систем было более одной еще до момента появления первых персоналок, выбора обычно не существовало. Просто потому, что разных несовместимых (или лишь частично совместимых) архитектур компьютеров было много, за каждой стояла конкретная фирма, использующая свою собственную операционную систему и имеющая собственные представления о том, «что такое хорошо и что такое плохо». Причем еще и носители данных применялись разные и друг с другом несовместимые. А если и совместимые аппаратно (например, НГМД использовались очень многими вычислительными системами, причем основные типоразмеры дисководов на аппаратном уровне были худо-бедно стандартизованы), то данные все организовывали по-своему. Более-менее совместимыми оказались ленточные накопители, поскольку так уж сложилось исторически, что еще со времен «больших» компьютеров именно они чаще всего применялись для обмена данными между системами различной архитектуры. Но единственными массовыми магнитофонами, которые использовались совместно с персоналками, оказались бытовые, а примитивность типичных компакт-кассет приводила к тому, что все производители, если уж их и использовали, пытались «выжать» из носителя максимум, причем все делали это разными способами.

Ситуация улучшилась лишь тогда, когда стало ясно, что линейка IBM PC (прародительница практически всех выживших на сегодняшний день архитектур ПЭВМ) постепенно становится стандартом де-факто в отрасли (и не только). Ну а когда на рынке появляется доминирующая архитектура, все остальные вынуждены это учитывать - из соображений выживания. Основным сменным носителем данных тогда являлись гибкие диски, так что достаточно быстро средством обеспечения совместимости оказались те их форматы, которые использовала компания IBM. Далеко не лучшие, надо заметить. Причем не только по аппаратуре, хотя и это тоже - несмотря на то что первые дисководы на 3,5″ появились в том же году, что и первые РС, и многие производители начали их использовать еще в первой половине 80-х годов, сама IBM перешла на этот конструктив лишь в 1987 году, а до того момента цеплялась за пятидюймовые дисководы, представленные на рынке еще в 1976 году. Однако и с точки зрения форматирования «оригинальные» разработки IBM уступали даже многим клонам ее компьютеров - в частности, компания на двухсторонних дискетах двойной плотности хранила лишь 360 Кбайт информации, в то время как конкуренты из них же без особых ухищрений выжимали и 600-720 Кбайт. Ну а уж о примитивности файловой системы FAT не рассуждал только ленивый. Хотя, вполне возможно, именно примитивность и стала второй причиной превращения «писюковых дискет» в стандарт - его было очень уж легко поддерживать. Пусть хотя бы только для чтения и в дополнение к собственному «продвинутому» варианту.

Впрочем, с точки зрения сегодняшнего дня все это имеет лишь историческую ценность. Дискеты давно уже перестали использоваться в качестве основного средства переноса информации, да и альтернативных линейке «х86-based» компьютеров на большинстве сегментов рынка не осталось. Однако нельзя сказать, что это полностью решило все проблемы. Дело в том, что на этой са́мой единственной стандартной платформе работает чуть ли не больше операционных систем, чем их было во времена, когда «расцветали все цветы». Даже если взять самое распространенное на рынке семейство, а именно Windows, то оно, строго говоря, неоднородно. Бо́льшая часть инсталляций приходится до сих пор на Windows XP - родом из начала века, но занимающую чуть ли не 2/3 рынка. Где-то четверть последнего приходится на современные версии Windows, а все оставшееся - на сборную солянку из сохранившихся компьютеров с системами, появившимися до Windows XP (их сейчас осталось мало, но все еще встречаются), различные версии MacOS и цельный букет UNIX-систем. Но даже если вам повезло никогда не сталкиваться в практической жизни ни с чем, кроме Windows XP, полностью это проблему не решает - некогда «компьютерные» технологии давно уже вышли за пределы этого рынка, активно вторгаясь в сферу бытовой электроники. Например, большинство сегодняшних видеоплееров умеет работать с USB-накопителями, а в фотоаппаратах или мобильных телефонах повсеместно применяются разнообразные карты памяти. И тут все оказывается просто только в том случае, если, например, карта используется исключительно в «своем» фотоаппарате - форматируем ее средствами камеры и навсегда забываем об этом вопросе:) Однако если нам надо хотя бы обмениваться данными с компьютером, тут уже все не так очевидно…

Причина возникновения проблемы в том, что практически все современные операционные системы за редким исключением поддерживают не одну файловую систему (как это было 20-30 лет назад), а несколько. Причем степень их поддержки может быть совершенно разной. И иногда изменяемой при помощи дополнительных программ. Вариантов масса, поэтому мы не будем пытаться охватить их все в одной небольшой статье. Но достаточное количество базовой информации, дабы можно было понять «куда копать», все же попробуем дать. А для этого достаточно познакомиться с основными доступными файловыми системами, а также их достоинствами и недостатками.

FAT - старая, ограниченная, но вездесущая

Начнем мы со старейшей файловой системы, появившейся еще во времена MS DOS, но, тем не менее, до сих пор иногда встречающейся. К положительным особенностям системы относятся простота, компактность служебных областей и большой срок присутствия на рынке. В общем-то, первые два достоинства непосредственно вытекают из третьего - в 1980 году, когда система и появилась, компьютеры были столь «мощными», а носители информации столь «емкими», что ничего сложного использовать было просто нельзя. Впрочем, оригинальный вариант, а именно FAT12, уже давно вышел из широкого пользования вследствие того, что размер диска с этой системой не может превышать 32 МиБ. Хотя, конечно, к некоторым фотоаппаратам и даже видеокамерам до сих пор умудряются прилагать флэш-карту такого или даже меньшего размера, но полноценно использовать их в подобной комплектации все равно не выйдет.

А вот FAT16, появившаяся 23 года назад, уже интереснее, благо размер как файла, так и раздела доведен уже до 2 ГиБ (для тех, кто еще не успел привыкнуть к двоичным приставкам - это чуть больше двух гигабайт). Теоретически, емкость раздела может достигать и 4 ГиБ при использовании кластеров по 64 Кбайт, однако этот вариант не является стандартным, так что поддерживается далеко не везде. На компьютерах с таким разделом умеют работать системы начиная с Windows NT4 и более новыми этой линейки, но вот ни бытовая техника, ни большинство «альтернативных» систем с ними не совместимо. Таким образом, этот вариант можно считать полностью пригодным лишь для накопителей невысокой емкости. Последних у пользователей на руках достаточно много до сих пор, но «бал правят» не они. А вот во времена флэшек размером до гигабайта была FAT16 весьма актуальной ввиду, как раз, небольших потребностей в объеме для своих нужд. Так, например, на отформатированной под FAT16 флэшке на 128 МБ пользователю остаются доступными 128 621 744 байт, а если использовать FAT32 - 127 921 152 байт. С одной стороны, пустячок, а с другой - лет пять назад «лишние» 700 КБ на дороге не валялись. Недаром Microsoft не рекомендует использовать FAT32 на разделах менее 512 МБ, так что отформатировать их во что-то отличное от FAT16 можно только сторонними средствами.

Последняя все еще актуальная сфера применения этой системы - телефоны, плееры, фотоаппараты и прочая «бытовуха», рассчитанная на поддержку карт SD или microSD, но не поддерживающая SDHC (сейчас такое уже не выпускается, но еще используется). Стандартной файловой системой для этих карт является как раз FAT16, поэтому большинство таких устройств никаких других и не поддерживают. В данном случае крайне желательно форматировать карту исключительно в устройстве, но не делать этого на компьютере. Причина в том, что Windows XP (по крайней мере, про нее это известно точно) иногда умудряется при явном указании ФС отформатировать карту под FAT32, после чего тот же фотоаппарат может ее не увидеть и даже не предложить возможности переформатировать. Решать проблему приходится какой-нибудь альтернативной программой форматирования - снова на компьютере.

FAT32 - разумный компромисс между совместимостью и прочими характеристиками

В отличие от предшественницы, FAT32 сейчас является наиболее массовой системой для внешних накопителей. 90% флэшек и более половины ВЖД поступают с заводов отформатированными именно под нее. Причина? По совместимости она лишь немногим хуже FAT16 - «за кадром остаются» только слишком уж древние операционные системы. Изначально поддержка FAT32 появилась в августе 1996 года вместе с Windows 95 OSR2 - если кто-то ныне и использует более старую ОС на своем компьютере, то вряд ли он будет подключать к нему современный внешний накопитель:) Причем в большинстве случаев - и не сможет.

Однако иногда использование FAT32 уже неудобно, из-за чего приходится использовать другие системы. Основным и самым существенным недостатком является то, что файлы не могут иметь размер более 4 ГиБ. Соответственно, хранить на накопителе образы DVD-дисков, очень большие архивы или некоторые фильмы - не выходит. Вернее, это можно сделать, но их приходится разбивать на части, а потом перед использованием «склеивать», что очень неудобно. Либо такое разбиение нужно предусмотреть заранее, что иногда делается, но далеко не всегда. Именно эта причина и вызывает необходимость использования других файловых систем - пусть имеющих меньшую поддержку со стороны оборудования, зато свободных от ограничения на размер файла. Судя по нашей конференции, кстати, эта проблема в последнее время стои́т достаточно остро - многие пользователи, купив внешний жесткий диск или флэшдрайв, буквально в первые же дни пытаются записать туда очень большой файл и… очень удивляются реакции системы, которая сообщает о недостатке места на носителе. А удивляться есть чему: по-хорошему, создатели ОС могли бы обрабатывать данную ситуацию более корректным образом - сообщая пользователю, что используемая файловая система непригодна для записи данного файла; а иначе все очень странно выглядит: свободного места десяток или даже сотня (а то и несколько сотен) гигабайт, а рапортуют о его нехватке при попытке записи файла размером всего 5-6 гигабайт. Мы, конечно, не думаем, что после публикации данной статьи соответствующие сообщения в форуме исчезнут, однако надеемся, что их, хотя бы, станет немного меньше:)

А вот размер тома, отформатированного под FAT32, теоретически может составлять до 8 ТиБ, что даже на сегодня очень много (не говоря уже о времени, когда система создавалась). Впрочем, не все так просто - компания Microsoft, скажем, считает, что тома более 32 ГиБ делать нежелательно. И не просто считает, а ввела соответствующие ограничения во встроенные программы форматирования Windows XP и более новых версий своей системы. Особенно печальный результат получается при попытке отформатировать, например, флэшку на 64 ГБ штатными средствами: для FAT32 (по мнению Microsoft) она слишком велика, а NTFS на сменных носителях (опять же - по мнению Microsoft) использовать не положено. Обе проблемы с легкостью решаются при помощи использования сторонних утилит форматирования. Так, например, простенькая консольная программа fat32format спокойно работает с томами до 2 ТБ (максимум для нединамических разделов Windows XP).

Не все гладко, кстати, и с Windows 98 или ME, несмотря на то что для них использование FAT32 безальтернативно. Дело в том, что некоторые встроенные в эти системы утилиты так и остались 16-разрядными. Ну а поскольку для таких программ максимальный размер адресуемого блока памяти равен примерно 16 МБ, то разделы, на которых таблица FAT имеет больший размер, им недоступны. В переводе на простой язык это означает невозможность полноценно использовать разделы больше ≈127,5 ГиБ (около 133 ГБ). Точнее, попробовать-то можно, но осторожно - не пытаясь «натравить» на такой раздел разнообразные дисковые утилиты: в лучшем случае (штатные средства) они просто не будут работать, а в худшем - могут и данные испортить. Либо, для страховки, можно просто разбивать накопители, которые планируется использовать и с Windows 9x, на разделы по сотне гигабайт. Заметим, что к внешним дискам эти ОС все равно более лояльны, чем к внутренним: получить под их управлением доступ к внутреннему винчестеру более чем на 137 ГБ - задача не совсем тривиальная, а вот для USB-накопителя бо́льшие объемы допустимы без особых проблем, за исключением неработоспособности дисковых утилит.

У других ОС таких проблем нет, да и описанные, в принципе, решаемы. Это и позволяет считать данную файловую систему оптимальной для тех случаев, когда требуется обеспечить максимальную совместимость внешнего накопителя со всем спектром компьютерной и бытовой техники. Особенно в тех случаях, когда хранение файлов размером более 4 ГБ не предполагается - тогда и заметных на практике недостатков не будет.

NTFS - быстрая, мощная, но избыточная

До последнего времени данная файловая система являлась единственным надежно работающим средством обойти «проблему больших файлов» на компьютерах под управлением Windows. Разумеется, не всякой версии Windows - линейка 9х в принципе не поддерживает NTFS, однако совместимость с этими системами важна уже, мягко говоря, не всем. Хуже то, что в бытовой технике поддержка NTFS встречается достаточно редко. Но в последнее время встречается. Кроме того, такие разделы поддерживают и компьютеры, работающие под управлением MacOS или Linux - как минимум, они умеют читать данные с таких разделов, а при установке специальных драйверов нередко начинает работать и функция записи. При помощи дополнительных драйверов, кстати, поддержку NTFS можно «прикрутить» и к Windows 98 или даже DOS.

Чем эта система хороша? Во-первых, ограничения как на размер тома, так и на размер файлов можно считать отсутствующими: и то, и другое может составлять до 16 экзабайт (для улучшения восприятия сообщим, что в одном экзабайте примерно миллион терабайт). Во-вторых, можно получить и более высокую скорость работы, особенно если попадаются каталоги, содержащие очень большое количество файлов - например, когда их несколько тысяч, разница в скорости работы FAT32 и NTFS заметна невооруженным глазом. В-третьих, эта система является более отказоустойчивой, как минимум из-за журналирования. В-четвертых, она способна работать с кластерами малого размера (точнее, не только способна, но и рассчитана на это), так что потери дискового пространства при хранении маленьких файлов у NTFS заметно меньше, чем у FAT32, не говоря уже об exFAT. В-пятых, достаточно удобной возможностью является встроенная поддержка сжатия данных. Разумеется, архивирование «на лету» куда менее эффективно, чем при помощи специальных программ-архиваторов с серьезными алгоритмами, но зато и выполняется прозрачным для пользователя образом, а при хранении хорошо сжимаемых данных дает заметный эффект. В общем, нет ничего удивительного, что на внутренних жестких дисках на данный момент NTFS является доминирующей системой.

Но на внешних у нее есть и недостатки. Самым безобидным из них является невозможность на практике получить многие преимущества системы. В частности, в настоящий момент редко кто переносит несжатые файлы: даже если говорить об офисных документах, то начиная с 2007 года они уже автоматически сжимаются при сохранении, а о фотографиях или видеофайлах и говорить нечего, так что встроенная поддержка сжатия оказывается не у дел (и даже чаще мешает, чем наоборот). Да и огромные количества файлов в каталоге встречаются редко - куда более типичным является десяток очень больших файлов. (Заодно это нивелирует и пользу от небольших кластеров.) Кроме того, улучшенная за счет кэширования производительность может оказаться палкой о двух концах - отформатированные под NTFS накопители крайне нежелательно отключать от компьютера, не воспользовавшись «Безопасным извлечением» или его аналогами. Все указанные неудобства свойственны для любых внешних накопителей, но для основанных на флэш-памяти есть и дополнительные. Во-первых, журналирование в данном случае рекомендуется отключать (поскольку ресурс массовых флэшек ограничен, так что «лишние» записи файлов им ни к чему). Во-вторых, быстродействие этих накопителей существенным образом зависит от выровненности всех структур ФС и кластеров по границам блоков стирания, что актуально и для FAT, но для NTFS, с ее небольшим размером кластера (а также любовью многих программ, в том числе и штатной утилиты форматирования Windows XP, смещать начало раздела на 63 сектора), может оказаться весьма критично. Да и вообще - как показывает опыт многих пользователей, наилучших скоростных результатов проще всего добиться, используя размер кластера в 32 Кбайт, т. е. не меньший, чем для FAT32.

Добавим к этому проблемы совместимости, после чего становится очевидным, что использование на сменных носителях именно NTFS чаще всего не слишком оправдано. Впрочем, как показано выше (и будет показано ниже), иногда этот вариант является безальтернативным.

exFAT - будущее флэш-накопителей и не только

В ситуации, когда FAT32 уже недостаточно, а NTFS - неоптимальна, неудивительно, что компания Microsoft в очередной раз (спустя 10 лет после появления FAT32) доработала FAT. Новая версия, получившая название exFAT, дебютировала в Windows CE 6, поскольку была наиболее актуальна для встроенных систем и бытовой техники, но позднее ее поддержка появилась и в настольных компьютерах. Чем новинка отличается от предыдущей версии?

Во-первых, снято ограничение на размер файла - подобно варианту «взрослых» систем, он может достигать 16 экзабайт. Во-вторых, увеличен размер кластера: если для предыдущих систем его приходилось удерживать в рамках 32 Кбайт (иногда применяя не всеми поддерживаемый вариант на 64 Кбайт), то в exFAT максимальный размер кластера составляет 32 МиБ, т. е. увеличился в 1024 раза. Разумеется, это крайне неудобно в случае файлов небольшого размера, однако они сейчас не слишком-то актуальны в качестве объекта транспортировки, зато размер таблицы размещения файлов удалось сократить соответствующим образом, а следовательно, снизились и требования к объему оперативной памяти для работы с томами большого размера. Естественно, для exFAT было отменено и волюнтаристское ограничение в 32 ГиБ для размера тома - не нужно оно более:) Первыми, кто этим воспользовался, кстати, оказались производители SD-карт памяти, достаточно жестко завязывающиеся в стандартах именно на FAT. Для спецификаций версий SD 1.х стандартной была FAT16 (что и определяло максимальную емкость карты в 2 ГБ), версия 2.0 ориентируется на FAT32 (карты SDHC до 32 ГБ), а в новой версии 3.0 для карт большого объема стандартом является именно exFAT (соответственно, карты SDXC заметных с точки зрения практического использования ограничений по емкости не имеют).

Нельзя также сказать, что все улучшения были только количественными - нашлись и качественные. В частности, отменены ограничения на количество файлов в каталоге. Не то чтобы они сильно мешали ранее, но все же - теперь, например, производителям фотоаппарата вовсе необязательно раскладывать фотографии по папкам, а можно спокойненько все записывать в корень карты. Более существенное улучшение - появилась битовая карта свободного места, что при правильном использовании позволяет уменьшить фрагментацию (ранее подбор наиболее подходящего свободного куска дискового пространства тоже был возможен, но ценой активного использования для каждой операции ресурсов системы). Журналирования, естественно, в рамках новой системы нет - слишком проста она для этого, да и для флэш-накопителей (на которые exFAT в первую очередь и нацелена) данная операция нежелательна. Но и потенциальную возможность повышения отказоустойчивости предусмотрели - возможна поддержка транзакций (естественно, если это поддерживает хост-устройство).

В общем, системка получилась на диво хороша - есть все нужное и нет ничего ненужного. Почему же до сих пор приходится мучиться с выбором, а не перейти на exFAT повсеместно? А потому, что для внешнего накопителя, как уже не раз было сказано, совместимость является той еще «священной коровой» - что толку в характеристиках используемой вами на флэшке файловой системы, если вы этой флэшкой сможете воспользоваться лишь на каждом десятом компьютере? exFAT до сих пор находится как раз в подобном положении. Гарантированно ее использовать можно только на компьютерах, работающих под управлением Windows Vista с SP1, Windows Server 2008 и Windows Seven. Вроде бы поддержка есть и в MacOS X 10.6, но тут, вероятно, потребуется апдейт системы - кстати, очень может быть, что Apple бы и не стала поддерживать новую разработку Microsoft, однако в последнюю линейку компьютеров компания решила встроить картоводы с поддержкой карт SDXC, а это в обязательном порядке потребовало и совместимости с exFAT. Для Linux придется самостоятельно интегрировать драйвер (причем их два: нормальный поддерживает только чтение, а запись - лишь использующий FUSE). Пользователям Windows XP повезло чуть больше - еще в начале 2009 года на Windows Update появилось официальное обновление KB955704, добавляющее к системам с SP2 и SP3 поддержку exFAT, однако оно не относится к обязательным, так что найдется далеко не на всех компьютерах. С бытовой техникой все столь же грустно, как с предыдущими версиями Windows - счастливым исключением являются немногие современные устройства с поддержкой SDXC (им деваться некуда), однако в остальных до сих пор проще встретить поддержку NTFS, нежели exFAT.

Прочая экзотика, иногда полезная

Нравится это кому или нет, но на данный момент времени большинство персональных компьютеров (порядка 95%) работает под управлением одной из систем семейства Windows, причем в основном эта доля распределена между Windows XP, Vista и Seven. Соответственно, наиболее актуальным является выбор между перечисленными файловыми системами, ведь только они без особых ухищрений поддерживаются этой тройкой. Задумываться о чем-либо ином есть смысл только в том случае, когда совместимость с Windows вас в принципе не волнует: несмотря на то что для поддержки большинства «родных» для прочих ОС файловых систем есть и драйверы для Windows, на каждый компьютер их ставить - дело неблагодарное. Поэтому вне зависимости от достоинств и недостатков какой-нибудь ext3 использовать ее можно разве что в том случае, когда внешний накопитель эксплуатируется в качестве стационарного или близком к тому виде.

Единственное частичное исключение из правил - файловая система HFS+, традиционная для MacOS X. И дело даже не в каких-то ее особых качествах, а в том, что эта операционка имеет пусть и небольшую, но монолитную долю рынка (чего не скажешь о разных иногда несовместимых друг с другом «линуксах»). Кроме того, несмотря на малую распространенность в мировом масштабе, есть страны, где ниша MacOS вполне ощутима. Это и ставит HFS+ в привилегированное положение. Вплоть до того, что некоторые производители продают специальные версии внешних винчестеров «for Mac», отформатированных под HFS+ (а не FAT32 или NTFS, которые встречаются чаще) прямо на заводе. Из этого не следует ни непригодность для Mac прочих винчестеров, ни невозможность использовать «маковские» на других компьютерах. Более того - для обмена данными между Маком и прочими системами вообще удобнее применять FAT32, гарантированно работающую в большинстве случаев. В чем плюс именно HFS+? В том, что встроенная система резервного копирования и восстановления информации Time Machine совместима только с дисками с этой файловой системой. Таким образом, если вы используете накопитель для резервирования данных на Маке, выбора не остается. Ну а если иногда возникает и необходимость подключения этого внешнего устройства к другим компьютерам, вполне логичным действием будет установка на них специальных драйверов с поддержкой HFS+. Впрочем, не самым худшим вариантом окажется и разбиение диска на пару разделов - небольшой с FAT32 позволит обмениваться данными различным системам, а раздел HFS+ даст возможность ни в чем себе не отказывать при работе под MacOS X.

Иногда покупка специальной версии внешнего винчестера «для Маков» может быть оправдана и для пользователя Windows - как правило, все эти модели снабжены интерфейсом FireWire (иногда и FireWire-800) в дополнение к USB 2.0, что может оказаться полезным. C файловой системой проблем не будет - с точки зрения Windows, отформатированные под HFS+ винчестеры никакой структуры данных не содержат, так что просто создаем раздел (или разделы) и форматируем нужным нам образом.

FAQ вместо заключения

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

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

Задачи, которые должна решать файловая система:

  • именование файлов.
  • программный интерфейс для работы пользовательских программ.
  • защита данных от сбоев питания и аппаратных и программных ошибок.
  • хранение параметров файлов.

Современные файловые системы можно разделить на несколько групп, согласно их предназначению:

  • Файловые системы для носителей информации с произвольным доступом (для , флеш накопителей): FAT32, HPFS, ext2 и многие другие.
  • Файловые системы для носителей информации с последовательным доступом (магнитные ленты): QIC и др.
  • Файловые системы для оптических дисков: ISO9660, HFS, UDF и др.
  • Виртуальные файловые системы: AEFS и др.
  • Сетевые файловые системы: NFS, SSHFS, CIFS, GmailFS и др.
  • Файловые системы предназначенные исключительно для : YAFFS, exFAT, ExtremeFFS.

Популярные файловые системы:

FAT – файловая система разработанная Биллом Гейтсом и Марком МакДональдом в 70-х годах прошлого века. Благодаря своей простоте используется в флеш-накопителях до сих пор. Существет три версии файловой системы FAT: FAT12, FAT16 и FAT32. Эти версии файловой системы FAT отличаются разрядностью записей (количеством бит, которые отведены под хранение номера кластера). То есть, чем больше разрядность, тем больше объем диска, с которым может работать файловая система FAT. Так, для FAT32 максимальный размер диска составляет 127 гигабайт.

NTFS – файловая система нового поколения от компании Microsoft. Данная файловая система используется для всех операционных систем Microsoft Windows NT. Впервые NTFS вышла в свет в 1993 году, вместе с операционной системой Windows NT 3.1. По сравнению с FAT, файловая система NTFS получила большое количество улучшений. Так, практически исчезло ограничение на максимальный размер файла и диска. Кроме этого появилась поддержка жестких ссылок, шифрования и сжатия.

ext – файловая система, разработанная специально под операционные системы на ядре Linux. Разработка была впервые представлена в 1992 году. Сейчас существует несколько версий данной файловой системы: ext, ext2, ext3, ext3cow и ext4. Файловая система ext4 на данный момент является самой новой и актуальной версией ext, именно эта версия используется большинством современных дистрибутивов Linux.

Почему смартфон может не запускать программы с карты памяти? Чем ext4 принципиально отличается от ext3? Почему флешка проживет дольше, если отформатировать ее в NTFS, а не в FAT? В чем главная проблема F2FS? Ответы кроются в особенностях строения файловых систем. О них мы и поговорим.

Введение

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

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

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

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

Черный ящик

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

У поклонников Windows все просто: NTFS на всех дисковых разделах и FAT32 (или та же NTFS) на флешках. Если же стоит NAS и в нем используется какая-то другая файловая система, то для большинства это остается за гранью восприятия. К нему просто подключаются по сети и качают файлы, как из черного ящика.

На мобильных гаджетах с Android чаще всего встречается ext4 во внутренней памяти и FAT32 на карточках microSD. Яблочникам же и вовсе без разницы, что у них за файловая система: HFS+, HFSX, APFS, WTFS... для них существуют только красивые значки папок и файлов, нарисованные лучшими дизайнерами. Богаче всего выбор у линуксоидов, но прикрутить поддержку неродных для операционки файловых систем можно и в Windows, и в macOS - об этом чуть позже.

Общие корни

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

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

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

Как и другие сбалансированные деревья, B-trees имеют одинаковую длину путей от корня до любого листа. Вместо роста ввысь они сильнее ветвятся и больше растут в ширину: все точки ветвления у B-дерева хранят множество ссылок на дочерние объекты, благодаря чему их легко отыскать за меньшее число обращений. Большое число указателей снижает количество самых длительных дисковых операций - позиционирования головок при чтении произвольных блоков.

Концепция B-деревьев была сформулирована еще в семидесятых годах и с тех пор подвергалась различным улучшениям. В том или ином виде она реализована в NTFS, BFS, XFS, JFS, ReiserFS и множестве СУБД. Все они - родственники с точки зрения базовых принципов организации данных. Отличия касаются деталей, зачастую довольно важных. Недостаток у родственных файловых систем тоже общий: все они создавались для работы именно с дисками еще до появления SSD.

Флеш-память как двигатель прогресса

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

Связано это ограничение с тем, что в NAND-памяти все ячейки объединены в блоки, каждый из которых имеет только одно общее подключение к управляющей шине. Не будем вдаваться в детали страничной организации и расписывать полную иерархию. Важен сам принцип групповых операций с ячейками и тот факт, что размеры блоков флеш-памяти обычно больше, чем блоки, адресуемые в любой файловой системе. Поэтому все адреса и команды для накопителей с NAND flash надо транслировать через слой абстрагирования FTL (Flash Translation Layer).

Совместимость с логикой дисковых устройств и поддержку команд их нативных интерфейсов обеспечивают контроллеры флеш-памяти. Обычно FTL реализуется именно в их прошивке, но может (частично) выполняться и на хосте - например, компания Plextor пишет для своих SSD драйверы, ускоряющие запись.

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

Такой подход напоминает армейские будни: чтобы отдать приказ одному солдату, сержант делает общее построение, вызывает бедолагу из строя и командует остальным разойтись. В редкой ныне NOR-памяти организация была спецназовская: каждая ячейка управлялась независимо (у каждого транзистора был индивидуальный контакт).

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

Модули с одноуровневыми ячейками SLC имели заявленный ресурс в 100 тысяч циклов перезаписи и даже больше. Многие из них до сих пор работают в старых флешках и карточках CF. У MLC корпоративного класса (eMLC) ресурс заявлялся в пределах от 10 до 20 тысяч, в то время как у обычной MLC потребительского уровня он оценивается в 3–5 тысяч. Память этого типа активно теснит еще более дешевая TLC, у которой ресурс едва дотягивает до тысячи циклов. Удерживать срок жизни флеш-памяти на приемлемом уровне приходится за счет программных ухищрений, и новые файловые системы становятся одним из них.

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

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

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

От JFFS к F2FS

Одной из первых попыток написать файловую систему, которая бы учитывала принципы организации флеш-памяти, была JFFS - Journaling Flash File System. Изначально эта разработка шведской фирмы Axis Communications была ориентирована на повышение эффективности памяти сетевых устройств, которые Axis выпускала в девяностых. Первая версия JFFS поддерживала только NOR-память, но уже во второй версии подружилась с NAND.

Сейчас JFFS2 имеет ограниченное применение. В основном она все так же используется в дистрибутивах Linux для встраиваемых систем. Ее можно найти в маршрутизаторах, IP-камерах, NAS и прочих завсегдатаях интернета вещей. В общем, везде, где требуется небольшой объем надежной памяти.

Дальнейшей попыткой развития JFFS2 стала LogFS, у которой индексные дескрипторы хранились в отдельном файле. Авторы этой идеи - сотрудник немецкого подразделения IBM Йорн Энгель и преподаватель Оснабрюкского университета Роберт Мертенс. Исходный код LogFS выложен на GitHub . Судя по тому, что последнее изменение в нем было сделано четыре года назад, LogFS так и не обрела популярность.

Зато эти попытки подстегнули появление другой специализированной файловой системы - F2FS. Ее разработали в корпорации Samsung, на долю которой приходится немалая часть производимой в мире флеш-памяти. В Samsung делают чипы NAND Flash для собственных устройств и по заказу других компаний, а также разрабатывают SSD с принципиально новыми интерфейсами вместо унаследованных дисковых. Создание специализированной файловой системы с оптимизацией для флеш-памяти было с точки зрения Samsung давно назревшей необходимостью.

Четыре года назад, в 2012 году, в Samsung создали F2FS (Flash Friendly File System). Ее идея хороша, но реализация оказалась сыроватой. Ключевая задача при создании F2FS была проста: снизить число операций перезаписи ячеек и распределить нагрузку на них максимально равномерно. Для этого требуется выполнять операции с несколькими ячейками в пределах того же блока одновременно, а не насиловать их по одной. Значит, нужна не мгновенная перезапись имеющихся блоков по первому запросу ОС, а кеширование команд и данных, дозапись новых блоков на свободное место и отложенное стирание ячеек.

Сегодня поддержка F2FS уже официально реализована в Linux (а значит, и в Android), но особых преимуществ на практике она пока не дает. Основная особенность этой файловой системы (отложенная перезапись) привела к преждевременным выводам о ее эффективности. Старый трюк с кешированием даже одурачивал ранние версии бенчмарков, где F2FS демонстрировала мнимое преимущество не на несколько процентов (как ожидалось) и даже не в разы, а на порядки. Просто драйвер F2FS рапортовал о выполнении операции, которую контроллер только планировал сделать. Впрочем, если реальный прирост производительности у F2FS и невелик, то износ ячеек определенно будет меньше, чем при использовании той же ext4. Те оптимизации, которые не сможет сделать дешевый контроллер, будут выполнены на уровне самой файловой системы.

Экстенты и битовые карты

Пока F2FS воспринимается как экзотика для гиков. Даже в собственных смартфонах Samsung все еще применяется ext4. Многие считают ее дальнейшим развитием ext3, но это не совсем так. Речь идет скорее о революции, чем о преодолении барьера в 2 Тбайт на файл и простом увеличении других количественных показателей.

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

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

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


Диета с ограничением FAT

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

Загадка

Отгадай загадку: в двенадцать она начала полнеть, к шестнадцати была глуповатой толстушкой, а к тридцати двум стала жирной, так и оставшись простушкой. Кто она?

Правильно, это история про файловую систему FAT. Требования совместимости обеспечили ей дурную наследственность. На дискетах она была 12-разрядной, на жестких дисках - поначалу 16-битной, а до наших дней дошла уже как 32-разрядная. В каждой следующей версии увеличивалось число адресуемых блоков, но в самой сути ничего не менялось.

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

Зачем же FAT32 нужна в наши дни? Все так же исключительно для обеспечения совместимости. Производители справедливо полагают, что раздел с FAT32 сможет прочитать любая ОС. Поэтому именно его они создают на внешних жестких дисках, USB Flash и картах памяти.

Как освободить флеш-память смартфона

Карточки microSD(HC), используемые в смартфонах, по умолчанию отформатированы в FAT32. Это основное препятствие для установки на них приложений и переноса данных из внутренней памяти. Чтобы его преодолеть, нужно создать на карточке раздел с ext3 или ext4. На него можно перенести все файловые атрибуты (включая владельца и права доступа), поэтому любое приложение сможет работать так, словно запустилось из внутренней памяти.

Windows не умеет делать на флешках больше одного раздела, но для этого можно запустить Linux (хотя бы в виртуалке) или продвинутую утилиту для работы с логической разметкой - например, MiniTool Partition Wizard Free . Обнаружив на карточке дополнительный первичный раздел с ext3/ext4, приложение Link2SD и аналогичные ему предложат куда больше вариантов, чем в случае с одним разделом FAT32.


Как еще один аргумент в пользу выбора FAT32 часто называют отсутствие в ней журналирования, а значит, более быстрые операции записи и меньший износ ячеек памяти NAND Flash. На практике же использование FAT32 приводит к обратному и порождает множество других проблем.

Флешки и карты памяти как раз быстро умирают из-за того, что любое изменение в FAT32 вызывает перезапись одних и тех же секторов, где расположены две цепочки файловых таблиц. Сохранил веб-страничку целиком, и она перезаписалась раз сто - с каждым добавлением на флешку очередной мелкой гифки. Запустил портейбл-софт? Он насоздавал временных файлов и постоянно меняет их во время работы. Поэтому гораздо лучше использовать на флешках NTFS с ее устойчивой к сбоям таблицей $MFT. Мелкие файлы могут храниться прямо в главной файловой таблице, а ее расширения и копии записываются в разные области флеш-памяти. Вдобавок благодаря индексации на NTFS поиск выполняется быстрее.

INFO

Для FAT32 и NTFS теоретические ограничения по уровню вложенности не указаны, но на практике они одинаковые: в каталоге первого уровня можно создать только 7707 подкаталогов. Любители поиграть в матрешки оценят.

Другая проблема, с которой сталкивается большинство пользователей, - на раздел с FAT32 невозможно записать файл больше 4 Гбайт. Причина заключается в том, что в FAT32 размер файла описывается 32 битами в таблице размещения файлов, а 2^32 (минус единица, если быть точным) как раз дают четыре гига. Получается, что на свежекупленную флешку нельзя записать ни фильм в нормальном качестве, ни образ DVD.

Копирование больших файлов еще полбеды: при попытке сделать это ошибка хотя бы видна сразу. В других ситуациях FAT32 выступает в роли бомбы замедленного действия. Например, ты скопировал на флешку портейбл-софт и на первых порах пользуешься им без проблем. Спустя длительное время у одной из программ (допустим, бухгалтерской или почтовой) база данных раздувается, и... она просто перестает обновляться. Файл не может быть перезаписан, поскольку достиг лимита в 4 Гбайт.

Менее очевидная проблема заключается в том, что в FAT32 дата создания файла или каталога может быть задана с точностью до двух секунд. Этого недостаточно для многих криптографических приложений, использующих временные метки. Низкая точность атрибута «дата» - еще одна причина того, почему FAT32 не рассматривается как полноценная файловая система с точки зрения безопасности. Однако ее слабые стороны можно использовать и в своих целях. Например, если скопировать на том FAT32 любые файлы с раздела NTFS, то они очистятся от всех метаданных, а также унаследованных и специально заданных разрешений. FAT просто не поддерживает их.

exFAT

В отличие от FAT12/16/32, exFAT разрабатывалась специально для USB Flash и карт памяти большого (≥ 32 Гбайт) объема. Extended FAT устраняет упомянутый выше недостаток FAT32 - перезаписывание одних и тех же секторов при любом изменении. Как у 64-разрядной системы, у нее нет практически значимых лимитов на размер одного файла. Теоретически он может иметь длину в 2^64 байт (16 Эбайт), а карточки такого объема появятся нескоро.

Еще одно принципиальное отличие exFAT - поддержка списков контроля доступа (ACL). Это уже не та простушка из девяностых, однако внедрению exFAT мешает закрытость формата. Поддержка exFAT полноценно и легально реализована только в Windows (начиная с XP SP2) и OS X (начиная с 10.6.5). В Linux и *BSD она поддерживается либо с ограничениями, либо не вполне законно. Microsoft требует лицензировать использование exFAT, и в этой области много правовых споров.

Btrfs

Еще один яркий представитель файловых систем на основе B-деревьев называется Btrfs. Эта ФС появилась в 2007 году и изначально создавалась в Oracle с прицелом на работу с SSD и RAID. Например, ее можно динамически масштабировать: создавать новые индексные дескрипторы прямо в работающей системе или разделять том на подтома без выделения им свободного места.

Реализованный в Btrfs механизм копирования при записи и полная интеграция с модулем ядра Device mapper позволяют делать практически мгновенные снапшоты через виртуальные блочные устройства. Предварительное сжатие данных (zlib или lzo) и дедупликация ускоряют основные операции, заодно продлевая время жизни флеш-памяти. Особенно это заметно при работе с базами данных (достигается сжатие в 2–4 раза) и мелкими файлами (они записываются упорядоченно крупными блоками и могут храниться непосредственно в «листьях»).

Также Btrfs поддерживает режим полного журналирования (данных и метаданных), проверку тома без размонтирования и множество других современных фич. Код Btrfs опубликован под лицензией GPL. Эта файловая система поддерживается в Linux как стабильная начиная с версии ядра 4.3.1.

Бортовые журналы

Практически все более-менее современные файловые системы (ext3/ext4, NTFS, HFSX, Btrfs и другие) относят к общей группе журналируемых, поскольку они ведут учет вносимых изменений в отдельном логе (журнале) и сверяются с ним в случае сбоя при выполнении дисковых операций. Однако степень подробности ведения журналов и отказоустойчивость у этих файловых систем разные.

Еxt3 поддерживает три режима ведения журнала: с обратной связью, упорядоченный и полное журналирование. Первый режим подразумевает запись только общих изменений (метаданных), выполняемую асинхронно по отношению к изменениям самих данных. Во втором режиме выполняется та же запись метаданных, но строго перед внесением любых изменений. Третий режим эквивалентен полному журналированию (изменений как в метаданных, так и в самих файлах).

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

Журналирование в NTFS похоже на второй режим ведения лога в ext3. В журнал записываются только изменения в метаданных, а сами данные в случае сбоя могут быть утеряны. Такой метод ведения журнала в NTFS задумывался не как способ достижения максимальной надежности, а лишь как компромисс между быстродействием и отказоустойчивостью. Именно поэтому люди, привыкшие к работе с полностью журналируемыми системами, считают NTFS псевдожурналируемой.

Реализованный в NTFS подход в чем-то даже лучше используемого по умолчанию в ext3. В NTFS дополнительно периодически создаются контрольные точки, которые гарантируют выполнение всех отложенных ранее дисковых операций. Контрольные точки не имеют ничего общего с точками восстановления в \System Volume Infromation\ . Это просто служебные записи в логе.

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

Подключаем сторонние ФС в Windows

Использование файловых систем лимитировано их поддержкой на уровне ОС. Например, Windows не понимает ext2/3/4 и HFS+, а использовать их порой надо. Сделать это можно, добавив соответствующий драйвер.

WARNING

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

Открытый драйвер для чтения и записи на разделы ext2/3 с частичной поддержкой ext4. В последней версии поддерживаются экстенты и разделы объемом до 16 Тбайт. Не поддерживаются LVM, списки контроля доступа и расширенные атрибуты.


Существует бесплатный плагин для Total Commander. Поддерживает чтение разделов ext2/3/4.


coLinux - открытый и бесплатный порт ядра Linux. Вместе с 32-битным драйвером он позволяет запускать Linux в среде Windows с 2000 по 7 без использования технологий виртуализации. Поддерживает только 32-битные версии. Разработка 64-битной модификации была отменена. сoLinux позволяет в том числе организовать из Windows доступ к разделам ext2/3/4. Поддержка проекта приостановлена в 2014 году.

Возможно, в Windows 10 уже есть встроенная поддержка характерных для Linux файловых систем, просто она скрыта. На эти мысли наводит драйвер уровня ядра Lxcore.sys и сервис LxssManager, который загружается как библиотека процессом Svchost.exe. Подробнее об этом смотри в докладе Алекса Ионеску «Ядро Линукс, скрытое внутри Windows 10», с которым он выступил на Black Hat 2016.


ExtFS for Windows - платный драйвер, выпускаемый компанией Paragon. Он работает в Windows с 7 по 10, поддерживает доступ к томам ext2/3/4 в режиме чтения и записи. Обеспечивает почти полную поддержку ext4 в Windows.

HFS+ for Windows 10 - еще один проприетарный драйвер производства Paragon Software. Несмотря на название, работает во всех версиях Windows начиная с XP. Предоставляет полный доступ к файловым системам HFS+/HFSX на дисках с любой разметкой (MBR/GPT).

WinBtrfs - ранняя разработка драйвера Btrfs для Windows. Уже в версии 0.6 поддерживает доступ к томам Btrfs как на чтение, так и на запись. Умеет обрабатывать жесткие и символьные ссылки, поддерживает альтернативные потоки данных, ACL, два вида компрессии и режим асинхронного чтения/записи. Пока WinBtrfs не умеет использовать mkfs.btrfs, btrfs-balance и другие утилиты для обслуживания этой файловой системы.

Возможности и ограничения файловых систем: сводная таблица

Фай-ло-вая сис-те-ма Мак-си-маль-ный раз-мер тома Пре-дель-ный раз-мер одного файла Дли-на собст-вен-ного имени файла Дли-на пол-но-го имени файла (вклю-чая путь от корня) Пре-дель-ное число файлов и/или ката-ло-гов Точ-ность ука-за-ния даты файла/ката-ло-га Права дос-ту-па Жёсткие ссылки Сим-воль-ные ссылки Мгно-вен-ные снимки (snap-shots) Сжа-тие дан-ных в фоне Шиф-ро-ва-ние дан-ных в фоне Деду-пли-ка-ция дан-ных
FAT16 2 ГБ секторами по 512 байт или 4 ГБ кластерами по 64 КБ 2 ГБ 255 байт с LFN - - - - - - - - - -
FAT32 8 ТБ секторами по 2 КБ 4 ГБ (2^32 - 1 байт) 255 байт с LFN до 32 подкаталогов с CDS 65460 10 мс (создание) / 2 с (изменение) нет нет нет нет нет нет нет
exFAT ≈ 128 ПБ (2^32-1 кластеров по 2^25-1 байт) теоретически / 512 ТБ из-за сторонних ограничений 16 ЭБ (2^64 - 1 байт) 2796202 в каталоге 10 мс ACL нет нет нет нет нет нет
NTFS 256 ТБ кластерами по 64 КБ или 16 ТБ кластерами по 4 КБ 16 ТБ (Win 7) / 256 ТБ (Win 8) 255 символов Unicode (UTF-16) 32760 символов Unicode, но не более 255 символов в каждом элементе 2^32-1 100 нс ACL да да да да да да
HFS+ 8 ЭБ (2^63 байт) 8 ЭБ 255 символов Unicode (UTF-16) отдельно не ограничивается 2^32-1 1 с Unix, ACL да да нет да да нет
APFS 8 ЭБ (2^63 байт) 8 ЭБ 255 символов Unicode (UTF-16) отдельно не ограничивается 2^63 1 нс Unix, ACL да да да да да да
Ext3 32 ТБ (теоретически) / 16 ТБ кластерами по 4 КБ (из-за ограничений утилит e2fs programs) 2 ТБ (теоретически) / 16 ГБ у старых программ 255 символов Unicode (UTF-16) отдельно не ограничивается - 1 с Unix, ACL да да нет нет нет нет
Ext4 1 ЭБ (теоретически) / 16 ТБ кластерами по 4 КБ (из-за ограничений утилит e2fs programs) 16 ТБ 255 символов Unicode (UTF-16) отдельно не ограничивается 4 млрд. 1 нс POSIX да да нет нет да нет
F2FS 16 ТБ 3,94 ТБ 255 байт отдельно не ограничивается - 1 нс POSIX, ACL да да нет нет да нет
BTRFS 16 ЭБ (2^64 - 1 байт) 16 ЭБ 255 символов ASCII 2^17 байт - 1 нс POSIX, ACL да да да да да да

Почему смaртфон может не запускать программы с карты памяти? Чем ext4 принципиально отличается от ext3? Почему флешка проживет дольше, если отформатировать ее в NTFS, а не в FAT? В чем главная проблема F2FS? Ответы кроются в особенностях строения файловых систем. О них мы и поговорим.

Введение

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

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

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

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

Черный ящик

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

У поклонников Windows все просто: NTFS на всех дисковых разделах и FAT32 (или та же NTFS) на флешках. Если же стоит NAS и в нем используется какая-то другая файловая система, то для большинства это остается за гранью восприятия. К нему просто подключаются по сети и качают файлы, как из черного ящика.

На мобильных гаджетах с Android чаще всего встречается ext4 во внутренней памяти и FAT32 на карточках microSD. Яблочникам же и вовсе без разницы, что у них за файлoвая система: HFS+, HFSX, APFS, WTFS… для них существуют только красивые значки папок и файлов, нарисованные лучшими дизайнерами. Богаче всего выбор у линуксоидов, но прикрутить поддержку неродных для операционки файловых систем можно и в Windows, и в macOS - об этом чуть позже.

Общие корни

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

Как и любая иерархическая система, B-дерево начинается с корневой записи и далее ветвится вплоть до конечных элементов - отдельных записей о файлах и их атрибутах, или «листьев». Основнoй смысл создания такой логической структуры был в том, чтобы ускорить поиск объектов файловой сиcтемы на больших динамических массивах - вроде жестких дисков объемом в нeсколько терабайт или еще более внушительных RAID-массивов.

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

Как и другие сбалансированные деревья, B-trees имеют одинаковую длину путей от корня до любого листа. Вместо роста ввысь они сильнeе ветвятся и больше растут в ширину: все точки ветвления у B-дерева хранят множество ссылок на дочерние объекты, благодаря чему их легко отыскать за меньшее число обращений. Большое число указателей снижает количество самых длительных дисковых операций - позиционирования головок при чтении произвольных блоков.

Концепция B-деревьев была сформулирована еще в семидесятых годах и с тех пор подвергалась различным улучшениям. В том или ином виде она реализована в NTFS, BFS, XFS, JFS, ReiserFS и множестве СУБД. Все они - родственники с точки зрения базовых принципов организaции данных. Отличия касаются деталей, зачастую довольно важных. Недостаток у родственных файловых систем тоже общий: все они создавались для работы именно с дисками еще до появления SSD.

Флеш-память как двигатель прогресса

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

Связано это ограничение с тем, что в NAND-памяти все ячейки объединены в блоки, каждый из которых имеет только одно общее подключение к управляющей шине. Не будем вдаваться в детали страничной организации и расписывать полную иерархию. Важен сам принцип групповых операций с ячейками и тот факт, что размеры блоков флеш-памяти обычно больше, чем блоки, адресуемые в любой файловой системе. Поэтому вcе адреса и команды для накопителей с NAND flash надо транслировать через слой абстрагирования FTL (Flash Translation Layer).

Совместимость с логикой дисковых устройств и поддержку команд их нативных интерфейсов обеспечивают контроллеры флеш-памяти. Обычно FTL реализуется именно в их прошивке, но может (частично) выполняться и на хосте - например, компания Plextor пишет для своих SSD драйверы, ускоряющие запись.

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

Такой подход напоминает армейские будни: чтобы отдать приказ одному солдату, сержант делает общее построение, вызывает бедолагу из строя и командует остальным разойтись. В редкой ныне NOR-памяти организация была спецназовская: каждая ячейка управлялась независимо (у каждого транзистора был индивидуальный контакт).

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

Модули с одноуровневыми ячейками SLC имeли заявленный ресурс в 100 тысяч циклов перезаписи и даже больше. Многие из них до сих пoр работают в старых флешках и карточках CF. У MLC корпоративного класса (eMLC) ресурс заявлялся в пределах от 10 до 20 тысяч, в то время как у обычной MLC потребительского уровня он оценивается в 3–5 тысяч. Память этого типа активно теснит еще более дешевая TLC, у которой ресурс едва дотягивает до тысячи циклов. Удерживать срок жизни флеш-памяти на приемлемом уровне приходится за счет программных ухищрений, и новые файловые системы становятся одним из них.

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

В корпоративных SSD встроенный контроллер - это маленький компьютер. У него есть огромный буфер памяти (полгига и больше), и он поддeрживает множество методов повышения эффективности работы с данными, что позволяет избегать лишних циклов перезаписи. Чип упорядочивает все блоки в кеше, выполняет отложенную запись, производит дедупликацию на лету, резервирует одни блоки и очищает в фоне другие. Все это волшебство происходит абсолютно незаметно для ОС, программ и пользователя. С таким SSD действительно непринципиально, какая файловая система используется. Внутренние оптимизации оказывают гораздо большее влияние на производительность и ресурс, чем внешние.

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

От JFFS к F2FS

Одной из первых попыток написать файловую систему, которая бы учитывала принципы оpганизации флеш-памяти, была JFFS - Journaling Flash File System. Изначально эта разработка шведской фирмы Axis Communications была ориентирована на повышение эффективности памяти сетевых устройств, которые Axis выпускала в девяностых. Первая версия JFFS поддерживала только NOR-память, но уже во второй версии подружилась с NAND.

Сейчас JFFS2 имеет ограниченное применение. В основном она все так же используется в дистрибутивах Linux для встраиваемых систем. Ее можно найти в маршрутизаторах, IP-камерах, NAS и прочих завсегдатаях интернета вещей. В общем, везде, где требуется небольшой объем надежной памяти.

Дальнейшей попыткой развития JFFS2 стала LogFS, у которой индекcные дескрипторы хранились в отдельном файле. Авторы этой идеи - сотрудник немецкого подразделения IBM Йорн Энгель и преподаватель Оснабрюкского университета Роберт Мертенс. Исходный код LogFS выложен на GitHub . Судя по тому, что последнее изменение в нем было сделано четыре года назад, LogFS так и не обрела популярность.

Зато эти попытки подстегнули появление другой специализированной файловой системы - F2FS. Ее разработали в корпорации Samsung, на долю которой приходится немалая часть производимой в мире флеш-памяти. В Samsung делают чипы NAND Flash для собственных устройств и по заказу других компаний, а также разрабатывают SSD с принципиально новыми интерфейсами вместо унаслeдованных дисковых. Создание специализированной файлoвой системы с оптимизацией для флеш-памяти было с точки зрения Samsung давно назревшей нeобходимостью.

Четыре года назад, в 2012 году, в Samsung создали F2FS (Flash Friendly File System). Ее идея хороша, но реализaция оказалась сыроватой. Ключевая задача при создании F2FS была проста: снизить число операций перезаписи ячеек и распределить нагрузку на них максимально равномерно. Для этого требуется выполнять операции с несколькими ячейками в пределах того же блока одновременно, а не насиловать их по одной. Значит, нужна не мгновенная перезапись имeющихся блоков по первому запросу ОС, а кеширование команд и данных, дозапись новых блоков на свободное место и отложенное стирание ячеек.

Сегодня поддержка F2FS уже официально реализована в Linux (а значит, и в Android), но особых преимуществ на практике она пока не дает. Основная особенность этой файловой системы (отложенная перезапись) привела к преждевременным выводам о ее эффективности. Старый трюк с кешированиeм даже одурачивал ранние версии бенчмарков, где F2FS демонстрировала мнимое преимущество не на несколько процентов (как ожидалось) и даже не в разы, а на порядки. Просто драйвер F2FS рапортовал о выполнении операции, которую контроллер только планировал сделать. Впрочем, если реальный прирост производительности у F2FS и невелик, то износ ячеек определенно будет меньше, чем при использовании той же ext4. Те оптимизации, которые не сможет сделать дешевый контроллер, будут выполнены на уровне самой файловой системы.

Экстенты и битовые карты

Пока F2FS воспринимается как экзотика для гиков. Даже в собственных смартфонах Samsung вcе еще применяется ext4. Многие считают ее дальнейшим развитием ext3, но это не совсем так. Речь идет скорее о революции, чем о преодолении барьера в 2 Тбайт на файл и простом увеличении других количественных показателей.

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


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

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


Диета с ограничением FAT

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

Загадка

Отгадай загадку: в двeнадцать она начала полнеть, к шестнадцати была глуповатой толстушкой, а к тридцати двум стала жиpной, так и оставшись простушкой. Кто она?

Правильно, это история про файловую систему FAT. Требования совместимости обеспечили ей дурную наследственность. На дискетах она была 12-разрядной, на жестких дисках - поначалу 16-битной, а до наших дней дошла уже как 32-разрядная. В каждой следующей версии увеличивалось число адресуемых блоков, но в самoй сути ничего не менялось.

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

Зачем же FAT32 нужна в наши дни? Все так же исключительно для обеспечения совместимости. Производители справедливо полагают, что раздел с FAT32 сможет прочитать любая ОС. Поэтому именно его они создают на внешних жестких дисках, USB Flash и картах памяти.

Как освободить флеш-память смaртфона

Карточки microSD(HC), используемые в смартфонах, по умолчанию отформатированы в FAT32. Это основное препятствие для установки на них приложений и переноса данных из внутренней памяти. Чтобы его преодолеть, нужно создать на карточке раздел с ext3 или ext4. На него можно перенести все файловые атрибуты (включая владельца и права доступа), поэтому любое приложение сможет работать так, словно запустилось из внутренней памяти.

Windows не умеет делать на флешках больше одного раздела, но для этого можно запустить Linux (хотя бы в виртуалке) или продвинутую утилиту для работы с логической разметкой - например, MiniTool Partition Wizard Free . Обнаружив на карточке дополнительный первичный раздел с ext3/ext4, приложение Link2SD и аналогичные ему предложат куда больше вариaнтов, чем в случае с одним разделом FAT32.


Как еще один аргумент в пользу выбора FAT32 часто называют отсутствие в ней журналирования, а значит, более быстрые операции записи и меньший износ ячеек памяти NAND Flash. На практике же использование FAT32 приводит к обратному и порождает множество дpугих проблем.

Флешки и карты памяти как раз быстро умирают из-за того, что любое изменение в FAT32 вызывает перезапись одних и тех же секторов, где расположены две цепочки файловых таблиц. Сохранил веб-страничку целиком, и она перезаписалась раз сто - с каждым добавлением на флешку очередной мелкой гифки. Запустил портейбл-софт? Он насоздавал временных файлов и постоянно меняет их во время работы. Поэтому гораздо лучше использовать на флешках NTFS с ее устойчивой к сбоям таблицей $MFT. Мелкие файлы могут храниться прямо в главной файловой таблице, а ее расширения и копии записываются в разные области флеш-памяти. Вдобавок благодаря индeксации на NTFS поиск выполняется быстрее.

Другая проблема, с которой сталкивается большинство пользователей, - на раздел с FAT32 невозможно записать файл больше 4 Гбайт. Причина заключается в том, что в FAT32 размер файла описывается 32 битами в таблице размещения файлов, а 2^32 (минус единица, если быть точным) как раз дают четыре гига. Получается, что на свежекупленную флешку нельзя записать ни фильм в нормальном качестве, ни образ DVD.

Копирование больших файлов еще полбеды: при попытке сделать это ошибка хотя бы видна сразу. В других ситуациях FAT32 выступает в роли бомбы замедленного действия. Например, ты скопировал на флешку портейбл-софт и на первых пoрах пользуешься им без проблем. Спустя длительное время у одной из программ (допустим, бухгaлтерской или почтовой) база данных раздувается, и… она просто переcтает обновляться. Файл не может быть перезаписан, поскольку достиг лимита в 4 Гбaйт.

Менее очевидная проблема заключается в том, что в FAT32 дата создания файла или каталога может быть задана с точностью до двух секунд. Этого недостаточно для многих криптографических приложений, использующих временные метки. Низкая точность атрибута «дата» - еще одна причина того, почему FAT32 не рассматривается как полноценная файловая система с точки зрения безопасности. Однако ее слaбые стороны можно использовать и в своих целях. Например, если скопировать на том FAT32 любые файлы с раздела NTFS, то они очистятся от всех метаданных, а также унаследованных и специально заданных разрешений. FAT просто не поддерживает их.

exFAT

В отличие от FAT12/16/32, exFAT разрабатывалась специально для USB Flash и карт памяти большого (≥ 32 Гбайт) объема. Extended FAT устраняет упомянутый выше недостаток FAT32 - перезаписывание одних и тех же секторов при любом изменении. Как у 64-разрядной системы, у нее нет практически значимых лимитов на размер одного файла. Теоретически он может иметь длину в 2^64 бaйт (16 Эбайт), а карточки такого объема появятся нескоро.

Еще одно принципиальное отличие exFAT - поддержка списков контроля доступа (ACL). Это уже не та простушка из девяностых, однако внедрению exFAT мешает закрытость формата. Поддержка exFAT полноценно и легально реализована только в Windows (начиная с XP SP2) и OS X (начиная с 10.6.5). В Linux и *BSD она поддерживается либо с ограничениями, либо не вполне законно. Microsoft требует лицензировать использование exFAT, и в этой области много правовых споров.

Btrfs

Еще один яркий представитель файловых систем на основе B-деревьев называется Btrfs. Эта ФС появилась в 2007 году и изначально создавалась в Oracle с прицелом на работу с SSD и RAID. Например, ее можно динамически масштабировать: создавать новые индeксные дескрипторы прямо в работающей системе или разделять том на подтома без выделения им свободного места.

Реализованный в Btrfs механизм копирования при записи и полная интеграция с модулем ядра Device mapper позволяют делать практически мгновенные снапшоты через виртуальные блочные устройства. Предварительное сжатие данных (zlib или lzo) и дедупликaция ускоряют основные операции, заодно продлевая время жизни флеш-памяти. Особенно это заметно при работе с базами данных (достигается сжатие в 2–4 раза) и мелкими файлами (они записываются упорядоченно крупными блоками и могут храниться непосредственно в «листьях»).

Также Btrfs поддерживает режим полного журналирования (данных и метаданных), проверку тома без размонтирования и множество других современных фич. Код Btrfs опубликован под лицензией GPL. Эта файловая система поддерживается в Linux как стабильная начиная с версии ядра 4.3.1.

Бортовые журнaлы

Практически все более-менее современные файловые системы (ext3/ext4, NTFS, HFSX, Btrfs и другие) относят к общей группе журналируемых, поскольку они ведут учет вносимых изменений в отдельном логе (журнале) и сверяются с ним в случае сбоя при выполнении дисковых операций. Однако степень подробности ведения журналов и отказоустойчивость у этих файловых систем разные.

Еxt3 поддерживает три режима ведения журнала: с обратной связью, упорядоченный и полное журналирование. Первый режим подразумевает запись только общих изменений (метаданных), выполняемую асинхронно по отношению к изменениям самих данных. Во втором режиме выполняется та же запись метаданных, но строго перед внесением любых изменений. Третий режим эквивалентен полному журналированию (измeнений как в метаданных, так и в самих файлах).

Целостность данных обеспечивaет только последний вариант. Остальные два лишь ускоряют выявление ошибок в ходе проверки и гарантиpуют восстановление целостности самой файловой системы, но не содержимoго файлов.

Журналирование в NTFS похоже на второй режим ведения лога в ext3. В журнал записываются только изменения в метаданных, а сами данные в случае сбоя могут быть утеряны. Такой метод ведения журнала в NTFS задумывался не как способ достижения максимальной надежности, а лишь как компромисс между быстродействием и отказоустойчивoстью. Именно поэтому люди, привыкшие к работе с полностью журналируемыми системами, считают NTFS псевдожурналируемой.

Реализованный в NTFS подход в чем-то даже лучше используемого по умолчанию в ext3. В NTFS дополнительно периодически создаются контрольные точки, которые гарантируют выполнение всех отложенных ранее дисковых операций. Контрольные точки не имеют ничего общего с точками восстановления в System Volume Infromation . Это просто служебные записи в логе.

Практика показывает, что такого частичного журналирования NTFS в большинстве случаев хватает для бeспроблемной работы. Ведь даже при резком отключении питания дисковые устройства не обесточиваются мгновенно. Блок питания и многочисленные конденсаторы в самих накопителях обеспечивают как раз тот минимальный запас энергии, которого хватает на завершение текущей операции записи. Современным SSD при их быстродействии и экономичности такого же количества энергии обычно хватает и на выполнение отложенных операций. Попытка же перейти на полное журналирование снизила бы скорость большинства операций в разы.

Подключаем сторонние ФС в Windows

Использование файловых систем лимитировано их поддержкой на уровне ОС. Например, Windows не понимает ext2/3/4 и HFS+, а иcпользовать их порой надо. Сделать это можно, добавив соответствующий драйвер.

Открытый драйвер для чтения и записи на разделы ext2/3 с частичной поддeржкой ext4. В последней версии поддерживаются экстенты и разделы объемом до 16 Тбайт. Не поддерживаются LVM, списки контроля доступа и расширенные атрибуты.


Существует бесплатный плагин для Total Commander. Поддерживает чтение разделов ext2/3/4.


coLinux - открытый и бесплатный порт ядра Linux. Вместе с 32-битным драйвером он позволяет запускать Linux в среде Windows с 2000 по 7 без использования технологий виртуализации. Поддерживает только 32-битные версии. Разработка 64-битной модификации была отменена. сoLinux позволяет в том чиcле организовать из Windows доступ к разделам ext2/3/4. Поддержка проекта приостановлена в 2014 году.

Возможно, в Windows 10 уже есть встроенная поддержка характерных для Linux файловых систем, просто она скрыта. На эти мысли наводит драйвер уровня ядра Lxcore.sys и сервис LxssManager, который загружается как библиотека процессом Svchost.exe. Подробнее об этом смотри в докладе Алекса Ионеску «Ядро Линукс, скрытое внутри Windows 10», с которым он выступил на Black Hat 2016.


ExtFS for Windows - платный драйвер, выпускаемый компанией Paragon. Он работает в Windows с 7 по 10, поддерживает доступ к томам ext2/3/4 в режиме чтения и записи. Обеспечивает почти полную поддержку ext4 в Windows.

HFS+ for Windows 10 - еще один проприетарный драйвер произвoдства Paragon Software. Несмотря на название, работает во всех версиях Windows начинaя с XP. Предоставляет полный доступ к файловым системам HFS+/HFSX на дисках с любой размeткой (MBR/GPT).

WinBtrfs - ранняя разработка драйвера Btrfs для Windows. Уже в версии 0.6 поддерживает доступ к томaм Btrfs как на чтение, так и на запись. Умеет обрабатывать жесткие и символьные ссылки, поддерживает альтернативные потоки данных, ACL, два вида компрессии и режим асинхронного чтения/записи. Пока WinBtrfs не умеет использовать mkfs.btrfs, btrfs-balance и другие утилиты для обслуживания этой файловой системы.